在集会方面,我是一个绝对的主人。我试着找出以下内容的输出:
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
会从Mar
和Feb
数组中减去-8
处的edi
值的第一个元素...但是会移动什么到Jan[edi]
??什么将被添加到Mar
?
你能解释一下这个练习的答案吗?请原谅我缺乏基本的装配知识。
答案 0 :(得分:5)
Sub edi, Mar - Feb
将从Mar
和Feb
数组中减去第一个元素
它不能那样做。汇编程序不允许在汇编时计算它(内存中的东西是可变的,因此结果会变化),并且没有指令可以"双减去"。它实际上做的是
Mar
之间的差异(这是一个地址,它不是一堆数字,只是它们开始的地方)和地址{ {1}}。中间有4个单词,总共大小为8,因此汇编程序将发出Feb
的机器代码。sub edi, 8
中减去8。 edi
中有哪些内容?谁知道呢。但现在它减少了8个。 edi
偶然意味着mov ebx, Jan[edi]
,所以希望mov ebx, [edi + Jan]
是明智的,0或4会最有意义。