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

本文深入探讨了X86-64架构下程序的机器级表示,包括程序编码过程、数据格式、访问信息如寄存器、操作数和指令的使用,以及算术和逻辑操作。重点讲解了数据传送指令、算术逻辑单元的操作,如移位、特殊算术操作,并介绍了控制流程相关的概念。
摘要由CSDN通过智能技术生成

目录

程序的机器级表示:

程序编码:

数据格式:

访问信息

寄存器:

操作数:

数据传送指令:

数据传送示例

导入和弹出栈数据:

算术和逻辑操作:

加载有效地址(leaq):

一元和二元操作:

移位操作:

特殊的算术操作:

控制:


程序的机器级表示:

程序编码:

C语言 ---【预处理器---> 扩展后的C ---【编译器】---> 汇编语言 ---【汇编器】---> 二进制目标文件  ---【链接器】---> 可执行文件

 

对于机器级编程的两种抽象:

  1. 指令集架构将程序的行为抽象成每条指令按顺序执行
  2. 内存模型抽象成非常大的字节数组

 

机器代码可见的处理器状态:

程序计数器、整数寄存器、条件码寄存器、向量寄存器

 

数据格式:

字表示16位,32位双字,64位四子,不同数据类型大小不同,汇编后缀也不同

64位机器里面一个指针8个字节

访问信息

寄存器

一个X86-64的cpu包含一组16个存储64位值的通用目的寄存器:

  1. 部分指令会在寄存器中生成小于8个字节的指令,生成1个字节、2个字节的指令会保持剩下的字节不变,生成4字节数字的指令会把高位4个字节置为0。

 

操作数:

一个指令有>=1个操作数.

三种类型:立即数、寄存器、内存引用

 

  1. 寄存器用类似数组的R[r]来表示,寄存器名就是索引,R[r]表示寄存器存储的值
  2. %rax是表示寄存器里存的值0x100,(%rax)表示内存里0x100位置处的值。
  3. 64位机器里不能用32位寄存器来寻址:(%ebx)非法

数据传送指令:

MOV  S,D

前面是源操作数:立即数,寄存器里的值,内存里的值

源操作数表示的是如果源操作数为%rax,表示寄存器里的值,如果源操作数为(%rax),表示间接寻址内存里的值

 

后面是目标操作数:寄存器、内存地址

后面是存储数据的位置,如果目标操作数为%rax,表示放到寄存器里,如果源操作数为(%rax),表示放到间接寻址后的内存地址里。

 

  1. Movb, movw, movl, movq表示对于操
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值