计算机组成与实现 课件 高小鹏 第1-5章-计算机概述- 多周期CPU_第1页
计算机组成与实现 课件 高小鹏 第1-5章-计算机概述- 多周期CPU_第2页
计算机组成与实现 课件 高小鹏 第1-5章-计算机概述- 多周期CPU_第3页
计算机组成与实现 课件 高小鹏 第1-5章-计算机概述- 多周期CPU_第4页
计算机组成与实现 课件 高小鹏 第1-5章-计算机概述- 多周期CPU_第5页
已阅读5页,还剩433页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

计算机概述计算机组成与实现目录计算机的基本认识计算机的应用及分类计算机的基本硬件构成计算机的层次结构第一台数字式多用途计算机ENIAC:ElectronicNumericalIntegratorandCalculator时间:1946年;用途:计算炮弹弹道美国宾夕法尼亚大学3真空管重量面积功耗性能1880030吨100m2150KW5000加法/秒Cpl.IrwinGoldstein设置功能表开关程序员BettyJeanJennings(左)与FranBilas(右)J.PresperEckert(1919-1995)JohnWilliamMauchly(1907-1980)两位主设计师大型机时代:上世纪50年代~60年代核心技术:计算机4大型机~Mainframe磁带机CPU磁带机磁盘打印机控制台读卡机龙头企业价格用户技术IBM1M美元大型企业COBOL,Fortran,分时OS小型机时代:上世纪70年代核心技术:集成电路(Integratedcircuits)5小型机~Minicomputer龙头企业价格用户技术Digital,HP10K美元大学,实验室C,UNIXPC时代:上世纪80年代~2000中期核心技术:微处理器(Microprocessor)6龙头企业价格用户技术Apple,IBM1K美元个人Basic,Java,WindowsPC~PersonalComputer后PC时代:2000以后1/2核心技术:无线网络(WirelessNetwork),ARMCPU7龙头企业价格用户技术Motorola,Nokia,Apple,Google500美元个人iOS,AndroidMotorolaV70360度旋盖2002NokiaN-Gage全球首款游戏手机2003AppleiPhone全面定义智能手机2007后PC时代:2000以后2/2核心技术:局域网,宽带互联网8龙头企业用户Amazon,Google,阿里无法(不愿)负担高端计算与存储设备的用户云计算重大认识#1:摩尔定律晶体管~transistor芯片的晶体管数量:每2年翻一番GordonMoore(1929)Intel创始人重大认识#2:局部性与存储层次局部性:体现了程序内在的固有基本规律存储层次:应用了局部性原理,是性能、容量、成本的设计折中DDR-SDRAM,SRAMCPU主存储器存储设备输入/输出设备(外部设备)快小高性能容量单位成本慢大低SRAM~StaticRandomAccessMemory;SDRAM~SynchronousDynamicRAMDDR-SDRAM~DoubleDataRateSDRAM目录计算机的基本认识计算机的应用及分类计算机的基本硬件构成计算机的层次结构个人计算机定位:是以较小代价为个人用户提供较高的性能范围:最为广泛,如台式机、笔记本电脑都是PC范畴PC始终是最大的计算机市场之一软件:办公软件、开发软件、娱乐软件、游戏软件等来源:/history-of-the-personal-computer/服务器1/3定位:承载大负载的任务,例如科学计算、Web访问等软件:Web服务、数据库、科学计算软件、模拟系统等应用:部署在机房中,通过网络对外提供计算与存储服务服务器~ServerLenovoSystemx3550M5外视图前视图:8个2.5英寸SATA硬盘内部视图服务器2/3--服务器集群服务器集群:多台服务器聚合在一起,以分布式对外提供服务微信、淘宝、新浪等的运行平台集群~Cluster服务器3/3--超级计算机超级计算机:更大规模的服务器集群,聚合的处理器总量大约在10万颗量级,主要以并行方式提供超级计算能力用途:如天气预报、地质勘探、核爆模拟、蛋白质结构分析等超级计算机~SuperComputer,SC中国芯:申威26010厂商江南计算技术研究所指令集64位RISC核心数260主频1.45GHz峰值性能3.06TFlop/sCPU数量:申威26010x40960计算能力:全球72亿人口用计算器不间断计算32年系统功耗:15.371MW机柜超节点x4超节点运算插件x32运算插件运算节点x4运算节点申威26010x2嵌入式计算机1/2定位:面向特点应用,作为一个子系统被内嵌在整个系统中范围:最为广泛,无所不在冰箱、洗衣机、微波炉、数字电视、汽车、高铁、飞机、轮船、卫星、4G网络、WIFI、机器人......最大的计算机市场嵌入式计算机2/2普遍更重视成本、功耗、可靠性通常不把性能作为首要指标某些应用中,还非常强调实时特性例如视频播放器实时~RealTime目录计算机的基本认识计算机的应用及分类计算机的基本硬件构成计算机的层次结构计算机的典型硬件组成中央处理器存储器输入输出设备中央处理器~CentralProcessingUnit,CPUCPUCPU是计算机的最核心部件,其功能是能够执行由一组指令构成的程序CPU可以抽象为2大部分:数据通路、控制器数据通路:执行指令所需的计算与存储的功能部件集合PC:类似于C语言的指针,指向要执行的指令ALU:完成各类计算,如加减乘除寄存器堆:临时性存储参与运算的数据以及运算结果控制器:根据指令控制数据通路的各个部件完成相应操作例如加法指令,就需要控制ALU完成加法运算程序计数器~ProgramCounter(PC)算数逻辑单元~ArithmeticandLogicUnit(ALU)CPU基本模型CPU现代CPU通常包含cache、MMU为了提高性能,现代主流CPU一般为多核结构每个核心相当于过去的一个完整CPU高速缓存~cache存储管理单元~MemoryManagementUnit(MMU)CPU基本模型现代主流CPU基本结构主存储器主存储器(简称主存):存储程序以及程序运行过程中产生以及需要处理的各种数据程序示例:Excel.exe就是一个程序,平时是存储在硬盘中的;被鼠标双击后,它就会被Windows操作系统加载到主存中。数据示例:Excel中打开的某个excel文件就是Excel.exe运行所需要的数据主存主存很多时候也被称为内存顾名思义,既然有主存和内存的概念,那么就有辅存和外存的概念。辅存或外存通常是指硬盘、光盘等设备。从图11可以看出,它们也属于输入输出设备范畴。早期计算机主存只有几千字节的容量。更有甚者,某些计算机只有容量极小的主存,而没有硬盘。到本书成文时,一台普通PC的主存容量通常会达到4GB以上,而配置的硬盘动辄都是以TB为单位。巨大的容量使得计算机可以运行种类繁多的程序并存储规模庞大的数据,极大的增强了计算机的应用面。可以说,计算机技术的成功在一定程度上源自存储技术的进步。目录计算机的基本认识计算机的应用及分类计算机的基本硬件构成计算机的层次结构软硬件层次结构一个完整的计算机系统,可以划分为硬件和软件两大部分其中,两者之间的交互界面就是指令集计算机领域微电子领域微架构(数据通路&控制器)晶体管CPU存储应用软件操作系统工具/环境编译器I/O系统软件硬件汇编器指令集注:大致结构,仅供参考数字电路软硬件层次结构:指令集硬件功能被抽象为一组基础操作,如加法运算、减法运算等这些操作被称指令;指令的集合就是指令集计算机领域微电子领域微架构(数据通路&控制器)晶体管CPU存储应用软件操作系统工具/环境编译器I/O系统软件硬件汇编器指令集注:大致结构,仅供参考从硬件的角度指令集是底层设计的需求,也是底层功能的抽象数字电路软硬件层次结构:操作系统系统软件,如Windows、Linux、IOS、Andorid管理计算机的软件和硬件资源为应用程序提供丰富的功能计算机领域微电子领域微架构(数据通路&控制器)晶体管CPU存储应用软件操作系统工具/环境编译器I/O系统软件硬件汇编器指令集注:大致结构,仅供参考早期:应用程序直接运行在硬件上现代:应用程序的运行离不开操作系统提供的各类服务数字电路软硬件层次结构:编译器/汇编器编译器把高级程序设计语言(如C程序)转换为汇编程序,然后调用汇编器把汇编程序转换为二进制机器指令,再经优化等生成可执行程序计算机领域微电子领域微架构(数据通路&控制器)晶体管CPU存储应用软件操作系统工具/环境编译器I/O系统软件硬件汇编器指令集注:大致结构,仅供参考现代应用软件开发离不开开发工具和环境,其中最重要的是编译器和汇编器数字电路软硬件层次结构:应用软件种类最为繁多,用于满足用户的特定需求

