CSAPP:第三章程序的机器级表示1

CSAPP:程序的机器级表示1

关键点:数据格式、操作数指示符。

数据格式访问信息操作数指示符举例说明

数据格式

  术语字(word)表示16位数据类型,32位数为双字(double words),64位数为四字(quad words)。图3-1给出了c语言的数据类型在x86-64中的大小。在64位机器中标准int为双字,指针为8字。
  不通数据类型产生的汇编代码后缀如图所示。movb(传送字节)、movw(传送字)、movl(传送双字)、movq(传送四字)

访问信息

  一个x86-64的中央处理单元(CPU)包含一组16个存储64位值的通用目的寄存器,这些寄存器用来存储整数数据和指针,图3-2显示了这16个寄存器。

  • 8位:%al、%bl… (movb)
  • 16位:%ax、%bx…(movw)
  • 32位:%eax、%ebx…(movl)
  • 64位:%rax、rbx…(movq)

操作数指示符

  大多数指令有一个或者多个操作数,指出执行一个操作中要使用的源数据值,以及放置结果的目的位置。各种不通的操作数可以被分为三种类型:

  • 立即数:用来表示常数值。书写方式为($0x123)。
  • 寄存器:表示某个寄存器的内容,16个寄存器的低位1字节、2字节、4字节或者8字节中的一个作为操作数这些字节分别对应于8位、16位、32位和64位。在图3-3中用表示任意寄存器a,用引用来表示它的值。
  • 内存引用:根据计算出来的地址(通常称为有效地址)访问某个内存值。我们用符号表示存储在内存中从地址Addr开始的b个字节引用。
      如图3-3所示,有不通的寻址方式,允许不通形式的内存引用。表示最常用的形式。这样的引用包括四个部分,一个立即数偏移、一个基址寄存器,一个变址寄存器和一个比例因子,这里的必须是1、2、4或者8。基址和变址寄存器必须是64位寄存器。有效地址计算为:

举例说明

操作数 类型格式 操作数值 寻址方式
%rax 寄存器:Ra R[Ra]:0x100 寄存器寻址
0x104 存储器:Imm M[Imm]:0xAB 绝对寻址
$108 立即数:$Imm Imm:108 立即数寻址
(%rax) 存储器:(Ra) M[R[Ra]]:0xff 间接寻址
4(%rax) 存储器:Imm(Rb) M[Imm+R[Rb]]:0xAB 基址+变址寻址
9(%rax,%rdx) 存储器:Imm(Rb,Ri) M[Imm+R[Rb]+R[Ri]]:0x11 变址寻址
0xFC(,%rcx,4) 存储器:Imm(,Ri,s) M[Imm+R[Ri]*s]:0xff 比例变址寻址
(%rax,%rdx,4) 存储器:(Rb,Ri,s) M[R[Rb]+R[Ri]*s]:0x11 比例变址寻址

猜你喜欢

转载自www.cnblogs.com/ywx123/p/9903775.html
今日推荐