前情回顾
loop 循环在不同编译器产生的差别(否定之否定的过程)
// 条件跳转指令的低效率有关系;
//branch prediction 分支预测指令的逐渐牛逼有关系;
主要是这两个方面
swich case
1跳转表(有助记符)挺有意思;
2if else 的二叉树形式;
今日内容
x86-32框架下栈过程的机器级表示:
%esp 存储单钱栈顶地址;
pushl Src;
从Src取得操作数;
%esp=%esp-4;
写入栈顶地址(%esp);
popl Dset;
出栈:pop 出栈
读取栈顶数据(%esp)
%esp=%esp+4
写入Dest
利用栈支持过程调用与返回
call
和
ret
call 和ret等具体指令的详解可以看这个,讲的很详细:
https://blog.csdn.net/luoyhang003/article/details/46786591
可重入的定义:
如果一个过程,可以有多个互不干涉的实例运行,那这个就是可重入的。
过程实例的数据:参数,局部变量,返回地址;
需要一个区域来存储每个过程实例的数据;
每个过程实例在栈中维护一个栈帧;
当前栈帧的内容:
子过程参数
局部变量
被保存的寄存器值
父过程的栈帧起始地址(old %ebp)
福过程的栈帧中与当前过程先关的内容:
返回地址
由call指令存入
当前过程的输入参数
不过现在已经是64位的,这可咋办呢?
可以看到X86-64中没有栈的概念。
栈顶128字节的地址是可以使用,不用分配的。