目录 上一页 下一页 下一章

第6章 文字输出与键盘输入 -151-

-g=100 109[Enter]
被除数的低16位除数被除数的高16位
AX=FFF6BX=000CCX=0000DX=000BSP=FFEEBP=0000SI=0000DI=0000
DS=13C6ES=13C6SS=13C6CS=13C6IP=0109 NV UP EI PL NZ NA PO NC
13C6:0109F7F3DIV BX
  以下是"DIV"指令执行后的寄存器情况,从中可以看到商与余数数的位置。000BFFF6H除以000CH应该商0FFFFH余2,从程序执行的结果来看AX寄存器中的确保存着商数而余数在DX寄存器中。
-t余数
AX=FFFFBX=000CCX=0000DX=0002SP=FFEEBP=0000SI=0000DI=0000
DS=13C6ES=13C6SS=13C6CS=13C6IP=010B NV UP EI PL NZ NA PO NC
13C6:010BB80020MOV AL,2000
  与MUL指令一样,CPU判断被除数是32位还是16位同样依据DIV指令之后的操作数。若操作数是16位,则被除数就是由DX与AX寄存器共同保存的32位数据;若操作数是8位,则被除数就是AX寄存器中的16位数据。请看下面的跟踪结果:
-g=10b 113[Enter]
被除数的低16位除数被除数的高16位
AX=2000BX=00FFCX=0000DX=00FFSP=FFEEBP=0000SI=0000DI=0000
DS=13C6ES=13C6SS=13C6CS=13C6IP=0113 NV UP EI PL NZ NA PO NC
13C6:0113F6F3DIV BL
  我们有意"创造"了一个32位的被除数00FF2000H,然而除数是一个8位二进制数,通过以下的跟踪结果我们可以看到究竟谁是真正的被除数。
-t商与余数
AX=2020BX=00FFCX=0000DX=00FFSP=FFEEBP=0000SI=0000DI=0000
DS=13C6ES=13C6SS=13C6CS=13C6IP=0115 NV UP EI PL NZ AC PE CY
13C6:011590NOP
  虽然DX寄存器中存入了00FFH,但由于DIV指令的操作数是8位寄存器BL,所以DX寄存器并未参与这次除法运算,真正的被除数是AX寄存器中的2000H。
  试验<3>
  C:\ASM\>DEBUG[Enter]
  -a[Enter]
  13C6:0100 mov ax,2000
  13C6:0103 mov bl,2

Copyright © 2004-2015 Reanimator www.cookmoon.org

目录 上一页 下一页 下一章