如果不使用所有四个通用寄存器,是否真的无法将汇编中的ascii字符串打印到标准输出?

最佳答案

对,参数需要三个寄存器加上一个系统调用号…
但是,x86有pushapopa,这将在一条指令中推送和弹出所有寄存器。

$ 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/

10-11 18:31