程序的机器级表示

程序的机器级表示,第1张

一.生成汇编:

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

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/921157.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-16
下一篇2022-05-16

发表评论

登录后才能评论

评论列表(0条)

    保存