汇编第五集

前情回顾

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的调用实例call 和ret等具体指令的详解可以看这个,讲的很详细:
https://blog.csdn.net/luoyhang003/article/details/46786591

可重入的定义:
如果一个过程,可以有多个互不干涉的实例运行,那这个就是可重入的。

过程实例的数据:参数,局部变量,返回地址;
需要一个区域来存储每个过程实例的数据;
栈的工作描述
每个过程实例在栈中维护一个栈帧;
栈帧构成
当前栈帧的内容:
子过程参数
局部变量
被保存的寄存器值
父过程的栈帧起始地址(old %ebp)

福过程的栈帧中与当前过程先关的内容:
返回地址
由call指令存入
当前过程的输入参数

调用者和被调者谁返回
不过现在已经是64位的,这可咋办呢?
递归调用 头+尾+Body三段
在这里插入图片描述
这个是X86-64位寄存器的使用接口
X86-64的寄存器使用
可以看到X86-64中没有栈的概念。
栈顶128字节的地址是可以使用,不用分配的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值