🔹 C语言代码
// 8086 16位环境下的函数调用
int add(int a, int b) {
return a + b;
}
int main() {
int x = 10;
int y = 20;
int sum = add(x, y);
return 0;
}
🔹 通用寄存器
AX
0x0000
BX
0x0000
CX
0x0000
DX
0x0000
🔹 8086汇编代码
1000main:
100055push bp
100189 e5mov bp, sp
100383 ec 06sub sp, 6
1006c7 46 fe 0a 00mov word ptr [bp-2], 10
100bc7 46 fc 14 00mov word ptr [bp-4], 20
10108b 46 fcmov ax, [bp-4]
101350push ax
10148b 46 femov ax, [bp-2]
101750push ax
1018e8 1f 00call add
101b83 c4 04add sp, 4
101e89 46 famov [bp-6], ax
1021b8 00 00mov ax, 0
102489 ecmov sp, bp
10265dpop bp
1027c3ret
103aadd:
103a55push bp
103b89 e5mov bp, sp
103d8b 46 04mov ax, [bp+4]
104003 46 06add ax, [bp+6]
10435dpop bp
1044c3ret
🔹 堆栈状态
SP → 栈顶指针
堆栈为空
🔹 指针和段寄存器
SP
0xfffe
BP
0x0000
CS
0x1000
DS
0x2000
SS
0x3000
IP
0x1000