装配imul和idiv

时间:2015-10-14 20:28:02

标签: assembly division signed

请您告知下面要解决的程序:

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

ax =?

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

另外,从下面的代码收到的ax值呢?

mov ax, 0084
mov bx, 009C
imul bl

正确答案:3070 我的回答:141C(乘以二进制)

我非常感谢你的帮助。

提前谢谢你。

马丁

1 个答案:

答案 0 :(得分:0)

要将字除以字节(字/字节),商用AL写入,余数用AH写入。因此,在您的示例中,AX=3716H

对于两个字节(字节*字节)的乘法,结果是一个字(16位)。因此,在您的示例中,结果为AX=3070

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