PC上的各类办公软件、游戏、浏览器等;

服务器上的各类Web服务软件、科学与工程计算软件等;

手机上的微信等计算机领域微电子领域微架构(数据通路&控制器)晶体管CPU存储应用软件操作系统工具/环境编译器I/O系统软件硬件汇编器指令集注:大致结构,仅供参考应用软件是种类最多的程序,用于满足用户的特定需求数字电路软硬件层次结构:CPU计算机硬件中最核心的部件。它执行程序的基本原理:从存储器读取一条指令;执行指令功能;计算下条指令在存储器的位置不断的重复上述过程计算机领域微电子领域微架构(数据通路&控制器)晶体管CPU存储器应用软件操作系统工具/环境编译器I/O系统软件硬件汇编器指令集注:大致结构,仅供参考一般来说,CPU只能执行某个特定的指令集。例如Intel公司生产的CPU就只执行X86指令集,ARM公司生产的CPU就只执行ARM指令集数字电路软硬件层次结构:存储器存储器是计算机硬件中第2重要的组成部分今天使用的绝大多数计算机应该称为存储程序计算机构成程序的指令和数据都以二进制数字的形式存储在存储器中计算机领域微电子领域微架构(数据通路&控制器)晶体管CPU存储应用软件操作系统工具/环境编译器I/O系统软件硬件汇编器指令集注:大致结构,仅供参考一台计算机的存储器通常包含若干层次,不同层次的存储器在容量上和速度上具有数量级差距数字电路软硬件层次结构:输入/输出系统输入系统负责信息进入计算机,输出系统负责信息从计算机输出如鼠标、键盘、无线网卡计算机领域微电子领域微架构(数据通路&控制器)晶体管CPU存储应用软件操作系统工具/环境编译器I/O系统软件硬件汇编器指令集注:大致结构,仅供参考只能计算而无信息输入输出的计算机没有实用价值数字电路软硬件层次结构:微架构芯片的内部结构就是微架构CPU这样的芯片内部可以划分为两大部分:数据通路、控制器其中,数据通路又包含一组功能部件,如寄存器堆、运算单元等计算机领域微电子领域微架构(数据通路&控制器)数字电路晶体管CPU存储应用软件操作系统工具/环境编译器I/O系统软件硬件汇编器指令集注:大致结构,仅供参考所有的功能部件、控制器等又是由数字电路组成的软硬件层次结构:数字电路数字电路包括组合电路和时序电路两大部分组合电路:具有计算功能的电路,如与门、或门、非门等时序电路:具有存储功能的电路,如寄存器等计算机领域微电子领域微架构(数据通路&控制器)数字电路晶体管CPU存储应用软件操作系统工具/环境编译器I/O系统软件硬件汇编器指令集注:大致结构,仅供参考每个门电路又可以由若干晶体管构成软硬件层次结构:晶体管晶体管是实现数字电路的基本单元晶体管是目前实现开关电路的主要技术手段晶体管的开关性能和功耗直接影响芯片的频率、功耗等计算机领域微电子领域微架构(数据通路&控制器)数字电路晶体管CPU存储应用软件操作系统工具/环境编译器I/O系统软件硬件汇编器指令集注:大致结构,仅供参考晶体管具有很好的开关特性,即在电路特性上表现为或者通或者断,对应了数字电路的0和1数据表示与运算方法计算机组成与实现目录常见进制及其转换常见术语二进制加法整数的二进制表示方法浮点数的二进制表示方法补码的几种常见运算数的表示方法在计算机中,任何对象都被表示为一组0/1串即使是上面这句话,也是由一组0/1串构成的!这就是所谓的二进制表示如何用二进制表示数呢?让我们从熟悉的十进制开始介绍十进制数的表示方法示例:10进制的1234,其值的计算过程可以表示为从上例可以看出,每一位数都包含了基和权两部分基:base;权:weight123410的角标10代表十进制。由于十进制是人类的习惯表达方式,因此在很多时候人们会省略这个角标。数的一般表示方法对于任意一个数,如dn-1dn-2...d1d0,其值表示为dn-1

