gnu组件标签前的美元符号是什么意思?
例如,mov msg, %si
和之间有什么区别mov $msg, %si
(有关更多上下文,我正在研究x86裸机示例:https : //github.com/cirosantilli/x86-bare-metal-examples/blob/master/bios_hello_world.S)
#include "common.h"
BEGIN
mov $msg, %si
mov $0x0e, %ah
loop:
lodsb
or %al, %al
jz halt
int $0x10
jmp loop
halt:
hlt
msg:
.asciz "hello world"
Run Code Online (Sandbox Code Playgroud)
(美元($)和百分号(%)在汇编英特尔x86中代表什么?讨论了寄存器前的%和常量前的$的一般用法;但是,我不认为它几乎可以说明带有标签的$的使用如以下答案所示)
:解决一个常数,例如,当您使用$(美元)符号
movl $1, %eax
(放1
至%eax
注册)或处理一些变量的地址,例如,当:movl $var, %eax
(这意味着采取的地址 var
标签,放入%eax
寄存器)。如果您不使用美元符号,则意味着“ 从 var
标签中获取值并将其注册”。