在系统调用之前保存寄存器值

时间:2014-02-17 08:30:53

标签: unix assembly nasm cpu-registers

在我的x86 ASM教科书中,有一个example的宏,它在标准输出流中写入一个字符串:

%macro  PRINT 1
    pusha
    pushf
    jmp %%astr
%%str   db  %1, 0
%%strln equ $-%%str
%%astr: _syscall_write 1, %%str, %%strln
    popf
    popa
%endmacro

我无法理解的是为什么我们将所有通用寄存器值推送到堆栈或从堆栈中弹出? _syscall_write不会修改任何寄存器,只会保存系统调用结果的EAX。那么为什么我们不只是推送EAX?会不会更有效率?

0 个答案:

没有答案