Bn-1+dn-2

Bn-2+...+d1

B1+d0

B0其中dn-1,dn-2,...d1,d0是该进制的可能取值例如十进制,可能取值为{0,1,2,3,4,5,6,7,8,9}二进制的表示方法二进制数的每位也被称为比特(bit)二进制的基能够表示的数字范围只有2个数,即{0,1}N位二进制数的各位权从最低位到最高位分别为20,21,…,2N-1示例:110112常见数制十进制各位可能取值:0,1,2,3,4,5,6,7,8,9示例:947210

=9472二进制各位可能取值:0,1示例:1010112

=0b101011十六进制各位可能取值:0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F示例:2A5D16

=0x2A5D十进制二进制十六进制000000100001200002300003400004500005600006700007800008900009100000A110000B120000C130000D140000E150000F不同数制的示例示例

947210

= 9000 +400 +70 +2

9x1000 +4x100 +7x10 +2x1

9x103 +4x102 +7x101 +2x100

947210

= 2x163 +5x162 +0x161 +0x160

947210

= 250016

0xA15= 0b101000010101进制转换十进制转二进制用十进制数除以2,得到的余数就是相应二进制的最低位将得到的商继续除以2,得到的余数就是次低位重复上述过程直至商为0示例:27的二进制计算过程2710=110112步骤被除数商余数备注127131最低位21361

3630

4311

5101最高位进制转换十六进制与二进制两者之间转换非常简单,基本方法是:每4位二进制对应1位十六进制示例:1101011010110112与6C5B16之间的转换二进制110110001011011十六进制6C5B手工转换时,注意从低位开始转换,以防止高位不足4位导致出错。进制转换十进制转十六进制先将十进制数转换为二进制数再二进制数转换为十六进制数目录常见进制及其转换常见术语二进制加法整数的二进制表示方法浮点数的二进制表示方法补码的几种常见运算字节、字字节(byte):由8个二进制位构成的一个元组,是目前计算机数据单位1个byte的表示范围是从0x00至0xFF,即总共是256个数字字(word):一个字包含的二进制位数因计算机不同而不同不同CPU计算能力不同,因此其字的大小也不同以MIPS为例,CPU能计算的数据大小为32位,故其字长为32位大量当代计算机,如PC、服务器甚至手机,CPU字长已经发展到64位了在一些专用领域,CPU的字长甚至达到128位嵌入式领域中的某些CPU字长可能只有16位甚至8位最高/最低有效位、最高/最低有效字节MSB(MostSignificantBit):最高有效位,位于最左位LSB(LowSignificantBit):最低有效位,位于最右边位MSB(MostSignificantByte):最高有效字节,位于数据的最左边的字节LSB(LeastSignificantByte):最低有效自己,位于数据的最右边的字节目录常见进制及其转换常见术语二进制加法整数的二进制表示方法浮点数的二进制表示方法补码的几种常见运算二进制加法回顾十进制数加法计算原理将两个对应的数字位与来自低位的进位相加,如果其和大于等于10,那么向产生进位该计算过程从最低位开始依次向最高位。其中最低位的进位为0二进制加法与十进制加法原理类似二进制每位数字非0即1,因此两个数字位相加最大值为2,即102显然,此时就应该进位了示例:10112与00112的计算过程

b3b2b1b0+10110011

1

1110

b4b3b2b1b0+

1111

00011111

100001)b0-b3位计算(产生进位输出)2)b4位(进位)溢出人:在上例中,人计算结果为100002是正常的人在计算中,通常不考虑位数限制,可以灵活的添加高位计算机:由于受硬件限制,就必须考虑计算结果的位数假设CPU的字长为4位,则b4位是不存在的,故计算结果就是00002,即0。这种情况就是溢出。产生溢出,意味着计算结果出现错误了。CPU在溢出发生时,会通过称为异常的机制来报告这个错误

b4b3b2b1b0+

1111

00011111

