+ -
当前位置:首页 → 问答吧 → 在屏幕上输出0-98,以十进制显示。不懂的问题在线等

在屏幕上输出0-98,以十进制显示。不懂的问题在线等

时间:2011-01-11

来源:互联网

Assembly code
CODE SEGMENT PARA 'CODE'
ASSUME CS:CODE
MAIN PROC FAR
MOV AX,0
MOV CX,99
FLAG:
MOV AH,0
MOV DH,0
CMP AL,0
JZ LOP1
CMP AL,10
JB LOP2
//PUSH AX
MOV BL,10
DIV BL
MOV DH,AL
MOV BH,AH
ADD DH,30H
MOV DL,DH
MOV AH,2
INT 21H
ADD BH,30H
MOV DL,BH
MOV AH,2
INT 21H
MOV DL,' '
MOV AH,2
INT 21H
//POP AX
FLAG1:
ADD AL,1
LOOP FLAG
JMP STOP
LOP1:
//PUSH AX
MOV DL,30H
MOV AH,2
INT 21H
MOV DL,' '
MOV AH,2
INT 21H
//POP AX
JMP FLAG1
LOP2:
//PUSH AX
MOV DH,AL
ADD DH,30H
MOV DL,DH
MOV AH,2
INT 21H
MOV DL,' '
MOV AH,2
INT 21H
//POP AX
JMP FLAG1
STOP: MOV AH,4CH
INT 21H
MAIN ENDP
CODE ENDS
END

上面代码中用//隔开的代码,如果不加上这些,结果是输出0 33 33 一直就是33
但是加上//后面的代码就是0-98得数,这是为什么。难道系统功能调用会影响AX的值吗

作者: jianshan198977   发布时间: 2011-01-11

会啊。显示字符的 02h 功能调用,会将 DL 中的待显示字符返回在 AL 里的;上面的代码就使用了 AL 作为每次显示的内容。所以,需要先行保存再恢复的;或者是使用其它的寄存器或内存变量来担任这个角色。

作者: zara   发布时间: 2011-01-11

课本中就没介绍显示字符的 02h 功能调用,会将 DL 中的待显示字符返回在 AL 里。那样的话,使用系统功能调用时,最好进行保存数据的操作,以免产生不必要的错误。
保护数据的操作是否应该在编程时经常使用,不管会不会影响寄存器

作者: jianshan198977   发布时间: 2011-01-11

引用 2 楼 jianshan198977 的回复:
课本中就没介绍显示字符的 02h 功能调用,会将 DL 中的待显示字符返回在 AL 里。那样的话,使用系统功能调用时,最好进行保存数据的操作,以免产生不必要的错误。
保护数据的操作是否应该在编程时经常使用,不管会不会影响寄存器


 你那是什么课本~ 我看过的书都有这种常用调用的介绍哦~

作者: znxllyuan   发布时间: 2011-01-11