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