10000溢出~Overflow;异常~Exception目录常见进制及其转换常见术语二进制加法整数的二进制表示方法浮点数的二进制表示方法补码的几种常见运算一切皆可用数字表示误区:很多时候,我们认为数字的含义只能是数值示例1:19060123解读1:如果在银行账户中,那就是存款解读2:如果在学籍系统中,那就是学号示例2:0和10:可以对应逻辑真(F,false)1:可以对应逻辑真(T,true)19060123班内序号班级编号院系编号入学年份一切皆可用数字表示启示1:一个数字首先是一个编码,其含义必须结合上下文来解读启示2:一个数字可以作为整体解读,也可以分为若干部分解读对于一个数字来说,其包含2部分内容编码:就是数字本身,或者说是一种记号。例如007语义:编码所代表的概念的含义,是对编码的解释例如007可以代表某个特定的间谍,也可是酒店的房间编号编码本身没有任何意义编码只有被赋予语义的编码才有意义数的编码空间示例:3位十进制编码空间:000,001,…,999编码个数:103,即1000编码空间:有效编码的集合空间大小:有效编码的总数对于一个n位B进制数来说,其编码空间大小为Bn例如3位二进制,其编码空间大小为23=83为十六进制,其编码空间为163=4096编码位数

编码与编码对象之间的对应关系是由人来确定的例如:A可以用0000002对应,也可以用1110002对应二进制无符号数二进制无符号数的编码方案没有负数;全是整数000000000000000000000000000000002=010000000000000000000000000000000012=110000000000000000000000000000000102=210 ... ...011111111111111111111111111111012=2,147,483,64510011111111111111111111111111111102=2,147,483,64610011111111111111111111111111111112=2,147,483,64710100000000000000000000000000000002=2,147,483,64810100000000000000000000000000000012=2,147,483,64910100000000000000000000000000000102=2,147,483,65010 ... ...111111111111111111111111111111012=4,294,967,29310111111111111111111111111111111102=4,294,967,29410111111111111111111111111111111112=4,294,967,29510无符号~unsigned二进制符号数原码方案用最高位表示符号位(0~正,1~负)其余位代表绝对值(也就是无符号数)示例:4位原码编码方案原码方案的缺陷存在2个零,即00002和100021)有效编码被浪费了2)硬件无法使用前述加法编码数值不连续希望数值随编码增大而增大符号~signed00002=01000012=11000102=21000112=31001002=41001012=51001102=61001112=71010002=-01010012=-11010102=-21010112=-31011002=-41011012=-51011102=-61011112=-710编码5位原码方案数值二进制符号数二进制补码方案(以5位二进制补码为例)最高位代表符号位:0~正,1~负10000代表最小的负数(-16),11111代表最大的负数(-1)特点:只有1个零符号确定后,数值随编码增长而增长000000000101111...1111110000...数值增长数值增长15-16编码5位补码方案数值32位二进制补码表示范围:-2,147,483,648至2,147,483,647符号位00000000000000000000000000000000two=0ten00000000000000000000000000000001two=1ten00000000000000000000000000000010two=2ten ... ...01111111111111111111111111111101two=2,147,483,645ten01111111111111111111111111111110two=2,147,483,646ten01111111111111111111111111111111two=2,147,483,647ten10000000000000000000000000000000two=–2,147,483,648ten10000000000000000000000000000001two=–2,147,483,647ten10000000000000000000000000000010two=–2,147,483,646ten ... ...11111111111111111111111111111101two=–3ten11111111111111111111111111111110two=–2ten11111111111111111111111111111111two=–1ten二进制补码的一般性表示

二进制补码小结现代计算机普遍采用使用最高位作为符号位正数区间与负数区间大致相同负数区间比正数区间多一个数相反数计算方法:各位取反,然后加1示例:已知+7=01112,则+7=10002+12=10012课堂练习假设CPU字长为4位。以下哪个范围可以用二进制补码表示?-15至

+150至+15-8至

+7-16至

+15空间大小为31,需要至少5位空间大小为16(合理),但没有负数区间正负区间都有,负区间多1个,空间大小16正负区间都有,负区间多1个,但空间大小为32目录常见进制及其转换常见术语二进制加法整数的二进制表示方法浮点数的二进制表示方法补码的几种常见运算浮点数概述计算机除了处理整数外,很多时候也需要处理浮点数例如圆周率3.1415926,就无法用前面讲的二进制整数编码方案表示在工程计算中,就大量涉及浮点数浮点数具有表示范围和精度都较高的特点它解决了整数和小数位长度固定的限制允许表示一个很大的数或者很想的数WilliamM.Kahan(威廉•凯亨),1933年6月领导开发了Intel的8087浮点协处理器制定了IEEE754和854标准浮点数标准之父;1989年图灵奖获得者Forhisfundamentalcontributionstonumericalanalysis.Oneoftheforemostexpertsonfloating-pointcomputations.Kahanhasdedicatedhimselfto"makingtheworldsafefornumericalcomputations"!浮点数格式

313029282726252423222120191817161514131211109876543210S指数尾数指数和尾数,增加任何一方位数都会减少另一方位数目前方案是在精度与表示范围之间反复权衡后的结果浮点数格式(优化前)示例:用二进制浮点数格式表示5.23×1035.23×103=523010=1010001101110=1.01000110111×212符号为0,指数为12(11002),尾数为1.01000110111313029282726252423222120191817161514131211109876543210S指数尾数00000110010100011011100000000000浮点数格式(优化后)科学记数法通常不会让0出现在尾数的第1位(即小数点左边那位)。类似,浮点数表示方法同样不会让0出现在尾数的第1位由于尾数的第1位只能为1,那么就没有必要再占用实际存储位这使尾数多了1位有效存储位在计算过程中还需要将该位自动补回格式优化:5.23×103的尾数1.01000110111,优化为01000110111313029282726252423222120191817161514131211109876543210S指数尾数00000110010100011011100000000000313029282726252423222120191817161514131211109876543210S指数尾数00000110001000110111000000000000优化后的浮点数格式优化前的浮点数格式表示绝对值小于0的浮点数绝对值小于0的浮点数,其指数是负的示例:0.5和0.25,其对应的就是1.0x2-1与1.0x2-2思路:指数采用二进制补码缺点:负指数的浮点数虽较小,但其二进制却似乎是个较大的数示例:0.5与2.0313029282726252423222120191817161514131211109876543210S指数尾数01111111100000000000000000000000313029282726252423222120191817161514131211109876543210S指数尾数000000001000000000000000000000000.5(1.0×2-1)的浮点数格式为:0x7F8000002.0(1.0×2+1)的浮点数格式:0x00800000浮点数:0.5<2.0二进制:0x7F800000>0x00800000表示绝对值小于0的浮点数:偏阶计数法目标:

