汇编imul的一个问题

来源:百度知道 编辑:UC知道 时间:2024/05/22 00:54:30
已知 (AL)=96H (BL)=12H
执行 IMUL BL
问AH AL分别是多少?指令执行后ax=0F88CH,这时,把96H看作带符号数,是一个负数,12H是一个正数,也就是十进制的-106*18=-1908=-11101110100B,转换成十六进制补码就是F88CH。

我想文的是为什么96H看成负?12H看成正数 -106怎么得到的 F怎么来的 好+分谢谢

我想,关于补码,LZ应该已经有所了解了,不再过多解释.
为什么96H会被看成负数?问题就出在IMUL指令上!
IMUL这个指令与MUL是有区别的:IMUL是整数乘法指令,对于乘数与被乘数,它都会当作有符号数来看待!
96H的最高位是1,当作有符号数的时候,它就是负数;而12H的最高位是0,是正数.
正负相乘,结果是负数.
96H的补码取反加1就是-106,-106*18=-1908,在这里,得到的1908其实是个绝对值!得转换成补码,1908的16进制是774H,经过取反加1后,是88CH.注意:两个8位相乘,结果返回到AX中!所以,AX的值应该是:88CH.但是,请LZ注意观察,在16位的AX中88CH却是个正数!(因为负数的最高位必须是1),结果不符!所以,IMUL指令默认对结果进行了"位扩展",88CH扩展后就是F88CH了.

个人理解,仅供参考.