《深入理解计算机系统》读书笔记-04

《深入理解计算机系统》读书笔记-04

x86 的历史渊源

Intel 处理器系列之所以被称为“x86”,是因为从 1978 年第一代单芯片开始,直到 1989 年的 i486,Intel 的芯片命名都以后缀“86”结尾。因此沿袭了惯例,将 Intel 的芯片均称为 x86 系列。

汇编初步

生成汇编代码的办法

使用gcc(GNU Compile Collection,GNU 编译器套件)工具可以容易地得到 C 代码对应的汇编代码。具体命令为:

gcc -Og -S [C 文件名称]

运行上述命令,即可生成与源文件同名的汇编文件,并且不进行其他更进一步的操作;使用cat [汇编文件名称]命令可以查看文件内容。

注意在上述命令中,-Og是大写的字母O,注意不要写成了数字0,表示的是“optimize”,即“优化”。这个参数限制了编译器的优化行为,避免了编译器对源代码过分优化,导致得到的汇编代码结构与 C 代码差异过大,增大学习难度。

参数-S指定编译器将源文件编译为汇编代码。注意字母S大写。

此外,目标代码拥有可执行代码的全部指令,二者区别在于:目标代码没有填入全局值的地址。

反汇编

反汇编,即根据机器代码复原相应的汇编代码的操作。

使用命令:

objdump -d [要反汇编的机器代码源文件]

即可根据机器代码得到相应的汇编代码。其中objdump为“object dump”的简写。

在 C 语言中插入汇编代码的两种方法

  1. 用汇编代码编写整个函数,在连链接段再把它们和 C 函数组合起来。比如malloc()就是这样的汇编函数。
  2. 使用 GCC 的内联汇编(inline assembly)特性,用 asm 伪指令在 C 程序中包含简短的汇编代码。

实际的内存使用限制

在目前的实现中,内存地址高 16 位必须设置为 0,所以真正能够使用的地址在 2^48 字节或者说 64 TB范围内。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值