000000002对应最小的负指数,而111111112对应最大的正指数思路:编码用的指数=真实指数+127;该方法被称为偏阶记数法示例:0.5与2.00.5的偏阶编码指数:111111112+011111112=0111111022.0的偏阶编码指数:000000012+011111112=100000002313029282726252423222120191817161514131211109876543210S指数尾数00111111000000000000000000000000313029282726252423222120191817161514131211109876543210S指数尾数010000000000000000000000000000000.5(1.0×2-1)的偏阶浮点数格式为:0x3F0000002.0(1.0×2+1)的偏阶浮点数格式:0x40000000IEEE754浮点标准就采用了偏阶记数法单精度浮点表示范围

最大正数计算方法双精度浮点表示范围

格式总位数符号位指数位尾数位单精度浮点321823双精度浮点6411152特殊情况

表示的数单精度浮点数双精度浮点数

符号指数尾数符号指数尾数0X00X000255002047012550120470NaN(非数)X255非0X2047非0正的浮点数01~254任意01~2046任意负的浮点数11~254任意11~2046任意注意:IEEE754编码方案中有2个0上溢和下溢

目录常见进制及其转换常见术语二进制加法整数的二进制表示方法浮点数的二进制表示方法补码的几种常见运算负数的二进制补码的计算方法

负数的二进制补码的计算方法示例1:用8位二进制补码表示-141)14的二进制补码表示为0000111022)将该数各位取反可得1111000123)再计算111100012+1=111100102-14的8位二进制补码为111100102示例2:-14的二进制补码为111100102,计算14的二进制补码1)将111100102各位取反可得0000110122)再计算000011012+1=00001110214的8位二进制补码为000011102减法思路:为了计算x-y,可以通过数学变形改为计算x+(-y)示例:计算28-14(假设字长为8位)1)28的8位二进制补码为:0001110022)-14的二进制补码为:14的二进制补码为:000011102各位取反为:111100012加1,得:1111001023)计算:

000111002+111100102=000011102=140001110011110010+111100001110补码体系的优势:只需要设计加法运算的硬件,减法可以转换为加法运算,故不需为减法设计相应硬件由于字长仅有8位,因此b8位被舍弃。注意:b8位本质上是属于溢出了位扩展很多时候,程序中有不同类型间的变量赋值不同类型的变量,往往位数不同,这就涉及扩展问题Line5:-1最少用2位二进制补码表示,即112,但c8需要8位Line7:ui32是32位,c8是8位1234567charc8;inti32;unsignedintui32;

c8=-1;i32=c8;ui32=(unsignedchar)c8;

8位符号数32位符号数32位无符号数70c8-1113124231615870ui32c8位扩展符号扩展:对于Line5来说,由于c8是符号数,因此需要将-1的符号位复制到c8的高位部分。计算完成后,c8=111111112,即8位补码的-1无符号扩展:对于Line7来说,由于ui32是无符号数,因此需要将c8视为无符号数,并且为确保扩展后的结果正确,ui32的高位部分应该都为0。计算完成后,ui32=00000000000000000000000011111111270c811111111…-1113124231615870ui3200000000000000000000000011111111c811111111比较C语言定义了多个比较操作,其运算结果是逻辑的真假值=、≠、>、<、≥、≤比较运算的等价变换:实现<和=这两种比较运算,再结合NOT逻辑运算,就能实现上述六种比较运算原运算等价运算比较:小于运算(符号数)1/3

比较:小于运算(符号数)2/3正确的理论计算从数学上可知,0减-8的结果应该是+8如果用补码表示+8,则至少需要5位二进制补码,即010002由于b4的存在,故b3的“1”含义是数值,而不是符号错误的实际计算前述计算采用4位二进制补码计算,结果为10002由于b4的缺失,故b3的“1”被错误的解读为符号错误的原因:本质上是由于位数不足,导致计算结果+8超出了4位二进制补码的表示范围,发生了溢出为了完成减法,必须从b4借位比较:小于运算(符号数)3/3

为了完成减法,必须从b4借位比较:小于运算(无符号数)解决方案:0扩展后再按符号数计算1)如果比较的两个数均为无符号数,将其视为符号数2)为了能够用符号数正确表达其原值,需要将两个数分别扩展1位符号位,且符号位为03)之后,就可以采用前述的方案了相等方案1:采用XOR运算,然后判断结果是否全01)执行XOR运算,即C

A⊕B2)将C的各位OR起来,得到1位结果如果为0,即“A=B”为真如果为1,即“A=B”为假方案2:采用减法运算,然后判断结果是否全01)执行减法运算,即C

A-B2)将C的各位OR起来,得到1位结果如果为0,即“A=B”为真如果为1,即“A=B”为假乘法:无符号数二进制乘法的基本计算过程与十进制乘法基本类似示例:计算01012×10112理论分析结果:01012×10112=5×11=55实际计算结果:01101112=55基本原理:循环累加左移后的被乘数假设被乘数A为N位,乘数B为M位结果C为N+M-1位

0101

