深入理解计算机系统——程序编码

本文探讨了机器级编程中的指令集架构、虚拟地址概念,强调机器代码本质,指出X86-64指令长度差异,以及反汇编器和GCC在处理汇编代码中的角色,介绍了在C程序中嵌入汇编代码的两种方法。
摘要由CSDN通过智能技术生成

机器级编程中存在两种十分重要的抽象

1.由指令集体系结构或指令集架构来定义机器级程序的格式和行为

2.机器级程序使用的内存地址是虚拟地址

内存在机器代码层面的本质是什么?

一个很大的,按字节寻址的数组

在机器执行的程序只是一个字节序列,是一系列指令的编码,而对这些指令的源代码一无所知

关于机器代码和反汇编需要注意的事项有哪些?

X86-64的指令长度从1—15字节不等

        1.常用的指令以及操作数较少的指令所需的字节数少

        2.而那些不太常用或操作数较多的指令所需的字节数较多

设计指令格式的方式是,从某个给定位置开始,将字节唯一解码成机器指令

反汇编器使用的指令命名规则与GCC生成的汇编代码使用的有些细微差别

        反汇编器给call和ret指令添加了‘q’后缀,省略这些后缀也没问题

在编译器生成汇编代码之后,所有以“.”开头的行都是知道汇编器和连接器工作的伪指令

在C程序中插入汇编代码有两种方法:

        1.编写完整函数,放进一个独立的汇编代码文件中,让汇编器和编译器把他和用C语言写的代码合并起来

        2.用GCC的内联汇编,用asm伪指令可以在C程序中包含简短的汇编代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

tntlbb

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值