Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

NASM x86 16-bit addressing modes [duplicate]

I am having trouble with pointing to a address and write in my case a variable of byte in size. This gives me the error "error: invalid effective address":

mov byte[AX], byte 0x0

After some trail and error i tested the same but with EAX. This compiles just fine:

mov byte[EAX], byte 0x0

What am I missing here?

like image 869
Michael Avatar asked Sep 18 '12 09:09

Michael


1 Answers

[AX] is an invalid memory operand specification.

The valid 16-bit ones are:

[constant]  
[BX]  
[SI]  
[DI]  
[BX+constant]  
[BP+constant]  
[SI+constant]  
[DI+constant]  
[BX+SI]  
[BX+DI]  
[BP+SI]  
[BP+DI]  
[BX+SI+constant]  
[BX+DI+constant]  
[BP+SI+constant]  
[BP+DI+constant]  

[BP] is formally invalid, but many assemblers will quietly convert it into [BP+0].

See the CPU manual for memory operand encodings and the ModR/M and SIB bytes.

like image 185
Alexey Frunze Avatar answered Oct 18 '22 23:10

Alexey Frunze