×1011

0101

0101

0000

+0101

0110111C=0fori=0toM-1ifB[i]thenC=C+A<<i乘法:符号数

A[31]B[31]结果00正01负10负11正除法的复杂性运算结果种类乘法:运算结果只有一个,即积除法:有2个运算结果,即商和余数结果正负性质数学公式:被除数=除数×商+余数示例:-7÷2。如果仅按数学公式,可以有2种结果结果1:-7=2×(-3)+(-1)结果2:-7=2×(-4)+1中间计算过程乘法:以加法为核心除法:以减法为核心。减法比加法要复杂些。除法:无符号数1/3示例:计算10010102除以10002理论分析:10010102为74,10002为8,故74÷8的商为9,余数为2计算过程:与十进制除法类似,核心是“试商”试商:在二进制除法中,商的各位非0即1,“试商”更为简单计算商的每位时,仅需做一次减法然后根据减法结果的符号位判断是否够减位序

6543210

1001

商除数1000

1001010

被除数

-1000

1010

-1000

0010

余数注意在示例的计算过程中,b2、b1的试商过程被省略了。计算机是很“傻”的,因此在实际计算中必须给出完整的计算过程。除法:无符号数2/3中间余数:假设除数为N位,则中间余数为N+1位计算方法:每一次迭代计算商的一位每次从被除数中取出1位,构成中间余数的末位试商:用中间余数减除数,根据减法结果决定商的各位取值位序

6543210

0001001

商除数1000

00001001010

被除数。初始中间余数为000012。

-01000

00010

差值<0:商位6为0;中间余数=中间余数左移1位║被除数位5

-01000

00100

差值<0:商位5为0;中间余数=中间余数左移1位║被除数位4

-01000

01001

差值<0:商位4为0;中间余数=中间余数左移1位║被除数位3

-01000

00010

差值≥0:商位3为1;中间余数=差值左移1位║被除数位2

-01000

00101

差值<0:商位2为0;中间余数=中间余数左移1位║被除数位1

-01000

01010

差值<0:商位1为0;中间余数=中间余数左移1位║被除数位0

-01000

00010

差值≥0:商位0为1;计算到最后一位,停止计算;中间余数=差值除法:符号数3/3符号数除法的基本思路1)获得被除数、除数的绝对值2)执行两者绝对值的除法,得到商和余数3)商的符号:由被除数与除数的符号决定,即同号为正、异号为负4)余数的符号:与被除数的符号相同计算机指令计算机组成与实现目录程序执行的基本原理指令格式及其操作数指令集与汇编程序指令编码汇编与反汇编实战从C代码到可执行文件运行1/6大体涉及5个环节:编译、汇编、存储、加载、运行95从C代码到可执行文件运行2/6CPU不能直接执行C源代码,必须利用编译器将C源代码转换为对应的汇编程序C源代码:其描述方式是适合人书写和阅读的汇编代码:用更加接近CPU可以理解和执行的语言编写的程序96编译相关内容属于编译器技术范畴从C代码到可执行文件运行3/6CPU也不能直接执行汇编代码,必须利用汇编器将汇编代码转换为对应的二进制机器码汇编程序:每行对应一条机器指令机器指令:由一组二进制01串组成,是CPU可以理解与执行的97汇编相关内容属于编译器技术范畴从C代码到可执行文件运行4/6C程序被编译为一组CPU指令后,就以文件方式被存储在硬盘中可执行文件是由CPU指令及相关数据组成的由于CPU指令及相关数据以二进制方式存储,因此可执行文件是不适合人阅读的98文件相关内容属于操作系统技术范畴从C代码到可执行文件运行5/6可执行文件要被加载到主存后才能被执行。指令部分和数据部分会被分别加载到主存中的不同区域代码段:这部分主存区域存储的是CPU指令数据段:这部分主存区域存储的是数据99将可执行文件加载到内存属于操作系统技术范畴代码段、数据段等内容也与编译器技术相关从C代码到可执行文件运行6/6CPU执行程序的基本过程就是不断的读取、分析和执行指令读取指令:CPU从主存的代码段中读取一条指令到内部分析指令:CPU分析指令的功能执行指令:CPU控制内部的功能部件执行相应的操作CPU有读、写主存的指令负责在CPU与主存间传输数据100机器语言1/2指令:CPU理解的“单词”指令集:CPU理解的全部“单词”集合Q1:为什么有时不同的计算机使用相同的指令集?例如:iPhone与iPad使用相同的指令集(都是ARM)Q2:为什么有时不同的计算机使用不同的指令集?例如:iPhone与Macbook使用不同的指令集(前者是ARM,后者是X86)101ISA~InstructionSetArchitecture机器语言2/2如果只有一种ISA可以很好的利用公共软件,如编译器、操作系统等如果有多种ISA针对不同的应用可以选择更适用的ISA不同的指令集有不同的设计平衡性考虑功能、性能、存储器、功耗、复杂度。。。会激发竞争和创新102为什么要学习汇编?在更深层次理解计算机行为学习如何写更紧凑和有效的代码某些情况下,手工编码的优化水平比编译器高对于资源紧张的应用,可能只适合手工汇编例如:分布式传感器应用为了降低功耗和芯片大小,甚至没有OS和编译器103RISCComplexInstructionSetComputing(CISC)指令集设计早期阶段倾向于:应用有什么操作模式,就增加对应的指令。这导致了CISCReducedInstructionSetComputing(RISC)另一种对立的设计哲学自然界存在2-8定律。程序也类似,为什么?RISC的指导思想1)加速大概率事件2)简单意味着更容易设计、电路频率更高3)简单功能由硬件实现;复杂功能(由大量小功能组成)交给软件处理隐含的物理背景:复杂的功能也是小概率的104RISC设计原则指导思想:CPU越简单,性能越高设计目标:减少指令数量,去除复杂指令(等效于降低复杂度)RISC的基本策略指令定长:所有指令都占用32位(1个字)

