如果不使用所有四个通用寄存器,是否真的无法将汇编中的ascii字符串打印到标准输出?
最佳答案
对,参数需要三个寄存器加上一个系统调用号…
但是,x86有pusha
和popa
,这将在一条指令中推送和弹出所有寄存器。
$ cat hwa.S
write = 0x04
exit = 0xfc
.text
_start:
pusha
movl $1, %ebx
lea str, %ecx
movl $len, %edx
movl $write, %eax
int $0x80
popa
xorl %ebx, %ebx
movl $exit, %eax
int $0x80
.data
str: .ascii "Hello, world!\n"
len = . -str
.globl _start
$ as -o hwa.o hwa.S
$ ld hwa.o
$ ./a.out
Hello, world!
关于linux - Linux组装问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1641343/