汇编 - 应该是什么输出

时间:2015-12-09 20:03:22

标签: assembly mov

在集会方面,我是一个绝对的主人。我试着找出以下内容的输出:

Jan dd 255,256
Feb dw 16, 17, 18, 19
Mar db 8, 9, 10, 11

Sub edi, Mar - Feb
mov ebx, Jan[edi]
add bl, Mar

因此,Sub edi, Mar - Feb会从MarFeb数组中减去-8处的edi值的第一个元素...但是会移动什么到Jan[edi] ??什么将被添加到Mar

你能解释一下这个练习的答案吗?请原谅我缺乏基本的装配知识。

1 个答案:

答案 0 :(得分:5)

  

Sub edi, Mar - Feb将从MarFeb数组中减去第一个元素

它不能那样做。汇编程序不允许在汇编时计算它(内存中的东西是可变的,因此结果会变化),并且没有指令可以"双减去"。它实际上做的是

  1. 作为汇编时间,计算地址 Mar之间的差异(这是一个地址,它不是一堆数字,只是它们开始的地方)和地址{ {1}}。中间有4个单词,总共大小为8,因此汇编程序将发出Feb的机器代码。
  2. 在运行时,将从sub edi, 8中减去8。
  3. edi中有哪些内容?谁知道呢。但现在它减少了8个。 edi偶然意味着mov ebx, Jan[edi],所以希望mov ebx, [edi + Jan]是明智的,0或4会最有意义。