关于div的一些疑惑
在写一个简单除法计算器的时候16位被除数除以八位除数
其中商在al 余数在ah
假如我没有push ax将其保存下来
先后输出al ah时候
al能正常输出 但是ah却不能
想知道是被覆盖了吗
为什么呢 最好还是贴代码 只截取了除法这一段代码 如下
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
MOV AH,1
INT 21H
CMP AL,27
JZ ABC
MOV BL,AL ;输入bl
MOV AH,1;输入符号
INT 21H
CMP AL,'+'
JZ JIA
cmp AL,'-'
JZ JIAN
CMP AL,'*'
JZ CHENG
CMP AL,'/'
JZ CHU
CHU:
MOV AH,1
INT 21H
SUB AL,'0'
SUB BL,'0'
MOV CL,AL
MOV DL,'=' ;输出=
MOV AH,02H
INT 21H
MOV AL,BL ;被除数 al
mov AH,0
DIV CL
ADD AL,'0';输出商
MOV DL,AL
MOV AH,02H
INT 21H
ADD AH,'0';输出余数
MOV DL,AH
MOV AH,02H
INT 21H
MOV DL,0AH
MOV AH,02H
INT 21H
JMP START
ABC: MOV AH,4CH
INT 21H
CODES ENDS
END START
结果ah好像是被覆盖了 不能输出正确的余数 但是不大清楚为什么会这样 如下是改进后的
CHU:
MOV AH,1
INT 21H
SUB AL,'0'
SUB BL,'0'
MOV CL,AL
MOV DL,'=' ;输出=
MOV AH,02H
INT 21H
MOV AL,BL ;被除数 al
mov AH,0
DIV CL
PUSH AX
ADD AL,'0';输出商
MOV DL,AL
MOV AH,02H
INT 21H
MOV DL,'-'
MOV AH,02H
INT 21H
POP AX
ADD AH,'0';输出余数
MOV DL,AH
MOV AH,02H
INT 21H
MOV DL,0AH
MOV AH,02H
INT 21H
JMP START
{:10_260:}这是在自问自答吗?
不push,ah被改变了啊,ah作为int 21h的功能号,还存余数等等,不保存,怎么会正确输出呢?
页:
[1]