有关王爽老师汇编语言div指令

有关王爽老师汇编语言div指令如图,我不明白当 除数为16位时 被除数是怎么从16位变为32位的, dx*10000H+ax什么意思啊 谢谢了

第1个回答  2017-11-03
这是CPU设计时定义好的东西,并不是汇编语言决定的。
CPU在设计时,就做了这样的规则:
如果是8位除,则将被除数(al)扩展到16位,即将ah+al的值做为被除数(不管ah原来是什么值,使用ax做为被除数,所以如果做al除以8位数,需要自己先将ah清0)
而ax = ah * 100H + al
同理,如果是16位除,则需要将ax扩展为32位,而定义为:dx+ax,(dx自己清0)
值就是dx * 10000H + ax,这就是32位数的由来。追问

谢谢了 明白了

本回答被提问者和网友采纳
第2个回答  2023-01-01

图中第一条 DIV 指令:

  除数,是字节属性,就是 8 位数。

  被除数,则是 16 位的。

执行后,得到:商,存在 AH,余数,存在于 AL。都是八位的。

-----------------

图中第二条 DIV 指令:

 除数是“字属性”,这就是 16 位数,

 被除数是 32 位的(DX 是高 16位、AX 是低 16 位)。

执行后,得到:商,存在 AX,余数,存在于 DX。

商和余数,都是 16 位的。

-----------------

32 位的被除数(DX 是高 16位、AX 是低 16 位),

也可以要写成:(DX * 2^16 + AX)。

而他写的则是:(DX * 10000H + AX )。

实际上,这里写的相乘、相加,都是不需要考虑的。

我们只需要知道,CPU 仅仅做了一个除法而已。

-----------------

很简单事情,让他写的稀烂!

相似回答