Assembly 括号/无括号之间的差异nasm/yasm x86_64

Assembly 括号/无括号之间的差异nasm/yasm x86_64,assembly,nasm,x86-64,brackets,yasm,Assembly,Nasm,X86 64,Brackets,Yasm,我正在学习yasm和nasm上的x86_64汇编代码,我遇到了这些表达式,我不知道这里发生了什么,有人能给我解释一下吗?让我们以这些代码片段为例: section .data word db "Hello, Guys!", 0xa global _start section .text _start: mov rax, word ... ... ... 及 将单词变量移动到括号中的rax和不移动括号中的rax之间有什么区别?我已经知道第一个是将值从word复制到rax寄存器,带括号的是有效地址

我正在学习yasm和nasm上的x86_64汇编代码,我遇到了这些表达式,我不知道这里发生了什么,有人能给我解释一下吗?让我们以这些代码片段为例:

section .data
word db "Hello, Guys!", 0xa
global _start
section .text
_start:
mov rax, word
...
...
...

将单词变量移动到括号中的rax和不移动括号中的rax之间有什么区别?我已经知道第一个是将值从word复制到rax寄存器,带括号的是有效地址


但我无法理解那里到底发生了什么,如果有人能解释我这一点,我将不胜感激,谢谢!,我已经在这里读了一些关于堆栈溢出的解释,但没有一个回答我的问题

这行
mov-rax,word
将word的内容放入rax寄存器,知道开始字符串的word存储地址“你好,伙计们!”


无括号=地址,括号=内存中的值。很简单。这是一个非常误导的解释
mov-rax,word
不加载
word
的内容。此外,你从哪里得到的
word
的值是0xa?word在这个
word db“你好,伙计们!”,0xa之后的内容是什么?如果你像我一样把
word
看作一个字节的地址,那么它的内容就是字母“H”。如果您使用
mov-rax,[word]
阅读它,那么它的内容是0x47202c6f6c6c6548。请参阅关于这个问题的公认答案:mov-eax,[variable];将变量内容移动到eax中,并
mov-rax,[word]
put由word指向的地址内容,[word]类似于*指针,word类似于指针
section .data
word db "Hello, Guys!", 0xa
global _start
_start:
mov rax, [word]
...
...
...
`mov rax, [word]`  put content of address pointed by word