程序的机器级表示:

计算机执行机器代码,用字节序列编码低级的操作,包括处理数据、管理内存、读写存储设备上的数据、利用网络通信。

编译器将源代码转译成机器代码需要基于:编程语言的规则、目标机器的指令集、操作系统遵循的惯例。

汇编代码是机器代码的文本表示。

逆向工程:通过研究系统和逆向工作,来试图了解系统的创建过程。

C语言-汇编代码-机器代码 相互关系

GDB调试器,用来检查机器级程序运行时的行为。

IA32和x86-64 汇编语言

Intel处理器的发展历史:K表示1000,M表示1000000,G表示1000 000 000

8086 1978年 29K个晶体管 单芯片 16位处理器

8088 在8086上增加一个8位外部总线

8087 1980年 45K个晶体管 浮点协处理器

80286 1982年 134K晶体管

i386 1985 275K个晶体管  体系结构扩展到32位

i489 1989年 1.2M个晶体管

Pentium 1993 3.1M 指令集进行了小扩展

PentiumPro 1995 5.5M 增加条件传送指令

Pentium/MMX 1997 4.5M

Pentium2 1997 7M

Pentium3 1999 8.2M

Pentium4 2000 42M

Pentium4E 2004 125M 增加了超线程 在处理器上有PC和寄存器备份。

Core2 2006 291M 多个微处理器,不支持超线程

Corei7,Nehalem 2008 781M 多核,超线程

Corei7,Sandy Bridge 2011 1.17G个晶体管

Corei7,Haswell 2013 1.4G个晶体管

摩尔定律:用来描述硬件的增长趋势。

程序编码:

1.机器级代码,对于机器级编程,有两种抽象很重要:

a.由指令集体系结构或指令集架构(ISA)定义机器级程序的格式和行为,它定义了处理器状态、指令的格式,以及每条指令对状态的影响。

b.机器级程序使用的内存地址是虚拟地址,提供的内存模型好像一个非常大的字节数组。存储器系统的实际实现是将多个硬件存储器和操作系统软件结合起来。

程序计数器:PC,在x86-64中用%rip表示,给出将要执行的下一条指令在内存中的地址。

整数寄存器文件,16个命名位置,每个存储64位的值,可存储地址或整数数据。有的寄存器可以记录程序状态,其他寄存器来保存临时数据,如:过程参数、局部变量、函数返回值

条件码寄存器,保存最近执行的算术或逻辑指令的状态信息。它们用来实现控制或数据流中的条件编号。

一组向量寄存器,可以存放一个或多个整数或浮点数值。

程序在内存中的快照:

1.程序的可执行代码。

2.操作系统需要的信息。

3.用来管理过程调用和返回的运行时栈。

4.用户分配的内存块。

操作系统负责管理虚拟地址空间,将虚拟地址翻译成实际处理器内存中的物理地址。

一条机器指令只执行一个非常简单的操作(电信号0和1),一个程序是多条机器指令按照一定顺序执行的序列。

汇编代码指令都有一个字符的后缀,表明操作数的大小,如传送指令的四个变种:movb(传送字节)、movw(传送字)、movl(传送双字)、movq(传送四字)

访问信息:

操作数指示符:

大多指令有一个或多个操作数,指示出执行一个操作中要使用的源数据值,以及放置结果的目的位置。

操作数分为三种类型:1.立即数。表示常数值。2.寄存器,表示某个寄存器的内容。3.内存引用,根据计算出来的地址访问某个内存位置。

寻址模式:立即数偏移,一个基址寄存器,一个变址寄存器,一个比例因子。

数据传送指令:

压入和弹出栈数据

算术和逻辑操作

加载有效地址:leaq,从内存读数据到寄存器。

移位操作,先给出移位量,第二项给出的是要移位的数。

控制

条件码:

访问条件码:

跳转指令:

