栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

程序的机器级表示

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

程序的机器级表示

一.生成汇编:

1)对于c gcc -S mstore.c

2)对于cpp: g++ -S mstore.cpp

pushq: 将寄存器rbx的值压入程序栈进行保存

movq:寄存器rbx的值与rdx的值一致,都是dest指针所指向的内存地址

popq:在函数返回前,恢复rbx的内容

ret:函数返回

 intel64位处理器包含16个通用目的的寄存器,这些寄存器用来存放整数数据和指针.如图下

调用者保存寄存器和被调用者保存寄存器,例如函数A调用函数B,B中rbx寄存器被修改,此时有两个策略;

1)调用者保存策略

函数A在调用函数B之前提前保存rbx的值,执行完以后在恢复rbx的内容.

2)被调用者保存策略

函数B使用rbx之前,先保存rbx的值,使用完以后在恢复.

二.生成机器码

1)对于c

gcc -c store.c

2)对于cpp

g++ -c store.cpp 

反汇编查看

objdump -d store.o

三.不同寄存器用法

寄存器就是CPU内的一种数据存储部件,只不过容量比较小

大多数指令包含两部分,操作码和操作数(一个或多个)

 

 内存引用:

四.栈与数据传输指令

不同数据类型,用同一寄存器的不同数位操作. 

由此可见,C语言的指针其实就是内存地址. 

pushq和popq指令需要借助程序栈 ,程序栈本质是一个内存区域

栈的增长方向是高地址到低地址,所以栈顶元素是所有元素中地址最低的.

pushq指令等效于subq和movq,本质是将数据写入到内存中,pop的本质是将从内存中读取数据并修改栈顶指针.

 

 

 

【CSAPP-深入理解计算机系统】3-2.寄存器与数据传送指令_哔哩哔哩_bilibili

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/886573.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号