我正在尝试用汇编语言打印出一个字符。程序编译并运行时没有错误,但它不会打印任何内容到stdout
。
.section .text
.global _start
_start:
# push char
push $0x41 # letter "A"
# print char
mov $1, %rdx # arg 3: length
mov %rsp, %rcx # arg 2: src
mov $1, %rbx # arg 1: file handle (stdout)
mov $4, %rax # sys_write
int $0x80 # call kernal
# sys exit
mov $1, %rax
mov $0, %rbx
int $0x80
如果我将%rsp
替换为$letter
并包含以下内容:
.section .data
letter: .byte 0x41
然后代码按预期工作。但我想使用堆栈,因为我计划扩展此程序以从堆栈中打印可变长度(以null结尾)的字符串,而不是来自.data
的设置字符串。
我最终希望能够简单地回显用户对stdout
的输入,并且推送到堆栈似乎是最好的方式,但我还不能让这一点工作,所以我想知道这是什么我做错了。