我有这一段:
.global main
.data
helloworld: .ascii "Hello world\n"
helloworldend:
goodluck: .asciz "Good Luck!\n"
goodluckend:
.text
main:
# printf(helloworld)
movq $1, %rax
movq $1, %rdi
movq $helloworld, %rsi
movq $helloworldend-helloworld, %rdx
syscall
# printf(goodluck)
movq $1, %rax
movq $1, %rdi
movq $goodluck, %rsi
movq $goodluckend-goodluck, %rdx
syscall
xorq %rax, %rax
ret
我必须在不改变数据节的情况下,使它也打印“Hello Luck”。我所做的是在main中添加一个新的数据节:
...
main:
.section .data
msg: .ascii "Hello Luck\n"
msgend:
.section .text
start:
movq $1, %rax
movq $1, %rdi
movq $msg, %rsi
movq $msgend-msg, %rdx
syscall
...
显然,这是可行的,但我不确定这是不是这个想法..有没有一种不同的方式打印它,而不添加新的数据节,也不改变现有的一个?
1条答案
按热度按时间v9tzhpje1#
内核syscall
sys_write
需要RDX
=字节数和RSI
=指向字符串的指针,字符串不必以空值终止,因此只需更改这两个寄存器: