DATA SEGMENT
STRING DB 'Integers that are divisible by 2 and 3 below 100 are:',0DH,0AH,'$' ;装入字符串
NUM DB 100 DUP(?)
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA
MOV DS,AX
MOV DX,OFFSET STRING
MOV AH,09H ;显示字符串'Integers that are divisible by 2 and 3 below 100 are:
INT 21H
MOV BX,96 ; 赋初值(从96开始循环)
MOV NUM,6 ; 赋初值(以6为模)
CYCLE:
MOV AX,BX
DIV NUM
CMP AH,0 ; 如果余数为零 跳转到SHOW段(AH存余,AL存商)
JZ SHOW
DEC BX ;自减一
CMP BX,05H ;判断减一后的值是否等于5
JNZ CYCLE ;不是5,继续循环
JMP EXIT ;是5, 退出
SHOW:
MOV AX,BX ; 将被除数打入AX备用(之后对AX模运算)
MOV CL,0AH ; 10->CL
DIV CL ; 除10运算,求十进制的个位
MOV DH,AH ; AL存余,AH存商(模10的余数和商)
MOV DL,AL
CMP AL,0 ; 除10余数为零(原来BX中的数是10的整数倍)
JZ SHOW1
ADD DL,30H ;
打印十进制数的ASC码?????为什么是这样?
MOV AH,02H
INT 21H
MOV DL,20H ; 20H 是空格的asc码
MOV AH,02H ;
输出之前的一个空格字符(默认输出DL的值)
INT 21
SHOW1:
;SHOW 与SHOW1分别打印的是什么?
MOV DL,DH ; 将原来模10的余数打入DL ???????
ADD DL,30H ; 打印十进制数的ASC码
MOV AH,02H
INT 21H
MOV DL,20H ; 20H 是空格的asc码
MOV AH,02H ; 输出之前的一个空格字符(默认输出DL的值)
INT 21
DEC BX ; 自减一
CMP BX,05H ; 判断减一后,是否为5(因为1-100之内能被6整除的数最小就是6,只循环到5即可)
JZ EXIT
JMP CYCLE
EXIT:
MOV AH,4CH
INT 21H
CODE ENDS
END START
这是运行截图 为什么没有空格啊。。。。。。请大神指教。。。。
(注 :问题已经用红色标出)