本章基于两种相关的机器语言:Intel IA32和x86-64,前者注重32位,后者注重64位。

本章脉络:c\汇编\机器码之间的关系,数据的表示,控制结构如何实现。运行栈,局部变量的存储,数据结构。

【一】程序编码

-O1表示1级optimize,一般第二级优化比较好。

1、机器级代码

两种抽象尤为重要:1、机器级程序的格式和行为 --指令集体系结构。2、储存器地址是虚拟的,字节数组。

机器级代码可控部分:

程序计数器(pc, %eip)

整数寄存器文件:8个命名的位置,分别存储32位的值,可以是数据,也可以是地址。

条件码寄存器

【二】数据格式

字:16位 w

双字:32位 dw

四字:64位 qw

汇编后缀:b:1, w:2, l:4, 浮点数 s:4, l:8 不会引起歧义,浮点数舒勇不同的指令和寄存器

【三】访问信息

1、操作数指示符

除了立即数和寄存器,都要有寻址的操作。

立即数$0x108, 寄存器%eax

寄存器寻址直接加括号(%eax),前面加数就是偏移量,Imm(Ep, Ei, s) 即为 M[Imm + R[Ep] + R[Ei] * s]

2、数据传送指令

MOV S, D

后缀有MOVS MOVZ,分别是符号扩展和零扩展

PUSH %eax (栈指针是规定好的, %esp)

3、算术和逻辑操作

leal S, D 将寄存器S中地址的数加载到寄存器D中

加一、减一、取负、取补

加、减、乘、异或、或、与

左移、算术右移、逻辑右移

4、控制

【CSAPP】三、程序的机器级表示的更多相关文章

  1. CSAPP 3 程序的机器级表示

    1 本章总述 1) 通过让编译器产生机器级程序的汇编表示, 学习了编译器及其优化能力, 以及机器.数据类型和指令集; 2) 学习了程序如何将数据存储在不同的内存区域中 -- 程序开发人员需要知道一个变 ...

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

    CSAPP:程序的机器级表示1 关键点:数据格式.操作数指示符. 数据格式访问信息操作数指示符举例说明 数据格式   术语字(word)表示16位数据类型,32位数为双字(double words), ...

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

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

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

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

  5. Linux下程序的机器级表示学习心得

    Linux下程序的机器级表示学习心得 上周学习完Linux程序的机器级表示后,对于其中有些还是掌握的不太透彻.对于老师提出的关于本章一些细节的问题还是有不会,所以又重新温习了一下上周的学习内容,以下为 ...

  6. CS:APP Chapter 3 程序的机器级表示-读书笔记

    3.1 程序的机器级表示 发展历史 Intel,AMD,ARM 等企业各有又是,CPU 从 8 位发展到 16 位,再到 32 位,近几年发展到 64 位,当下的 CPU 体系被称为 x86-64 体 ...

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

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

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

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

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

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

随机推荐

  1. django settings相关配置

    settings """ Django settings for mysite project. Generated by 'django-admin startproj ...

  2. R语言操作mysql上亿数据量(ff包ffbase包和ETLUtils包)

    平时都是几百万的数据量,这段时间公司中了个大标,有上亿的数据量. 现在情况是数据已经在数据库里面了,需要用R分析,但是完全加载不进来内存. 面对现在这种情况,R提供了ff, ffbase , ETLU ...

  3. IE10、火狐浏、谷歌浏览器 KindEditor无法获取textarea值

    http://e-mailwu.blog.163.com/blog/static/651040362013311160913/ 在IE10.火狐浏览器.谷歌浏览器下后台KindEditor在线编辑器无 ...

  4. Spring4.2.3+Hibernate4.3.11整合( IntelliJ maven项目)

    1. 在IntelliJ中新建maven项目 给出一个建好的示例 2. 在pom.xml中配置依赖 包括: spring-context spring-orm hibernate-core mysql ...

  5. centos7 上搭建私有云

    OwnCloud环境搭建 一. 环境搭建 1. 环境需求 服务器操作系统:Centos7.0 外网服务器操作系统:Centos7.0 Php版本号:5.4.16 Mysql版本号:5.5.52 Apa ...

  6. pt-osc使用方法

    pt-osc实战运用 1.安装pt-osc,解压即可用 安装包在:10.135.2.217:data/online/software/percona-toolkit-3.0.12.tar.gz tar ...

  7. C# ---sender

    在某个方法中: 第一种写法: private void btn4_Click_1(object sender, RoutedEventArgs e) { btn1_Click(null, null); ...

  8. qt打包问题。启动失败:Application failed to start because platform plugin “windows” is missing

    qt打包启动失败:Application failed to start because platform plugin “windows” is missing 通常的原因是因为没有platform ...

  9. Action Results in Web API 2

    https://docs.microsoft.com/en-us/aspnet/web-api/overview/getting-started-with-aspnet-web-api/action- ...

  10. try catch finally中return的执行顺序

    下面说一下try{ } catch{}中有return的情况 究竟是哪个return起作用的 话不多说 上代码 1 try中有return的情况 //普通方法 public static int hh ...