changing global variables in NASM assembly

2019-09-02 18:25发布

问题:

I've defined these global variables but I cant seem to change their value in the code. I need other C modules to have access to these variables.

global base 
global freep 

SECTION .data  
  base:   dd   0           
  freep:     dd    0 

The code below gives this error:

:173: error: invalid combination of opcode and operands

So my question is how to a mov values into global variables?

  mov freep, esi

回答1:

From the NASM manual:

2.2.2 NASM Requires Square Brackets For Memory References
The rule is simply that any access to the contents of a memory location requires square brackets around the address, and any access to the address of a variable doesn't.

So if you want to store the value of esi at freep you should write:

mov [freep], esi

And if you wanted to get freep's address and put it in esi you would've written:

mov esi, freep

The instruction mov freep, esi is invalid, because freep here is an immediate (the address of freep), and you can't have an immediate as a destination operand.



标签: assembly nasm