我目前刚接触并学习汇编语言(主要是使用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中测试并运行)
答案 0 :(得分:2)
系统调用将结果返回rax
。因此,在系统调用之前rax
中的任何内容都不会在之后出现。由于技术原因,rcx
和r11
寄存器也会被系统调用破坏。所有其他寄存器的内容都由内核保留。