为什么我运行以下程序集时没有得到输出

问题描述 投票:0回答:1

我需要使用 x86 64 位 intel

section .text
global _start

_start:
mov rax, 1
mov rdi, 1
mov rsi, "hello"
mov rdx, 5
syscall

mov rax, 60
xor rdi, rdi
syscall

我希望在终端中打印出 hello 。感谢您的帮助

c assembly x86 x86-64
1个回答
0
投票

该说明

mov rsi, "hello"
对于您想要执行的操作无效。

相反,您应该定义一些内存来保存要打印的内容,然后使用它的地址加载

rsi
,例如:

section .text
global _start

_hello:         db "hello", 10
_hello_sz:      equ $ - _hello

_start:         mov rax, 1
                mov rdi, 1
                mov rsi, _hello
                mov rdx, _hello_sz
                syscall

                mov rax, 60
                xor rdi, rdi
                syscall

编译并运行此结果如下:

pax@hades> nasm -f elf64 -o progs.o progs.s
pax@hades> ld -o progs progs.o
pax@hades> ./progs
hello
© www.soinside.com 2019 - 2024. All rights reserved.