Linux程序集困境

KJP*_*KJP 0 linux x86 assembly

是否真的没有办法在不使用所有四个通用寄存器的情况下将汇编中的ascii字符串打印到标准输出?

Dig*_*oss 6

是的,它需要三个参数寄存器加一个系统电话号码...

但是,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!
Run Code Online (Sandbox Code Playgroud)