2015-10-14 23 views
1

请你指教应遵循什么程序如下解决:装配IMUL和IDIV

mov ax, 0835 h 
mov cv, 005d h 
idiv cl 

AX =?

正确答案:3716 我的回答:0016(我通过转换0835h到2101十进制和005dh 93十进制得到它,然后除以93分之2101= 22.59然后CONVER 22回为十六进制,并得到16。因此AX得到商数。0016h

而且,从什么代码收到以下

mov ax, 0084 
mov bx, 009C 
imul bl 

正确答案约ax值:3070 我的回答:141C(由二进制相乘)

我非常感谢你的帮助。

谢谢您提前。

马丁

+1

'AH'得到余数,你忘了计算。第二种情况是乘以负数('-124 * -100'),所以你弄错了。另见[这个最近的问题](http://stackoverflow.com/questions/33134692/how-to-compute-the-result-of-8086-idiv-instruction)。 – Jester

回答

0

为了通过一个字节(字/字节),商数被写入AL,其余被写入AH分割的词。所以在你的例子中,AX=3716H

对于两个字节的乘法(字节*字节),结果是一个字(16位)。所以在你的例子中,结果是AX=3070

注意对于有符号数字,用于乘法(例如添加和移位)和除法的铅笔和纸张方法可能无法正常工作。例如,有符号乘法的正确方法是booth algorithm。我不得不说,铅笔和纸张的方法应该修改为有符号的数字,诀窍是扩大符号位。但是,这种方法很容易出错,这就是为什么专用算法是首选的。