计算机系统读书笔记三相关推荐

  1. mysql数据库权威指南_MySQL_MySQL权威指南读书笔记(三),第二章:MYSQL数据库里面的数 - phpStudy...

    MySQL权威指南读书笔记(三) 第二章:MYSQL数据库里面的数据 用想用好MYSQL,就必须透彻理解MYSQL是如何看待和处理数据的.本章主要讨论了两个问题:一是SQL所能处理的数据值的类型:二是 ...

  2. 《编程之美》读书笔记(三):烙饼问题与搜索树

    <编程之美>读书笔记三:烙饼问题与搜索树 薛笛 EMail:jxuedi#gmail.com 前面已经写了一些关于烙饼问题的简单分析,但因为那天太累有些意犹未尽,今天再充实一些内容那这个问 ...

  3. 《How Tomcat Works》读书笔记(三)--Connector(连接器)

    <How Tomcat Works>读书笔记(三)--Connector(连接器) 这是<How Tomcat Works>第三四章的读书笔记.主要写了Tomcat4.0默认的 ...

  4. TCPIP详解Protocol 读书笔记(三) IP协议讲解

    TCP/IP详解:Protocol 读书笔记(三) Chapter3 IP:网际协议 文章目录 TCP/IP详解:Protocol 读书笔记(三) Chapter3 IP:网际协议 IP协议 IP数据 ...

  5. 《大型网站技术架构》读书笔记三:大型网站核心架构要素

    来源:http://www.cnblogs.com/edisonchou/p/3806348.html 此篇已收录至<大型网站技术架构>读书笔记系列目录贴,点击访问该目录可获取更多内容. ...

  6. 《淘宝技术这十年》读书笔记 (三). 创造技术TFS和Tair

    前面两篇文章介绍了淘宝的发展历程和Java时代的变迁:             <淘宝技术这十年>读书笔记 (一).淘宝网技术简介及来源             <淘宝技术这十年&g ...

  7. Spring揭秘 读书笔记 三 bean的scope与FactoryBean

    本书可作为王富强所著<<Spring揭秘>>一书的读书笔记  第四章 BeanFactory的xml之旅 bean的scope scope有时被翻译为"作用域&quo ...

  8. 《你的灯亮着吗》 读书笔记三

    紧接<你的灯亮着吗>读书笔记二 4.这是谁的问题? 当别人可以妥善解决自己的问题时,不要越俎代庖,如果这是他们的麻烦,就让它成为他们的麻烦,如果一个人处于解决问题的位置,却并不受问题困扰, ...

  9. 需求工程:软件建模与分析 读书笔记三

    第四章 需求获取概述 读书笔记 在我们获取需求过程中会遇到很多困难,例如用户和开发人员的背景不同.立场不同,对统一信息的理解就会不同:普通用户缺乏概括性.综合性的表述能力:用户存在认知困境:用户越俎代 ...

最新文章

  1. react中纯函数_如何在纯React中创建电子邮件芯片
  2. vlc学习计划(4)--在EMACS中使用GDB调试
  3. 【译Py】数据科学面试终极指南(二)
  4. 操作系统原理第八章:内存管理
  5. Oracle 学习笔记:Backup Recovery 常用命令
  6. 10分钟学会理解和解决MySQL乱码问题
  7. linux ub查看ftp安装,Linux Ubuntu 18.04 安装 FTP服务
  8. 打开stl文件_介绍一种修复、查看以及打印STL三维模型文件的工具
  9. ubuntu 18.04安装php 7,如何在Ubuntu 18.04和16.04上安装PHP(7.3,7.2和7.0)?
  10. 复变函数:傅里叶变换
  11. 思科网络设备命令大全
  12. Shufflenet解读
  13. 『Hammerspoon』Mac 锁屏自动开关蓝牙
  14. c++ Beep函数的雪之梦
  15. 《云计算架构技术与实践》读书笔记(一):OpenStack概述
  16. 乐吾乐2D可视化智慧光伏能源赋能方案
  17. linux下的遥控器软件,Linux系统下遥控器的配置与使用方法
  18. java.exe和javaw.exe有什么区别?
  19. 【第57题】输入、输出系列5-文件锁定功能
  20. 双屏办公:一台主机接两个显示器

热门文章

  1. Allegro中如何进行尺寸标注
  2. SDK无埋点技术在百分点的探索和实践
  3. 简述Spring、SpringMVC、SpringBoot关系?
  4. MAC实现睡眠和休眠唤醒
  5. 【Redis源码剖析】 - Redis内置数据结构之压缩列表ziplist
  6. esp32学习笔记(4)——adc
  7. pythonGUI之wxpython控件总结
  8. 小米平板1刷dot9-dot7
  9. ant-design中取消tab激活时候的下划线、以及修改tab激活时候下划线颜色
  10. 利用单片机控制74HC595显示图案