计算机组成与结构概述.doc
《计算机组成与结构概述.doc》由会员分享,可在线阅读,更多相关《计算机组成与结构概述.doc(15页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、如有侵权,请联系网站删除,仅供学习与交流计算机组成与结构概述【精品文档】第 15 页计算机的基本概念快速的向用户返回计算结果是编写一个成功的软件中的关键部分.操作系统是用户程序和硬件的接口,它提供许多服务和管理功能.其中,最重要的功能有:1)处理基本输入输出操作;2)分配存储空间和内存;3)为多个程序同时使用计算机提供支持.系统软件提供公共服务,包括操作系统,编译器,汇编器;编译器:将高级语言语句翻译成汇编语言语句的程序.任何计算机的底层硬件都执行着同样的基本功能:输入数据,输出数据,处理数据和存储数据.计算机的五个经典组成部分是输入,输出,存储器,数据通路以及控制器,后两个我们有时合称为处理
2、器.有些设备即向计算机提供输入也接受输出,例如:网络和硬盘.光电式鼠标取代机电式鼠标再次例证了一个普遍现象:电子设备成本的下降和可靠性的提高促使电子方案取代旧的机电方案.动态随机存储器(DRAM):集成电路式存储器,可以随机访问任何单元;高速缓存(cache:一块小容量高速存储器,作为大容量存储器的缓冲区.高速缓存使用了不同的内存技术静态随机存储器(SRAM).SRAM更快但集成度低,因此也就比DRAM更贵些.内存(memory):正在运行着的程序以及其所需的数据所驻留的存储介质;易失性存储器:持续供电才能保存数据的存储设备,如DRAM.内存是易失性存储器.摩尔定律:晶体管容量没1824个月就
3、会翻一倍.硬件设计中的四个基本准则:1)简单源自规整;2)越少越快;3)加快执行常用操作;4)好的设计需要合适的折衷.当前的计算机构造基于两个关键性原则:1)指令以数据形式表示;2)和数据一样,程序存储在存储器中,并且可以读写.CPU与指令集(Instruction Set)1. 什么是CPU ?电脑的核心!CPU (Central Process Unit)中央处理器2. CPU的主要工作是什么?执行一串指令.3. 指令:CPU能执行的最基本的操作单元譬如说:两个整数相加、相减4. 不同的CPU=指令集不同。5. 某个特定CPU所实现的指令集称为指令集结构Instruction Set Ar
4、chitecture (ISA).a) 例: Intel 80x86 (Pentium 4), IBM/Motorola PowerPC (Macintosh), ARM, Intel IA64RISC思想(精减指令集)指令集更小,更简单, 从而能有效构建更快硬件.由软件通过组合简单运算来完成复杂运算.为什么MIPS,而不是 Intel的X86?1.MIPS简单,漂亮。不希望大家被一些细节所困扰(只见树木,不见森林);2.MIPS广泛应用于嵌入式系统,x86很少应用嵌入式系统, 而嵌入式计算机比PCs机多很多;3.中国芯?龙芯I代, II代(95%MIPS),获得MIPS授权.*寄存器regi
5、sters与高级语言不同(如C或Java), 汇编语言不能使用变量为什么呢? 让硬件简单一些汇编语言的操作数是寄存器registers寄存器位于计算机硬件的某个特殊位置,数量有限操作只能在寄存器上进行!MIPS寄存器数量:32个为什么? 越小(少?)越快Smaller is faster优点: 由于寄存器在硬件中, 其访问速度非常快(10亿分之一秒1 billionth of a second)缺点: 由于寄存器在硬件中, 其数量有上限32个变量多于32个怎么办?放在核心硬件外面,用的时候拿进来效率问题如果不是太多:仔细编写代码来高效使用寄存器A=3 B=4 C=A+B D=A-B E=C*D
6、 F=C/D 使用6个A=3 B=4 C=A+B D=A-B A=C*D B=C/D 使用4个A=3 B=4 C=A+B A=C-B A=C-B B=C/A A=C/A 使用3个每个MIPS寄存器是 32位宽在MIPS中我们将32位组织在一起,称为字word寄存器编号:0 到 31每个寄存器可通过编号和名字来指定通过编号指定:$0, $1, $2, $30, $31C语言(其他大多数高级语言也一样)中,变量首先要声明并给定一个类型例如: int fahr, celsius; char a, b, c, d, e;每个变量只能表示其所声明的类型的值 (不能混用及比较int型和char型变量).在
7、汇编语言中, 寄存器没有类型; 运算(符)决定如何处理寄存器,即运算(符)确定寄存器内容的数据类型.*例1: a = b + c + d - e;(注意理解)add $t0, $s1, $s2 # temp = b + cadd $t0, $t0, $s3 # temp = temp + dsub $s0, $t0, $s4 # a = temp-e例2: f = (g + h) - (i + j);add $t0,$s1,$s2# temp = g + hadd $t1,$s3,$s4# temp = i + jsub $s0,$t0,$t1# f=(g+h)-(i+j)MIPS汇编语言中:
8、寄存器=变量一行一条指令 (简单操作)C 变量: $s0 - $s7,对应寄存器1623;临时变量(temporary): $t0 - $t7,对应寄存器815;Zero: $zero立即数:数值常数代码中经常出现,因此有专门的指令.加立即数指令(Add Immediate):addi $s0,$s1,10 (in MIPS)f = g + 10 (in C)这里MIPS寄存器 $s0,$s1对应于C变量f,g 语法和add指令类似区别:最后一个参数是数,而不是寄存器 register*没有减立即数C变量映射到寄存器,但寄存器有限超过32个元素的数组怎么办?一般把这种数据结构放在内存memor
9、y中MIPS算术指令仅能对寄存器操作,不能直接操作内存.数据传送指令 在寄存器和内存之间传送数据:内存到寄存器;寄存器到内存*指定内存地址:寄存器:包含指向内存的指针数值偏移量offset (以字节为单位)内存地址为这两个值的和*例:8($t0)内存地址为:$t0的值+8(字节)Load 指令语法(Instruction Syntax):1 2,3(4) 1是指令名字(operation name)2是接收值的寄存器(register that will receive value)3数值偏移量(单位:字节)numerical offset in bytes4包含指向内存指针的寄存器(regi
10、ster containing pointer to memory)MIPS 指令名字(Instruction Name):lw (意即Load Word, 故每次装入32位即一个字) 例:lw $t0,12($s0)该指令取出$s0中的指针, 加上12, 然后从计算的和所指的位置的内存中取得值,放到$t0中.$s0 称为 基寄存器base register12 称为 偏移offset偏移通常用于访问结构体或数组的元素: 基寄存器指向结构体或数组的起始位置(注意偏移量必须是常数 (即在编译时已知).*sw (即Store Word, 每次存储32位或一个字)例:sw $t0,12($s0)该指
11、令将$s0中的指针加上12,得到内存地址,然后把寄存器$t0中的值存储到该内存地址中*lw和sw一个是取出,一个是存储,注意区分重要概念: 寄存器可以保存任意32-位数值. 该值可以是 对于 add $t2,$t1,$t0$t0和$t1中一般为数值而对于lw $t2,0($t0) $t0中一般为指针不要混用!内存中的每个字都有地址, 这和数组中的下标类似早年的计算机对内存的编号方法类似于 C 对数组的编号:Memory0, Memory1, Memory2, 计算机既要访问 8-位 字节 也要访问字 (4 bytes/word)现代计算机按字节编址, (即,“字节寻址”) 因此相临两个32-位
12、(4 byte)字的地址差别为 4. Memory0, Memory4, Memory8, *lw 如何确定C变量A5的偏移量?A5 4x5=20 : byte v. word 手工编译以下语句:g = h + A5; g: $s1, h: $s2, $s3: A 的基地址首先将数据从内存传到寄存器:lw$t0,20($s3) # $t0 gets A5将20与$s3相加来选定择A5, 放到 $t0中然后将结果和h相加,并放到g中add $s1,$s2,$t0 # $s1 = h+A5*缺陷:经常会忘记,对于计算机的操作单位“字”序列,但在机器编址是字节。故两个相临的字之间地址不是差一个。很多
13、汇编程序员常犯的错误是,取下一个地址时,简单加1。另外, 谨记对于 lw 和 sw, 基址和偏移量之和必须是4的倍数 (即需要 字对齐alignment)注:Aligned:对齐的.法则:寄存器 PK 内存如果变量数比寄存器个数还多,怎么办?1.编译器试图把最常用的变量放到寄存器中2.不是很常用的变量放到内存中: spilling为什么不把所有变量都放到内存中呢?1.Smaller is faster:寄存器比内存快2.寄存器能力更强: MIPS一个算术指令就可以完成,读两个数,进行运算,并写结果MIPS一个数据传送指令只能读或写一个操作数,而无运算C (MIPS也一样) 提供了语句标号Lab
14、els 来支持 “goto” 跳转到代码所在处.小结: 1.内存可访问到字节byte, 但lw,sw每次访问一个字.2.lw和sw所使用的指针就是内存地址, 可以通过使用偏移量offset来进行增减.3.分支让我们能在运行时( run-time )做决定,而不是在编译时(compile-time)进行.4.MIPS决策的条件语句有: beq(=) and bne(!=).溢出: 由于计算机精度的限制,而导致的算术运算错误.add (add), 检测溢出add unsigned (addu), 不检测溢出左移Shift Left: sll $s1,$s2,2 #s1=s22将$s2的值左移2位,
15、结果放到$s1中,在右边添0; C语言的 *左移(sll),右移(srl).jal 存储返回地址到寄存器中($ra),注:$ra的寄存器号为31.jr $ra 跳回该地址处MIPS指令小结 语义1.逻辑运算:1)与 and $s1,$s2,$s3 $s1=$s2&$s3 2)或 or $s1,$s2,$s3 $s1=$s2|$s3 3)或非nor $s1,$s2,$s3 $s1=($s2|$s3) 4)立即数与andi $s1,$s2,100 $s1=$s2&100 5)立即数或ori $s1,$s2,100 $s1=$s2|100 6)逻辑左移sll $s1,$s2,10 $s1=$s210
16、 8) sra (算术右移): 右移空出来的位进行符号扩展, 来做2的幂的除法.2.条件转移: 1)相等转移 beq $s1,$s2,L 如果$s1等于$s2,跳转L处 2)不等转移 bne $s1,$s2,L 如果$s1不等于$s2,跳转L处 3)小于比较 slt $s1,$s2,$s3 如果$s2小于$s3,$s1=1;否则$s1=0; 4)小于比较 slti $s1,$s2,100 如果$s2小于100,$1=1;否则$s1=0立即数3.无条件跳转: 1)跳转 j L 跳转到地址L(转移到目标地址0 2)寄存器跳转 jr $ra 跳转到$ra (用于过程返回) 3)跳转并链接 jal L
17、 $ra=PC+4;跳至L(用于过程调用)4.其他: 1)立即数高位取: lui 2)传送:move 3)乘:mult 4)立即数乘:multi 5)立即数取:li 6)小于则分支:blt 7)小于等于则分支:ble 8)大于则分支:bgt 9)大于等于则分支:bge *上述中除了(1)中的立即数取高位,其他的都是伪MIPS指令; 伪指令:不能直接转成机器语言,而是要先转成其它MIPS指令的MIPS指令; 解析伪指令时,汇编器需要使用附加寄存器.1.任何数与0“与”产生 0 ,与1“与”不变. 这可以用来产生掩码mask.2.类似的注意到,任何数与1“或”,结果为1,而与0做“或”运算,结果为
18、原数.这可以用于强制字串的某些位为1.寄存器约定: 1.$0不可改变,始终为0;$s0-$s7和$sp如果改变必须恢复, 所有存储寄存器以S开头.2. $ra,$v0-$v1,$a0-$a3,$t0-$t9是临时寄存器,可以改变,且不需要恢复.谨记: Caller/callee 仅需要保存其要使用的临时/存储寄存器,而不是所有的寄存器.由于所有的指令和数据都存储在内存中,所有的东西都有内存地址:指令, 数据指令集随时间的演化,产生“向后兼容”指令格式:I型:用于有立即数的指令, lw和sw (偏移量也可看成立即数), 分支语句(beq和 bne), (但不用于移位指令;)J型: 用于j和jal
19、 R型: 用于所有其他的指令R格式指令每个“字段”的位数为: 6 + 5 + 5 + 5 + 5 + 6 = 32为了好记,每个字段名字如下:在这个幻灯片和书中, 每个字段看成5位或者6位无符号数, 而不是作为32位整数的一部分.每个寄存器字段正好是5位, 故可以指定0-31间的任意正整数. 每个这样的字段可以指定 32个寄存器中的一个.Opcode,即op,指令的基本操作,通常称为操作码, 对所有R格式指令,此数为0.rs:第一个源操作寄存器;rt: 第一个源操作寄存器;rd:存放操作结果的目的操作数寄存器;shamt:位移量,除了移位指令外,该字段设置为0.funct:函数, 和opcod
20、e一起, 共同指定指令的确切含义注:reg表示031之间的一个寄存器号I格式指令(用于有立即数的指令)定义如下的位数的 “字段” : 6 + 5 + 5 + 16 = 32 bitsopcode: 与前面的相同,只是由于没有funct字段, opcode独立指定指令的I格式rs: 指定寄存器操作数 (如果有的话)rt: 指定保存计算结果的寄存器(这也是为什么称为目标寄存器 “rt”的原因),或者对于一些指令指定其他操作数.opcode 指定beq和bners和rt指定要比较的寄存器立即数指定什么呢?立即数Immediate仅有16位PC (Program Counter) 存有当前要执行指令的
21、字节地址;指向内存的32位指针因此immediate无法指定整个跳转的地址J格式指令对于分支, 可以假定跳转到不太远的地上, 因此可以指定PC的变化.对于一般的跳转 (j和jal), 我们可能需要跳转到内存中的任意地址.理想的情况, 指定跳转到32位内存地址处.不幸的是, 无法把6位opcode和32位地址,一起放到单个32位字中, 因此需要妥协.保持Opcode字段与R格式和I格式兼容.把其它所有字段合成为一个,形成一个大的目标地址空间.和前面分支跳转一样,将只跳转到字对齐的地址, 因此最后两位总是00 (二进制).因此,可以默认最后二位为00,而不必专门指定.分支使用PC相对寻址, 跳转使
22、用绝对寻址.反汇编很简单,首先需要解码opcode字段. (后面会讲)IEEE 754 浮点数标准 是被广泛接受的用于表示浮点数的标准 (自1997 年以来的桌面计算机和工作站都遵循此标准)浮点数使我们能够:表示既包含整数部分,又包含小数部分的数; 能高效的使用位数.存储非常大和非常小的数的近似值.在浮点数中,除0应该得到 , 而非溢出.浮点数相加不满足结合律!注意exponent中关键在于127和指数的加减.可以根据上表中op项的值来进行反编译.反汇编的一个实例:lui的功能MAL (MIPS Assembly Language): 程序员编写代码所用的指令集; 包括 伪指令TAL (Tru
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 组成 结构 概述
限制150内