球球chenjay 发表于 2017-7-3 16:16:55

关于div的一些疑惑

在写一个简单除法计算器的时候
16位被除数除以八位除数
其中商在al 余数在ah
假如我没有push ax将其保存下来
先后输出al ah时候
al能正常输出 但是ah却不能
想知道是被覆盖了吗
为什么呢

人造人 发表于 2017-7-3 16:21:11

最好还是贴代码

球球chenjay 发表于 2017-7-3 16:40:08

只截取了除法这一段代码 如下
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好像是被覆盖了 不能输出正确的余数

球球chenjay 发表于 2017-7-3 16:41:22

但是不大清楚为什么会这样 如下是改进后的
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

erh 发表于 2017-7-4 10:33:14

{:10_260:}这是在自问自答吗?
不push,ah被改变了啊,ah作为int 21h的功能号,还存余数等等,不保存,怎么会正确输出呢?
页: [1]
查看完整版本: 关于div的一些疑惑