有人可以向我解释leaq str(%rip), %rsi
的作用,为什么没有简单的mov操作将字符串的值移动到寄存器中?这是macOS x86-64的hello world脚本。
我知道这是通过字符串地址+ rip寄存器的地址来设置rsi寄存器。但是为什么要从rip寄存器的地址偏移呢?
.section __DATA,__data
str:
.ascii "Hello world!\n"
len = . - str
.section __TEXT,__text
.globl start
start:
movl $0x2000004, %eax
movl $1, %edi
leaq str(%rip), %rsi
movq $len, %rdx
syscall
movl $0x2000001, %eax
movl $0, %ebx
syscall