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的更多相关文章

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

    CSAPP:程序的机器级表示2 关键点:算术.逻辑操作 算术逻辑操作1.加载有效地址2.一元二元操作3.移位操作 算术逻辑操作   如图列出了x86-64的一些整数和逻辑操作,大多数操作分成了指令类( ...

  2. CSAPP:第三章程序的机器级表示3

    程序的机器级表示3 关键点:过程.调试.指针 过程1.运行时栈2.转移控制3.数据传递4.栈上的局部存储5.寄存器中的局部存储空间理解指针使用GDB调试器 过程 1.运行时栈   x86-64的栈向低 ...

  3. 【CSAPP】三、程序的机器级表示

    本章基于两种相关的机器语言:Intel IA32和x86-64,前者注重32位,后者注重64位. 本章脉络:c\汇编\机器码之间的关系,数据的表示,控制结构如何实现.运行栈,局部变量的存储,数据结构. ...

  4. 深入理解计算机系统 第三章 程序的机器级表示 Part2 第二遍

    第一遍对应笔记链接 https://www.cnblogs.com/stone94/p/9943779.html 本章汇编代码中常出现的几个指令及其含义 1.push 操作数的个数:1 将操作数(一般 ...

  5. 深入理解计算机系统 第三章 程序的机器级表示 part1

    如题所示,这一章讲解了程序在机器中是怎样表示的,主要讲汇编语言与机器语言. 学习什么,为什么学,以及学了之后有什么用 我们不用学习如何创建机器级的代码,但是我们要能够阅读和理解机器级的代码. 虽然现代 ...

  6. 深入理解计算机系统 第三章 程序的机器级表示 Part1 第二遍

    第一遍对应笔记链接 https://www.cnblogs.com/stone94/p/9905345.html 机器级代码 计算机系统使用了多种不同形式的抽象,利用更简单的抽象模型来隐藏实现的细节. ...

  7. 【CSAPP】第三章 程序的机器级表示

    目录 1. 数据的编码与存储 2. 汇编指令 2.1 数据传送指令 访存方式 数据传送指令 入栈出栈 2.2 算术/逻辑指令 2.3 过程控制指令 控制码 比较指令 跳转指令 条件设置指令 3. 程序 ...

  8. 深入理解计算机系统 第三章 程序的机器级表示 part2

    这周由于时间和精力有限,只读一小节:3.4.4  压入和弹出栈数据 栈是一种特殊的数据结构,遵循“后进先出”的原则,可以用数组实现,总是从数组的一端插入和删除元素,这一端被称为栈顶. 栈有两个常用指令 ...

  9. 深入理解计算机系统 第三章 程序的机器级表示 part3

    这周看了刘老师提供的相关视频,以及书中对应的章节“3.7 过程” 这一节分为运行时栈.转移控制.数据传送.栈上的局部存储.寄存器中的局部存储空间和递归过程这 6 个小节 其中前 3 小节看懂了一部分内 ...

随机推荐

  1. Laravel篇二之本地版本库关联github

    以往的工作中都是使用svn作为版本控制,对git分布式的有些陌生,本篇主要记录的本地存储myWeb-laravel的git版本库与github建立关联. 1.首先进入本地myWeb-laravel,执 ...

  2. 9.并发_EJ

    第66条: 同步访问共享可变的数据 所谓同步指的发出一个调用时,如果没有得到结果就不返回,直到有结果后再返回.另外相对应的是异步,指的是发出一个调用时就立即返回而不在乎此时有没有结果. 同步和异步关注 ...

  3. URL 与 URI 介绍

    URL: 统一资源定位符 ( Uniform Resource Locator ) URI: 统一资源标识符 ( Uniform Resource Identifier ) URL 地址:https: ...

  4. elementUI vue tree input 懒加载 输入下拉树型示例 点击其他区域关闭自定义div

    <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8&quo ...

  5. JavaScript之Number、String、Array常用属性与方法手册

    Number isFinite函数 Number.isFinite() 方法用来检测传入的参数是否是一个有穷数(finite number). 语法: Number.isFinite(value) 例 ...

  6. 洛谷P4578 [FJOI2018]所罗门王的宝藏(dfs)

    题意 题目链接 Sol 对于每个询问\(x, y, c\) 从在\((x, y)\)之间连一条边权为\(c\)的双向边,然后就是解\(K\)个二元方程. 随便带个数进去找找环就行了 #include& ...

  7. Android EditText手机号格式化输入XXX-XXXX-XXXX

    先来效果图: 设置手机格式化操作只需要设置EditText的addTextChangedListener的监听,下面看代码 /*editText输入监听*/ et_activity_up_login_ ...

  8. Android为TV端助力 转载:Android绘图Canvas十八般武器之Shader详解及实战篇(上)

    前言 Android中绘图离不开的就是Canvas了,Canvas是一个庞大的知识体系,有Java层的,也有jni层深入到Framework.Canvas有许多的知识内容,构建了一个武器库一般,所谓十 ...

  9. spring boot 基础 2018年5月3日

    主包下运行类@SpringBootApplication  此注解是核心注解,源码如下 @Target({ElementType.TYPE}) @Retention(RetentionPolicy.R ...

  10. 【MM系列】SAP库龄报表逻辑理解

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[MM系列]SAP库龄报表逻辑理解   第一篇 ...