面试题答案
一键面试C语言代码结构
// 声明汇编函数,采用cdecl调用约定(x86架构常见约定)
extern int add(int a, int b);
int main() {
int result = add(3, 5);
return result;
}
汇编函数声明约定(以MASM语法为例)
.386
.model flat, c
.code
add proc
push ebp
mov ebp, esp
mov eax, [ebp + 8] ; a的值在栈中偏移ebp + 8的位置
add eax, [ebp + 12] ; b的值在栈中偏移ebp + 12的位置
pop ebp
ret
add endp
end
在上述汇编代码中:
.386
声明使用80386指令集。.model flat, c
声明使用平坦内存模型以及C语言调用约定(cdecl),C语言调用约定下,调用者负责清理栈。add proc
和add endp
定义了名为add
的过程(函数)。push ebp
和mov ebp, esp
用于建立栈帧。- 通过栈偏移获取参数
a
和b
并相加,结果存于eax
中(x86架构中函数返回值通常存于eax
寄存器)。 pop ebp
和ret
用于恢复栈帧并返回。