当前位置: 代码迷 >> 汇编语言 >> div运算的规定有关问题
  详细解决方案

div运算的规定有关问题

热度:6250   发布时间:2013-02-26 00:00:00.0
div运算的规定问题
div运算的规定:32位的对16位除;16位的对8位除
假如被除数位03e9(16位),64h(8位),就是应该mov al,64h;结果肯定是对的 那为什么mov ax,64h,结果就会错了?明明在寄存器里的数值是一样的啊!不都是ax=0064h嘛!
-----------
-a
0B26:0100 mov ax,03e9
0B26:0103 mov bx,64
0B26:0106 div bx
0B26:0108
-g 0106

AX=03E9 BX=0064 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0B26 ES=0B26 SS=0B26 CS=0B26 IP=0106 NV UP EI PL NZ NA PO NC
0B26:0106 F7F3 DIV BX
-t

AX=000A BX=0064 CX=0000 DX=0001 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0B26 ES=0B26 SS=0B26 CS=0B26 IP=0108 NV UP EI PL NZ NA PO NC
0B26:0108 00F7 ADD BH,DH
-------------------
-a
0B26:0126 mov ax,03e9
0B26:0129 mov bl,64
0B26:012B div bl
0B26:012D
-g 012d

AX=010A BX=0064 CX=0000 DX=0001 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0B26 ES=0B26 SS=0B26 CS=0B26 IP=012D NV UP EI PL NZ NA PO NC
0B26:012D 032A ADD BP,[BP+SI] SS:0000





------解决方案--------------------------------------------------------
div bx 是 DX:AX 除以 BX,商在 AX 余数在 DX 。
div bl 的话,则是 AX/BL ,商在 AL 而余数在 AH 。
所以,上面的运算结果,没有什么错误的。
  相关解决方案