【问题标题】:assembly imul and idiv组装 imul 和 idiv
【发布时间】:2015-10-14 20:28:01
【问题描述】:

能否请您告知应遵循什么程序来解决以下问题:

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(乘以二进制)

非常感谢您的帮助。

提前谢谢你。

马丁

【问题讨论】:

  • AH 得到余数,你忘了计算。第二种情况是负数相乘(-124 * -100),所以你弄错了。另请参阅this recent question

标签: assembly division signed


【解决方案1】:

要将一个字除以一个字节(字/字节),商写入 AL,余数写入 AH。所以在你的例子中,AX=3716H

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

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

【讨论】:

    猜你喜欢
    • 2015-04-19
    • 1970-01-01
    • 2012-02-22
    • 1970-01-01
    • 2012-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多