DDATA SEGMENT MES1 MES2 NUMB DDATA
DB 'The least number is:$'
DB 0AH,0DH,'The largest number is:$' DB 0D9H,07H,8BH,0C5H,0EBH,04H,9DH,0F9H ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DDATA START: MOV AX,DDATA MOV DS,AX
MOV SI,OFFSET NUMB MOV CX,0008H JCXZ A4 MOV BH,[SI] MOV BL,BH
A1: LODSB CMP AL,BH JBE A2 MOV BH,AL JMP A3 A2: CMP AL,BL JAE A3 MOV BL,AL A3: LOOP A1
A4: MOV DX,OFFSET MES1 MOV AH,09H INT 21H
MOV AL,BL AND AL,0F0H SHR AL,4
CMP AL,0AH JB C2 ADD AL,07H C2: ADD AL,30H MOV DL,AL
MOV AH,02H INT 21H MOV AL,BL
AL=DS:[SI],SI=SI+1
mes1
4 位
- 36 - ;;显示;取高 ;显示字符
AND AL,0FH CMP AL,0AH JB C3 ADD AL,07H C3: ADD AL,30H MOV DL,AL MOV AH,02H INT 21H
MOV DX,OFFSET MES2
MOV AH,09H INT 21H MOV AL,BH AND AL,0F0H SHR AL,4 CMP AL,0AH JB C22 ADD AL,07H C22: ADD AL,30H MOV DL,AL
MOV AH,02H INT 21H MOV AL,BH AND AL,0FH CMP AL,0AH JB C33 ADD AL,07H C33: ADD AL,30H MOV DL,AL MOV AH,02H INT 21H
START0: MOV AH,06H MOV DL,0FFH INT 21H
JE START0 MOV AX,4C00H INT 21H CODE ENDS
END START
;取低4位
;显示字符
;显示mes2
; 取高 4 位
; 显示字符
; 取低4位
; 显示字符
;判断是否有键按下;若没有转START0 ;有键返回DOS
- 37 -
实验六 循环程序设计实验
一、实验目的
掌握循环程序的设计方法。
二、实验内容及说明
本实验要求通过求某数据区内负数的个数来表现循环程序的结构形式。要求实验程序在数据区中存放一组数据,凡是符号位为1 的数据判为负数,逐个判断数据区内的数据,然后将所有数据中凡是符号位为1 的数据的个数累加起来,即得到区内所包含负数的个数。循环程序的结构示意如图6-1所示。
循环部分 循环条件满足? Y 循环条件满足? N Y 循环部分 N
图6-1 循环结构示意图
三、实验步骤
(1) 运行DVCC32JHP 软件,选择编辑Edit 菜单编写实验程序。在数据段中声明10字节的数据为:12H,88H,82H,89H,33H,90H,01H,10H,0BDH,01H。
(2) 使用“ASM编译”菜单中“编译+连接+运行”选项,对实验程序进行汇编、连接。汇编、连接无误的话,就直接运行程序。观察运行结果。
(3) 更改数据区中的数据,考察程序的正确性。
四、参考流程图
如图6-2所示
五、参考程序
参考实验程序文件名DVA6.ASM(在文件夹“ASM_汇编例程”中) 实验程序清单如下: STACK1 SEGMENT STACK DW 256 DUP(?) STACK1 ENDS
- 38 -
DDATA SEGMENT
NUMB DB 12H,88H,82H,89H,33H,90H,01H,10H,0BDH,01H MES DB 'The number of negative is:$' DDATA ENDS CODE SEGMENT
ASSUME CS:CODE,DS:DDATA START: MOV AX,DDATA MOV DS,AX
MOV DI,OFFSET NUMB XOR BH,BH MOV CX,10D A1: MOV AL,[DI] TEST AL,80H JE A2 INC BL A2: INC DI LOOP A1
MOV DX,OFFSET MES MOV AH,09H INT 21H
MOV AL,BL AND AL,0F0H SHR AL,4
CMP AL,0AH JB C2 ADD AL,07H C2: ADD AL,30H MOV DL,AL MOV AH,02H INT 21H MOV AL,BL
AND AL,0FH CMP AL,0AH JB C3 ADD AL,07H C3: ADD AL,30H MOV DL,AL MOV AH,02H INT 21H
mes 定义的字符串
4位
4位
显示字符
- 39 - ;显示 ;取高 ;显示字符 ;取低 ;
START0: MOV AH,06H ;判断是否有键按下
MOV DL,0FFH INT 21H
JE START0 ;若没有转START0 MOV AX,4C00H ;有键返回DOS
INT 21H CODE ENDS
END START
开始 DI=数据区地址 BH=0,清负数个数计数器 CX=数据个数 取数据 N 是负数吗? Y 负数个数计数器BH加1 数据区地址DI加1 N 数据取完吗? Y 显示MES定义的字符串 显示负数个数 返回DOS 图6-2 分支程序设计流程
- 40 -