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

时间:2015-10-26 09:03:05

标签: assembly nasm

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

global base 
global freep 

SECTION .data  
  base:   dd   0           
  freep:     dd    0 

以下代码会出现此错误:

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

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

  mov freep, esi

1 个答案:

答案 0 :(得分:0)

来自the NASM manual

  

2.2.2 NASM需要方括号用于内存参考
规则只是对内存位置内容的任何访问都需要围绕地址的方括号,以及对内存的任何访问权限。变量的地址不是。

因此,如果您想将esi的值存储在freep,您应该写一下:

mov [freep], esi

如果您想获得freep的地址并将其放入esi,您就会写完:

mov esi, freep

指令mov freep, esi无效,因为此处freep是立即数(freep的地址),并且您不能将立即数作为目标操作数。< / p>