🔹 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