我对在nasm x86汇编语言中寻址模式感到困惑
在阅读nasm手册后,我发现 [] 用于获取方括号内指定的内存位置的值。
我的理解:
var db 10
mov eax , var ; address of var is copied into eax register
mov eax , [var] ; value of var 10 is copied into eax register
这里我感到很困惑:
here the screenshot of the below code from a book i read
MY_TABLE TIMES 10 DW 0 ; Allocates 10 words (2 bytes) each initialized to 0
MOV EBX, [MY_TABLE] ; Effective Address of MY_TABLE in EBX
MOV [EBX], 110 ; MY_TABLE[0] = 110
ADD EBX, 2 ; EBX = EBX +2
MOV [EBX], 123 ; MY_TABLE[1] = 123
(此代码取自assembly_tutorial tutorialspoint.com)
在第二行 MOV EBX,[MY_TABLE] ,根据我的理解,MY_TABLE指向一个初始化为零的地址。所以它应该将值0移动到ebx寄存器。但是他们在评论中提到了有效的地址
MY_TABLE被复制到EBX寄存器中。我怀疑的是,为什么要复制地址而不是零值。
在第三行 MOV [EBX],110 ,根据他们的评论,ebx的有效地址为MY_TABLE。所以根据我的理解[EBX]应该得到地址的值,所以它变成 mov value_at_effective_address,110 。那么将一个常数复制到一个值中有什么意义呢?
MOV EBX, [MY_TABLE] ;a value copied into ebx or a address copied into ebx?
MOV [EBX], 110 ; moving 110 to a memory loation or to a value at a memory address.
MOV [EBX], 123 ; moving 123 to a memory location or to a value at a momory address.