组装 - 输出应该是什么
Assembly - what should be the output
说到组装,我绝对是初学者。我试图弄清楚以下输出应该是什么:
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
数组中减去第一个元素,在 edi
处给出 -8
的值...但是接下来会发生什么移动到 Jan[edi]
?? Mar
将添加什么?
你能给我一个练习的答案并附上解释吗?请原谅我缺乏基本的装配知识。
Sub edi, Mar - Feb
will subtract first elements from Mar
and Feb
arrays
它不能那样做。 assembler 不允许在 assemble 时计算它(内存中的东西是可变的,所以结果,嗯,变化),并且没有指令可以 "double-subtract"。它实际做的是
- 作为assemble时间,计算地址
Mar
(这是一个地址,不是一堆数字,只是他们开始的地方)和地址 Feb
。中间有 4 个字,总共大小为 8,因此 assembler 将发出 sub edi, 8
. 的机器码
- 在运行时,
edi
减去8。
不过 edi
里有什么?谁知道呢。但是现在少了8个。 mov ebx, Jan[edi]
顺便说一下 mov ebx, [edi + Jan]
,所以希望 edi
是明智的,0 或 4 最有意义。
说到组装,我绝对是初学者。我试图弄清楚以下输出应该是什么:
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
数组中减去第一个元素,在 edi
处给出 -8
的值...但是接下来会发生什么移动到 Jan[edi]
?? Mar
将添加什么?
你能给我一个练习的答案并附上解释吗?请原谅我缺乏基本的装配知识。
Sub edi, Mar - Feb
will subtract first elements fromMar
andFeb
arrays
它不能那样做。 assembler 不允许在 assemble 时计算它(内存中的东西是可变的,所以结果,嗯,变化),并且没有指令可以 "double-subtract"。它实际做的是
- 作为assemble时间,计算地址
Mar
(这是一个地址,不是一堆数字,只是他们开始的地方)和地址Feb
。中间有 4 个字,总共大小为 8,因此 assembler 将发出sub edi, 8
. 的机器码
- 在运行时,
edi
减去8。
不过 edi
里有什么?谁知道呢。但是现在少了8个。 mov ebx, Jan[edi]
顺便说一下 mov ebx, [edi + Jan]
,所以希望 edi
是明智的,0 或 4 最有意义。