降低了从存储器中读取指令的复杂度简化指令寻址模式:以基地址+偏移为主

降低了从主存中读取操作数的复杂度ISA的指令不仅数量少,而且简单

降低了指令执行的复杂度只有load与store两类指令能够访存

例如,不允许寄存器+存储器或存储器+存储器把复杂留给编译编译器将高层语言复杂语句转换为若干简单的汇编指令105主流的ISAIntel80x86PC、服务器、笔记本ARM(AdvancedRISCMachine)手机、平板出货量最大的RISC:是x86的20倍PowerPCIBM/Motorola/Apple联盟的产物航空电子设备:飞控、机载雷达等网络设备:交换机、路由器引擎控制器106为什么选择MIPS真实:工业界实际使用的CPU是设计师在实践中多次迭代、反复权衡的产物学习标准就是在学习设计师的思考方法与过程简明:类别有限、结构简单、层次清晰,易于实现MIPS是RISC的典型代表生态:软件开发环境丰富,易于学习和实践多种模拟器、C编译等107目录程序执行的基本原理指令格式及其操作数指令基本格式指令集与汇编程序指令编码汇编与反汇编实战MIPS指令1/2指令的一般性语法格式:1个操作符,3个操作数opdst,src1,src2op:指令的基本功能dst:保存结果的寄存器(“destination”)src1:第1个操作数(“source1”)src2:第2个操作数(“source2”)固定的格式:

有助于人的记忆和书写;

有助于使得硬件简单硬件越简单,延迟就越小,时钟频率就越高109

MIPS指令2/2每条指令只有1个操作每行写一条指令很多指令与C运算高度相关如:=,+,-,*,/,&,|一行C代码会对应多条指令110目录程序执行的基本原理指令格式及其操作数第1类操作数:寄存器指令集与汇编程序指令编码汇编与反汇编实战计算机硬件的操作数C程序:变量的数量仅仅受限于内存容量程序员通常认为内存“无限大”,故声明变量时一般不考虑变量的数量ISA:有一组数量有限且固定的操作数,称之为寄存器寄存器被内置在CPU内部寄存器的优势:速度极快(工作速度小于1ns)寄存器的劣势:数量少112寄存器1/2MIPS寄存器数量:32每个寄存器的宽度都是32位寄存器没有类型(即无正负)根据指令的功能来解读寄存器值的正负即32位编码是按无符号还是符号解读,取决于指令寄存器数量的是设计均衡的体现均衡的要素:性能与可用性数量少:结构简单,速度快,能够存储在CPU内的数据少数量多:结构复杂,速度慢,能够存储在CPU内的数据多113预留思考题MIPS寄存器为什么不是16个,也不是64个?!寄存器2/2寄存器编号:0~31寄存器表示:$x(x为0~31),即$0~$31寄存器名字程序员变量寄存器$s0-$s7←→$16-$23临时变量寄存器$t0-$t7←→$8-$15$t8-$t9←→$8-$15114注意使用寄存器名字会让代码可读性更好编号名称用途0$zero常量01$at汇编器保留2-3$v0~$v1返回值4-7$a0~$a4参数8-15$t0-$t7临时变量16-23$s0-$s7程序变量24-25$t8-$t9临时变量26-27$k0-$k1操作系统临时变量28$gp全局指针29$sp栈指针30$fp帧框架指针31$ra返回地址本课程要学习的寄存器MIPS指令示例1/2假设:变量a,b和c分别存储在$s1,$s2和$s3a←→$s1,b←→$s2,c←→$s3整数加法指令C:

a=b+cMIPS:

add$s1,$s2,$s3整数减法指令C:

a=b-cMIPS:

sub$s1,$s2,$s3115MIPS指令示例2/2假设:x←→$s0,a←→$s1,b←→$s2,c←→$s3,d←→$s4C语句:x=(a+b)-(c+d);MIPS汇编程序片段$t1,$t2:临时变量寄存器注释:提高可读性;帮助追踪寄存器/变量的分配与使用#:是注释语句的开始1161add$t1,$s3,$s4#t1=c+d2add$t2,$s1,$s2#t2=a+b3sub$s0,$t2,$t1#a=(a+b)-(c+d)执行序MIPS汇编程序注释

