【发布时间】:2019-04-07 00:29:38
【问题描述】:
我的老师给我们分配了这张工作表,这真的给我带来了麻烦。我很难确切地知道我应该从什么乘或除索引指令,然后根据它确定溢出。
例如在字母 E 上我们有
imulw 12(%ebx, %edx, 8)
并且更改的寄存器是 dx:ax,因为操作数大小是 16 位。答案出来了
0004:CA63
但我无法理解 0004 的来源。
【问题讨论】:
-
两个 16 位值相乘得到 32 位乘积。女士。部分放在
dx和 l.s.参与ax。 -
我理解那部分。但是当我乘以 0xDBAD * 0x4F 我得到 43 CA63
-
内存位置
0x51C的值为0xFADEDBAD。此(小端)的至少 16 位乘以ax,即0x004F,乘积为0043CA63,保存在dx和ax中。 -
工作表将
dx的答案显示为0043:而不是0004:。 -
是的,我发现了第一个。我对字母 E 做了同样的步骤,我得到的答案是 43:CA63,而之前班上的某个人对他们的工作表进行了评分,而 E 的答案是 0004:CA63
标签: assembly x86 multiplication signed addressing-mode