提问者:小点点

更改 NASM 程序集中的全局变量


我已经定义了这些全局变量,但我似乎无法在代码中更改它们的值。我需要其他 C 模块才能访问这些变量。

global base 
global freep 

SECTION .data  
  base:   dd   0           
  freep:     dd    0 

下面的代码给出了此错误:

:173:错误:操作码和操作数的无效组合

所以我的问题是如何将一个mov值转换成全局变量?

  mov freep, esi

共1个答案

匿名用户

摘自NASM手册:

2.2.2 NASM 要求内存引用使用方括号
规则很简单,对内存位置内容的任何访问都需要在地址两边加上方括号,而对变量地址的任何访问都不需要。

因此,如果您想在< code>freep中存储< code>esi的值,您应该写:

mov [freep], esi

如果你想得到freep的地址并将其放在esi中,你会写:

mov esi, freep

指令 mov freep, esi 是无效的,因为这里的 freep 是即时的(freep 的地址),你不能将立即作为目标操作数。