0号寄存器由于0在程序中的频度极高,为此MIPS设置了0号寄存器表示方法:$0或$zero值恒为0:读出的值恒为0;写入的值被丢弃指令的dst为$0:指令使用本身无错,但执行时没有实际意义示例117假设:a←→$s1,b←→$s2,c←→$s3,d←→$s41add$s3,$0,$0#c=02add$s1,$s2,$0#a=b目录程序执行的基本原理指令格式及其操作数第2类操作数:立即数指令集与汇编程序指令编码汇编与反汇编实战立即数指令中出现的常量数值被称为立即数语法格式opdst,src,imm立即数替代了第2个操作数示例119假设:a←→$s1,b←→$s2,c←→$s3,d←→$s41addi$s1,$s2,5#a=b+52addi$s3,$s3,1#c++问题为什么MIPS不设置subi指令?*subi:减立即数immediate~立即数目录程序执行的基本原理指令格式及其操作数第3类操作数:主存单元指令集与汇编程序指令编码汇编与反汇编实战主存单元仅使用寄存器的挑战:有限的寄存器无法满足无限的变量需求1)变量的个数无限:理论上,程序员可以定义任意多变量2)变量的容量巨大:如数组这样的大型数据结构解决问题途径:主存绝大多数变量(包括数据)存储在主存中需要使用时再将其加载至寄存器中CPU访问主存,需要解决问题:1)CPU如何看待主存的?这就是存储视图2)CPU如何定位某个主存单元?这就是寻址方式3)CPU如何访问访问主存单元?121主存的抽象模型1/3主存:可以被抽象为一个数组概念1:主存单元的颗粒度字节:是存储器最常用的存储单位概念2:地址主存单元的编号就是地址,等同于数组下标对于4GB主存4GB主存共有4G个字节,即有4G个存储单元4G个存储单元对应的地址位数为32位232=4G地址范围:0000_0000h至FFFF_FFFFhFFFF_FFFFFFFF_FFFEFFFF_FFFDFFFF_FFFCABFFFF_FFFBCDFFFF_FFFA主存容量EFFFFF_FFF94GB01FFFF_FFF8~0000_00030000_00020000_00010000_0000字节地址bit~比特,byte~字节,word~字主存的抽象模型2/3概念3:CPU字长CPU字长一般是指CPU一条指令可以计算的数据的宽度例如MIPS的字长是32位,即单条MIPS指令可以计算的数据为32位注意:CPU字长只是限制了单条指令的计算能力,但是完全可以通过组合多条指令及必要的存储单元来计算更大位数的数据示例:大数乘法提示:用一个数组的每个单元来存储每一位数字;然后组织循环,利用最基本的数学运算知识独立计算每位结果及其进位158703333333333333333X26666666666666666用16个单元(16字节)的数组计算乘法**循环16次,每次仅计算3*2=6主存的抽象模型3/3

FFFF_FFFCFFFF_FFF8ABCDEF01~0000_00080000_00040000_0000字节3字节2字节1字节0字内偏移:0字内偏移:1字内偏移:2字内偏移:30000_000B0000_000A0000_00090000_0008字地址地址的表示方式

FFFF_FFFFFFFF_FFFEFFFF_FFFDFFFF_FFFCB2ABFFFF_FFFBCDFFFF_FFFAPEFFFFF_FFF9B101FFFF_FFF8~0000_00030000_00020000_00010000_0000字节地址baseaddress~基地址,offset~偏移“基地址+偏移”的优点一致:与数据结构的访问方式高度一致示例1:数组单元A[5]的地址=数组首地址+4×5示例2:以B.z为例,可以推算出z与B的起始地址的距离为了便于分配存储器,编译器会把x、y、z连续存储统一:可以用某个固定base与不同的offset计算得到任意地址灵活:不同的{base,offset}组合可以对应同一个地址,为软件编程带来很大的灵活性示例:可以从数组起始向末尾遍历(base为数组第0单元地址,offset为正),也可以从数组末尾向起始遍历(base为数组最后单元地址,offset为负)intA[100];struct{

intx;shorty;charz;}B;数据传输指令1/2语法格式opreg,off(base)reg:写入或读出的寄存器base:存储基地址的寄存器由于存储的是地址信息,因此base的值被作为无符号数off:以字节为单位的偏移量off是立即数,可正可负读写的存储单元的实际地址=base+off127offset~偏移数据传输指令2/2加载字:lw(LoadWord)读取地址为base+off的主存单元,然后写入reg存储字:sw(StoreWord)读取reg,然后写入地址为base+off的存储单元示例128假设:A[]←→$s3,a←→$s01lw$t0,12($s3)#$t0=A[3]2add$t0,$s2,$t0#$t0=A[3]+a3sw$t0,40($s3)#A[10]=A[3]+a注意lw/sw读写对象是字,因此偏移量必须是4的倍数intA[100];A[10]=A[3]+a;主存单元使用的限制MIPS不支持主存单元参与运算例如以下用法均是错误用法add$t0,$s1,0($s2)sub$t0,0($s2),12MIPS支持的运算寄存器—寄存器:寄存器与寄存器运算,结果写入寄存器寄存器—立即数:寄存器与立即数运算,结果写入寄存器129注意在MIPS中,主存单元仅能与寄存器进行数据交换。之所以这样设计,是为了便于设计流水线CPU。寄存器vs.主存变量比寄存器多怎么办?把最常用的变量保存在寄存器中其他不常用的变量保存在主存中为什么不把变量都放在存储器中?寄存器比存储器快100~500倍130目录程序执行的基本原理指令格式及其操作数指令集与汇编程序汇编程序基本结构指令编码汇编与反汇编实战代码段与数据段程序由指令和数据构成,分别存储在主存中的不同区域所有程序都有指令;绝大多数程序都会包含数据分离存储是为了防止两者之间相互干扰代码段:存放程序中指令序列的一块内存区域数据段:存储程序中全局变量的一块内存区域代码段数据段空间大小有程序中的指令部分决定程序运行前就已经确定由程序中的全局变量部分决定程序运行前就已经确定读写权限只读*(ReadOnly)可读可写(Read/Write汇编关键字.text.data*某些CPU允许代码段为可写,即允许程序自修改(self-modifyingcode)汇编程序的基本结构关键字“.text”和“.data”用来区分程序的数据部分和代码部分“.text”与“.data”本质上是代表基地址的标号CPU的内存布局是确定的,即代码段、数据段在主存中的基地址是确定的根据数据段和代码段的基地址,汇编器能推算.data后面的各全局变量以及.text后面的各指令对应的相对偏移,也自然可以计算相应的绝对地址示例:ori指令的偏移量是41234567.data

str:.asciiz"1234+4321"

.text

lui$s7,0x1001

ori$s7,$s7,0x0数据段定义一个全局变量

正文段目录程序执行的基本原理指令格式及其操作数指令集与汇编程序全局变量声明指令编码汇

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论