Да, для параметров требуется три регистра, плюс один для номера системного вызова ...
Но, 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!