603717321 发表于 2016-4-23 10:19:38

已经解决

本帖最后由 603717321 于 2016-4-27 23:15 编辑

assume cs:code
code segment
start:
;除数为十六位,被除数为32位;商在AX中存放,余数在DX中存放
        mov dx, 1;
        mov ax, 100002
        mov bx, 100
        div bx
code ends
end start

yundi 发表于 2016-4-23 19:12:16

把错误提示发出来看看。你确定是dx的问题?看你的代码明显是ax 超范围了。

远山 发表于 2016-4-23 19:15:44

你这段代码写错了吧,100002已经大于65535了,说明ax已经放不下它了,所以要用ax和dx两个寄存器来存放,具体的公式汇编语言书上P170有解释,看下子。

603717321 发表于 2016-4-24 21:44:00

本帖最后由 603717321 于 2016-4-27 23:13 编辑

66

远山 发表于 2016-4-27 13:30:49

603717321 发表于 2016-4-24 21:44
就如此图如果把mov dx, 1
修改为mov dx, 2
输出就会就会不正确




程序和debug结果如上图:dx=2,ax=86a1h,转换成10进制就是165537,再除以100(bx=100),商就是1655(转换成16进制就是0677),余数为37(转换成16进制就是0025),所以最后ax=0677,dx=0025,没有问题的。
页: [1]
查看完整版本: 已经解决