我已经定义了这些全局变量,但我似乎无法在代码中更改它们的值。我需要其他C模块才能访问这些变量。
global base
global freep
SECTION .data
base: dd 0
freep: dd 0
以下代码会出现此错误:
:173:错误:操作码和操作数的无效组合
所以我的问题是如何将mov值转换为全局变量?
mov freep, esi
答案 0 :(得分:0)
2.2.2 NASM需要方括号用于内存参考
规则只是对内存位置内容的任何访问都需要围绕地址的方括号,以及对内存的任何访问权限。变量的地址不是。
因此,如果您想将esi
的值存储在freep
,您应该写一下:
mov [freep], esi
如果您想获得freep
的地址并将其放入esi
,您就会写完:
mov esi, freep
指令mov freep, esi
无效,因为此处freep
是立即数(freep
的地址),并且您不能将立即数作为目标操作数。< / p>