汇编语言 打印1-100中能被6整除的数,为什么打印不出空格?请大神指教

zhongguojiexiaochen 2014-05-12 05:20:05
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

这是运行截图 为什么没有空格啊。。。。。。请大神指教。。。。


(注 :问题已经用红色标出)
...全文
383 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
感激不尽!
gsy999 2014-05-12
  • 打赏
  • 举报
回复
  首先你的算法显得笨,因为能被6整除的数一定是6的整倍数,所以你应该建一个循环,在循环中将一个初值为0的变量每次加6,然后与100相比较,小于等于100的就输出这个变量,并再循环,直至这个变量大于100为止。   至于不能输入空格,那是因为你将int 21h 写成了int 21

21,499

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