Open hankviv opened 4 years ago
int add_a_and_b(int a, int b) { return a + b; } int main() { return add_a_and_b(2, 3); } _add_a_and_b: #创建新的帧 push %ebx #先把ebx的值写到帧内 mov %eax, [%esp+8] # 取 ESP+8 放在eax mov %ebx, [%esp+12] # 取ESP+12 放在ebx add %eax, %ebx #ebx的值加入到eax pop %ebx #pop出Stack内的的值给ebx ret #终止当前函数,运行交还给上层函数,帧被回收。 _main: #Stack 上为main建立一个帧,并将Stack地址,写入ESP。 push 3 # ESP = ESP - 4 这个地址存4位 push 2 # ESP = ESP - 4 这个地址存4位 call _add_a_and_b # 寻找_add_a_and_b标签,并为该函数建立一个新的帧 add %esp, 8 ,#将 ESP 寄存器里面的地址,手动加上8个字节,再写回 ESP 寄存器。回收内存地址 ret #终止当前函数