本文主要是介绍CSAPP读书笔记——程序的机器级表示之寄存器分布与mov指令集,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
IA32整数寄存器的划分
IA32(Inter Architecture 32-bit)处理器中有 8 个
这就是 8 个
其中每个 32 位的寄存器都由 %e 开头,每个寄存器的低 16 位都可以作为单独的存储空间来存储 16 位的数据(例如 short ),前四个寄存器的后低 16位 又可以分为两个 8 位的寄存器,存储一个字节(byte,处理char类型)。
注意,最后两个寄存器有其特殊含义。
%ebp 表示帧指针(Frame pointer),也与系统栈的调用有关不能被随意访问。
前六个寄存器被称为通用寄存器,一般来讲在它们的使用上没有太多限制。
我们将处理 8 个位称为一个字节(byte),
只是延续传统的命名而已,因为刚开始的时候IA是16位架构的,将其扩展为 3 2位之后用
操作数指示符
编译器将程序解释为机器相关的汇编代码,从汇编代码我们可以看出程序对操作系统的各种资源的管理调度。
大多数汇编指令都有一个或者更多的操作算子(operands),用来指示该指令引用的源数据和它的目标位置。
源数据可以是一个常数或者是从寄存器、内存中取得的数。
目标位置可以是寄存器或者内存(通常用一个 32 位的地址来描述)
算子一般分为三类,我们依次介绍。
immediate : 立即数。立即数就是一个常量,在ATT-format的汇编代码中,用前导符号 $ 表示,例如 $−577 `或者 $0x1F 。只要可以被 32 bit表示即可。(汇编语言有时候可能会有 8 位(char)或
16 位(short)编码)。register : 寄存器。寄存器被作为汇编代码中的操作算子的时候,实际上指示的是该存储器中存储的值。 32 位寄存器(例如 %eax )存储 int 或者 pointer , 16 位寄存器(例如 %ax )存储 short , 8 位寄存器(例如
%al )存储 char 。我们用符号 Ea 表示寄存器 a ,用R[Ea] 表示 a 存储的内容。即将一组寄存器看数组R 的下标。memory : 存储器。我们通过有效地址来访问存储器(内存),用符号 Mbyte[Addr] 表示从 Addr 开始的 byte 个字节长度的引用。常见的表达式为 Imm(Eb,Ei,s) ,其中
这篇关于CSAPP读书笔记——程序的机器级表示之寄存器分布与mov指令集的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!