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?
[AX]
is an invalid memory operand specification.
[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.
When using
[bp+constant]
,[bp+si+constant]
or[bp+di+constant]
, it's good to remember that the default segment for all these addressing modes withbp
isss
(stack segment), notds
(data segment), as it is for all other addressing modes listed above.Note that 16-bit addressing modes can't use a SIB byte, only ModR/M, which is why they're limited to
(BP|BX) + (DI|SI) + disp0/8/16