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 | 比例变址寻址 |
CSAPP:第三章程序的机器级表示1的更多相关文章
- CSAPP:第三章程序的机器级表示2
CSAPP:程序的机器级表示2 关键点:算术.逻辑操作 算术逻辑操作1.加载有效地址2.一元二元操作3.移位操作 算术逻辑操作 如图列出了x86-64的一些整数和逻辑操作,大多数操作分成了指令类( ...
- CSAPP:第三章程序的机器级表示3
程序的机器级表示3 关键点:过程.调试.指针 过程1.运行时栈2.转移控制3.数据传递4.栈上的局部存储5.寄存器中的局部存储空间理解指针使用GDB调试器 过程 1.运行时栈 x86-64的栈向低 ...
- 【CSAPP】三、程序的机器级表示
本章基于两种相关的机器语言:Intel IA32和x86-64,前者注重32位,后者注重64位. 本章脉络:c\汇编\机器码之间的关系,数据的表示,控制结构如何实现.运行栈,局部变量的存储,数据结构. ...
- 深入理解计算机系统 第三章 程序的机器级表示 Part2 第二遍
第一遍对应笔记链接 https://www.cnblogs.com/stone94/p/9943779.html 本章汇编代码中常出现的几个指令及其含义 1.push 操作数的个数:1 将操作数(一般 ...
- 深入理解计算机系统 第三章 程序的机器级表示 part1
如题所示,这一章讲解了程序在机器中是怎样表示的,主要讲汇编语言与机器语言. 学习什么,为什么学,以及学了之后有什么用 我们不用学习如何创建机器级的代码,但是我们要能够阅读和理解机器级的代码. 虽然现代 ...
- 深入理解计算机系统 第三章 程序的机器级表示 Part1 第二遍
第一遍对应笔记链接 https://www.cnblogs.com/stone94/p/9905345.html 机器级代码 计算机系统使用了多种不同形式的抽象,利用更简单的抽象模型来隐藏实现的细节. ...
- 【CSAPP】第三章 程序的机器级表示
目录 1. 数据的编码与存储 2. 汇编指令 2.1 数据传送指令 访存方式 数据传送指令 入栈出栈 2.2 算术/逻辑指令 2.3 过程控制指令 控制码 比较指令 跳转指令 条件设置指令 3. 程序 ...
- 深入理解计算机系统 第三章 程序的机器级表示 part2
这周由于时间和精力有限,只读一小节:3.4.4 压入和弹出栈数据 栈是一种特殊的数据结构,遵循“后进先出”的原则,可以用数组实现,总是从数组的一端插入和删除元素,这一端被称为栈顶. 栈有两个常用指令 ...
- 深入理解计算机系统 第三章 程序的机器级表示 part3
这周看了刘老师提供的相关视频,以及书中对应的章节“3.7 过程” 这一节分为运行时栈.转移控制.数据传送.栈上的局部存储.寄存器中的局部存储空间和递归过程这 6 个小节 其中前 3 小节看懂了一部分内 ...
随机推荐
- Java 原生网络编程.
一.概念 Java 语言从其诞生开始,就和网络紧密联系在一起.在 1995 年的 Sun World 大会上,当时占浏览器市场份额绝对领先的网景公司宣布在浏览器中支持Java,从而引起一系列的公司产品 ...
- cas单点登录
一般一家企业内部会有多个业务系统,多个系统相互协作,但每个系统都需要登陆密码,比如:权限系统,发布系统,配置系统,邮件系统等,用户使用每个系统都需要登陆操作,使用起来比较繁琐,工作效率低下.此时就需要 ...
- TCP连接与释放
TCP连接的建立 三次握手 TCP服务器进程先创建传输控制块TCB,时刻准备接受客户进程的连接请求,此时服务器就进入了LISTEN(监听)状态. TCP客户进程也是先创建传输控制块TCB,然后向服务器 ...
- could not read Username for 'https://github.com': No error
用idea往github上push代码的时候,突然的不能用了. 报could not read Username for 'https://github.com': No error错误. 原因不明. ...
- 计算机1&操作系统硬件
1.什么是编程语言? 语言是一种事物与另外一种事物沟通的表达方式 而编程则是人与计算机沟通的表达方式 2:什么是编程? 编程就是程序员用计算机能理解的的表达方式,把程序员想要表达的内容写到文件里, ...
- vue从入门到进阶:计算属性computed与侦听器watch(三)
计算属性computed 模板内的表达式非常便利,但是设计它们的初衷是用于简单运算的.在模板中放入太多的逻辑会让模板过重且难以维护.例如: <div id="example" ...
- -moz、-ms、-webkit浏览器前缀解释(PS:后续在详细解释)
-moz-是Firefox Gecko内核,moz代表的是Firefox的开发商Mozill -ms代表ie浏览器私有属性 -webkit代表safari.chrome私有属性
- java读写properties工具代码
package test612; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundExc ...
- Java 线程方法
线程标识相关 方法 描述 public Thread(Runnable target, String name) 带参数的构造方法, 第二个参数是线程名称 public static Thread ...
- loadrunner 脚本优化-检查点设置
脚本优化-检查点设置 by:授客 QQ:1033553122 VuGen判断脚本是否执行成功是根据服务器返回的状态来确定的,如果服务器返回的是HTTP状态为200 OK,那么VuGen就认为脚本正确地 ...