rax / rdi不会转移到下一个系统调用?

时间:2018-06-15 12:31:21

标签: assembly nasm x86-64

我目前刚接触并学习汇编语言(主要是使用NASM)

在我关注的其中一个教程中,讲师做了

;Input codes, entry points, etc.

_showAge:
    mov rax, 1
    mov rdi, 1
    mov rsi, ageTxt
    mov rdx, 13
    syscall ;"Your age is: "

    mov rax, 1
    mov rdi, 1
    mov rsi, age
    mov rdx, 3
    syscall
    ret

它按预期工作。但是当我试图自己缩短代码时......

_showAge:
    mov rax, 1
    mov rdi, 1
    mov rsi, ageTxt
    mov rdx, 13
    syscall ;"Your age is: "

    mov rsi, age
    mov rdx, 3
    syscall ; Doesn't do anything
    ret

这不再做任何事了,
我的问题是为什么我们不能执行上面显示的以下代码的原因是什么?

(此脚本已在Linux x86_64,Ubuntu中测试并运行)

1 个答案:

答案 0 :(得分:2)

系统调用将结果返回rax。因此,在系统调用之前rax中的任何内容都不会在之后出现。由于技术原因,rcxr11寄存器也会被系统调用破坏。所有其他寄存器的内容都由内核保留。