这是一般性问题(例如在Linux和x86上):
如果不调用系统调用,常规C程序不会(隐式)使用任何通用寄存器吗?
答案 0 :(得分:1)
这个程序:
#include <stdio.h>
int main(int argc, char **argv) {
printf("%d", argc);
}
生成此程序集:
.section __TEXT,__text,regular,pure_instructions
.macosx_version_min 10, 10
.globl _main
.align 4, 0x90
_main: ## @main
.cfi_startproc
## BB#0:
pushq %rbp
Ltmp0:
.cfi_def_cfa_offset 16
Ltmp1:
.cfi_offset %rbp, -16
movq %rsp, %rbp
Ltmp2:
.cfi_def_cfa_register %rbp
movl %edi, %ecx
leaq L_.str(%rip), %rdi
xorl %eax, %eax
movl %ecx, %esi
callq _printf
xorl %eax, %eax
popq %rbp
retq
.cfi_endproc
.section __TEXT,__cstring,cstring_literals
L_.str: ## @.str
.asciz "%d"
.subsections_via_symbols
明确使用通用寄存器eax
,ecx
和esi
。另外,请注意,此代码中没有系统调用,只是对libc _printf
的函数调用。