第三章《程序的机器级表示》(一)

机器级编程的重要抽象

对于机器级编程来说,两种抽象尤为重要:

  • ISA,全称为指令集体系结构指令集架构,它定义了处理器状态、指令的格式以及每条指令对状态的影响,用于屏蔽了硬件处理指令的复杂行为,将程序的每条行为描述为顺序执行
  • 内存虚拟化,它将多个硬件存储器和操作系统软件结合起来,将对外提供的内存模型抽象为一个很大的字节数组

重要的处理器状态

  • 程序计数器:给出将要执行的下一条指令在内存中的地址
  • 整数寄存器文件,包含16个命名的位置,分别存储64位的值,这些寄存器可以存储地址或整数数据
  • 条件寄存器,保存着最近执行的算术或逻辑指令的状态信息
  • 一组向量寄存器,可以存放一个或多个整数或浮点数的值

机器级代码的特点

我们可以通过C语言在内存中声明和分配各种数据类型的对象,但是机器代码只是很简单的将内存看做是一个很大的、按照字节寻址的数组。汇编代码不区分有符号或无符号整数,不区分各种类型的指针,甚至不区分指针和整数

程序内存

程序的内存包括:

  • 程序的可执行机器代码
  • 操作系统需要的一些信息
  • 用来管理过程调用和返回的运行时栈
  • 用户分配的内存块

数据格式

Intel用术语表示16位的数据类型,因此也将32位数称为双字,64位数称为四字

对于x86-64系统而言,C语言的各种数据类型的信息如下:

C声明 Intel数据类型 汇编代码后缀 字节大小
char 字节 b 1
short w 2
int 双字 l 4
long 四字 q 8
char* 四字 q 8
float 单精度 s 4
double 双精度 1 8

注意:大多数GCC生成的汇编代码指令都有一个字符的后缀,表明操作数的大小,例如:

  • movb: 传送字节
  • mobw: 传送字
  • movl: 传送双字
  • movq: 传送四字
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容