我已经定义了这些全局变量,但我似乎无法在代码中更改它们的值。我需要其他 C 模块才能访问这些变量。
global base
global freep
SECTION .data
base: dd 0
freep: dd 0
下面的代码给出了此错误:
:173:错误:操作码和操作数的无效组合
所以我的问题是如何将一个mov值转换成全局变量?
mov freep, esi
摘自NASM手册:
2.2.2 NASM 要求内存引用使用方括号
规则很简单,对内存位置内容的任何访问都需要在地址两边加上方括号,而对变量地址的任何访问都不需要。
因此,如果您想在< code>freep中存储< code>esi的值,您应该写:
mov [freep], esi
如果你想得到freep
的地址并将其放在esi
中,你会写:
mov esi, freep
指令 mov
freep, esi 是无效的,因为这里的 freep 是即时的(freep
的地址),你不能将立即作为目标操作数。