【发布时间】:2022-01-13 01:43:25
【问题描述】:
我有这样的代码:
mov eax, 0
mov [left], eax
mov eax, [len]
dec eax
mov [right], eax
我需要在left 中获得0,在right 中获得len - 1。但不知何故,left 得到 0 并且在 line 之后也得到 len - 1。我尝试为right 使用另一个寄存器,但结果相同。
mov eax, 0
mov [left], eax
mov ebx, [len]
dec ebx
mov [right], ebx
所以,它给出了相同的结果。
完整代码:
section .data
len dd 10
section .bss
left resd 0
right resd 0
section .text
global main
push rbp
mov rbp, rsp
mov eax, 0
mov [left], eax
mov eax, [len]
dec eax
mov [right], eax
在这一行我已经遇到了问题
【问题讨论】:
-
len, left, right是如何定义的?它们是双字(每个 32 位 / 4 字节)吗?这种令人困惑的行为通常是由于指令大小不匹配造成的。 -
@NateEldredge 是的,是 dd
-
好的,那么请minimal reproducible example。您发布的代码看起来不错,所以问题一定出在程序的其他地方。另请说明您如何检查结果(打印语句、调试器等),因为该过程可能存在问题。
-
@NateEldredge 在 gdb 中检查它
-
@NateEldredge 忘记了,修复