资源描述
第三章:计算机组织与体系结第三章:计算机组织与体系结构构 目标目标:本章旨在向学员介绍计算机的结构与编程模型,通过本章的学习,学员应该掌握如下知识:本章旨在向学员介绍计算机的结构与编程模型,通过本章的学习,学员应该掌握如下知识:计算机的存储组织计算机的存储组织 寄存器组寄存器组 数据通路数据通路 编程模型编程模型学时:学时:3.03.0学时学时教学方法:讲授教学方法:讲授ppt+ppt+练习案例分析练习案例分析3.1 3.1 计算机体系结构计算机体系结构CPUCPU内部功能部件内部功能部件ALUALURegister Register FilesFilesPCPCIRIRControl Control UnitUnit处理器内部除了基本的计算单元ALU之外,还包含了:指令寄存器IR-用来存储要执行的指令;程序计数器PC-保存下一条执行指令在内存中的地址;通用寄存器组-存储待处理数据;控制单元-控制ALU的执行。3.1 3.1 计算机体系结构计算机体系结构图 冯诺伊曼体系结构CPUCPUALUALURegister Register FilesFilesPCPCIRIRControl Control UnitUnit程 序数据主存主存冯诺伊曼体系结构,也称普林斯顿体系结构。在这种架构里,程序指令和数据连续存储,这样程序指令和数据不能同时和处理器通信。处理器以及与存储器之间的关系是定义系统特性的关键因素。图 哈佛体系结构CPUCPUALUALURegister Register FilesFilesPCPCIRIRControl Control UnitUnit程序数据数据存储器数据存储器程序存储器程序存储器3.1 3.1 计算机体系结构计算机体系结构 (续续)哈佛体系结构的主要特点是把指令和数据分开进行存储,也就是说有程序存储器和数据存储器两个主要的存储器。很多嵌入式处理器采用这种体系结构,如DSP和8051单片机。处理器内存地址数据读写控制图 CPU与主存典型框图3.2 3.2 存储组织存储组织存储器和处理器就通过三总线(地址、数据、控制总线)的方式进行通信那么处理器是如何访问存储器的?需要知道处理器操作数据的特性处理器内存地址数据读写控制图 CPU与主存典型框图0 xDD0 xCC0 xBB0 xAA0 01 12 23 3图 内存逻辑模型3.2 3.2 存储组织存储组织p 字长与端序的概念字长字长:就是CPU一次能从内存读取的比特数目。从处理器内部角度来看,这与处理器内部数据总线宽度、寄存器位数以及ALU相关。小端序:多字节数据的低位字节放在低地址存储单元中;大端序:高位字节放在低地址存储单元中v 问题:问题:1、在keil环境下使用C语言,若有如下定义:struct data1 int i;char ch;double f;b;则结构变量b占用内存的字节数是多少?2、在keil环境下 int i=0 x1234如何存放?大端还是小端序?图3-6 一个64 Mbytes SDRAM 内存模块3.2 3.2 存储组织存储组织 (续续)p 主存往往是用多个存储模块组合构成的地址译码器M1M2M16图3-7 存储器组织框图数据总线3.2 3.2 存储组织存储组织 (续续)p 由地址译码器给出的片选信号3.3 3.3 处理器单元处理器单元ALUALU图 ALU模型16位二进制数16位二进制数16位二进制数p 被动的执行部件-运算器处理器的计算核心是算术逻辑单元(ALU),ALU能够实现基本的算术运算和逻辑运算,以及存储和控制操作。不同处理器的ALU功能方面有一定的差异,但基本上都是在多位加法器基础上扩充功能,使得ALU能够进行多种基本运算。在这个ALU模型中,除了两个16位二进制数输入和一个16位二进制数输出外,ALU还有其它的输入和输出。其它的输入是控制信号,不同的控制输入确定了ALU当前应该进行的操作,而其它的输出则保存了完成操作的一些状态。控制信号是由处理器内部的控制器部件给出的,也就是说,运算器是在控制器的指挥控制下,来完成指定给它的运算处理功能,运算器只是一个被动的执行部件。3.3.1 寄存器组(Register File)q寄存器 (Register)处理器内部特别快速的存储单元,用来创建和保存ALU操作和其它计算结果。CPU操作读取或改写存储器的数据都是经由寄存器完成q不同的处理器具有不同的寄存器组 -不同之处在于寄存器的数目、寄存器类型和每个寄存器的容量。-不同之处还在于寄存器的用途。通用寄存器可以用于多种目的,可以由程序员分配其功能,而专用寄存器仅限于某些特定的功能。3.3.2 机器指令格式与ALU模型ALU汇编指令:Add R3,R1,R9机器指令:1010 0011 0001 10011 0 1 0图 ALU模型与机器指令p 助记符与操作码、操作数二进制位串形式的机器指令很难理解和记忆,通常会引入助记符,也就是汇编指令。汇编指令与机器指令是一对一的关系。3.3.3 指令执行过程 一条一条指令的执行过程分为取指、译码、执行 读入CPU的机器指令并不是一步执行完的,而是需要分解为更细微的操作(微操作),也就是指令译码。每个微操作按合适的次序驱动电子线路。例如考察指令 Add R3,R1,R9的执行过程,至少在ALU在进行加法操作之前,要把寄存器R9和R1中的数据送入ALU,并在ALU计算完后,将结果存到寄存器R3。3.4 3.4 数据通路数据通路q数据通路,包括寄存器和ALU以及数据传送线路。q处理器内部的数据通路可以有不同的结构,包括单总线、双总线和三总线。3.4.1 单总线的数据通路图 单总线的数据通路通用寄存器组PCPCIRIRMARMARMDRMDRA AB B存储器总线ALUALU由于一条总线在一个时间周期只能处理一次数据移动,ALU计算所需要的两个操作数就需要两个周期来移动,数据移动方面的限制会降低总体性能。3.4.2 双总线的数据通路图 双总线的数据通路通用寄存器组PCPCIRIRMARMARMDRMDRA A存储器总线ALUALU总线1总线23.5 3.5 处理器编程模型处理器编程模型q处理器编程模型-名词 就是处理器内部对汇编程序员可见的通用寄存器,cpu只能通过这些寄存器获得存储器以及IO中的内容进行各种各样的运算处理,形成各种动作。编程模型主要从编程角度对处理器内部结构进行抽象,也就是主要考虑数据的存储,而忽略了数据的移动。q指令集-动词 描述处理器基本功能的指令集合。对于汇编程序员,需要掌握编程模型和指令集。嵌入式软件工程师则至少应该理解编程模型。3.5.1 微控制器编程模型A(Acc)A(Acc)B BR0R0R1R1R2R2R3R3R4R4R5R5R6R6R7R7DPLDPLDPHDPHDPTRDPTR图 8051基本编程模型3.5.2 ARM 编程模型r0r0r1r1r2r2r3r3r4r4r5r5r6r6r7r7r8r8r9r9r10r10r11r11r12r12r13r13r14r14r15 r15(PC)(PC)CPSRCPSR310N Z C V图 ARM编程模型CPSR(SPSR)bits:N(negative),Z(zero),C(carry),V(overflow).3.5.3 寻址方式1.立即数寻址 MOV A,#20;0 x55AMOV A,#20程序存储MOV A,#2020从代码中获得数据 立即寻址指令中的操作码字段后面的地址码部分即是操作数本身,也就是说,数据就包含在指令当中,取出指令也就取出了可以立即使用的操作数(这样的数称为立即数)。由CPU完成的任何操作都涉及到寻址,就是如何获得数据。对操作数寻址的不同方法称为寻址方式。寻址方式的不同在于对操作数地址信息说明的不同。3.5.3 寻址方式(续)2.直接寻址 MOV A,20;图 直接寻址方式指令中给出操作数所在的存储单元的地址。0 x55AMOV A,20程序存储0 x9920 0 x993.寄存器直接寻址 MOV A,R0;图 存储器直接寻址3.5.3 寻址方式(续)在寄存器直接寻址中,操作数是存放在寄存器中的,指令中给出寄存器的名称。0 xAA0 x55R0AMOV A,R00 xAA4、寄存器间接寻址 MOV A,R03.5.3 寻址方式(续)寄存器间接寻址中,操作数的地址存放在寄存器中,指令给出存放操作数地址的寄存器名。间接寻址的优点是使得对数据的存取成为动态的。0 x55AR00 x400 xAA0 x40MOVMOVA,R0A,R00 xAA5.基变址寻址 MOVC A,A+DPTR 3.5.3 寻址方式(续)这种寻址方式以16位的程序计数器PC或数据指针DPTR作为基址寄存器,以8位的累加器A作为变址寄存器。基址寄存器和变址寄存器的内容相加形成16位的地址,该地址即为操作数的地址。0 xCADPTR0 x40000 xAA0 x400CMOVC A,A+DPTR0 xAA将A+DPTR作为地址装载数据3.5.4 指令类型v按操作数数目分类 (1)三地址指令Operation Addr1,Addr2,Addr3;(2)两地址指令Operation Addr1,Addr2;(3)单地址指令Operation Addr1;v按操作功能划分 (1)数据移动指令 使用数据移动指令可以将数据在机器的不同部件中进行移动。(2)算术和逻辑指令 算术和逻辑指令用来对寄存器和存储器内容进行算术和逻辑处理。(3)控制指令 控制指令用来改变指令的执行次序。(4)输入输出指令 输入/输出指令(I/O指令)用来在计算机和外围部件之间传输数据。3.5.4 指令类型(续)3.5.5 堆栈操作与函数调用 堆栈(stack)是函数调用机制的基础,对于程序员来说,这是一个比较重要的概念。从数据结构角度来讲,堆栈具有“先进后出”(LIFO,Last In First Out)的特点。从数据存储的角度来讲,堆栈就是内存的一个连续区域,在函数调用时候通常用来保存程序的返回地址。处理器内部有一个专用寄存器保存着栈顶地址,称为堆栈指针(stack pointer)。堆栈操作只能从栈顶一侧访问数据。处理器支持两种堆栈操作,入栈和出栈。v嵌入式中的堆栈共生长四种情况(在入栈的时候):v前递增(又叫满递增)v前递减(又叫满递减)v后递增(又叫空递增)v后递减(又叫空递减)v“递增”说明堆栈由低地址向高地址生长,所以栈底内存标号低于栈顶内存标号。“递减”则相反。v“前”说明堆栈指针SP先调整后再进行入栈操作。“后”则先入栈,SP后调整。3.5.5 堆栈操作与函数调用3.5.5 堆栈操作与函数调用(续)3EDD堆栈指针SPPUSH RegA;/入栈7F3EDDPUSH RegA堆栈指针SP100099999810021001100099999810021001图 后递增(空递增)增长模式入栈操作Stack RAM地址地址Stack RAM(RegA=7F)(RegA=7F)堆栈压入数据操作只能堆栈顶部进行。在图中,堆栈指针SP总是指向栈顶。下一个压入数据存放的内存单元地址,在“压入”数据后,SP再加1(根据压入数据的字节数目)。这种模式称为“后递增增长模式”。也有另外一种模式,被称为“前递增增长模式”.两种模式中,SP的操作有所不同,一个“先压后增”,另一个“先增后压”。Intel x86处理器是“前递减增长模式”,8051微控制器是“前递增增长模式”RegB=23POP RegB;/出栈RegB=7FPOP RegB图 后递增(空递增)增长模式出栈操作堆栈指针SP7F3EDD10009999981003100210017F3EDD 1000999998100310021001堆栈指针SP3.5.5 堆栈操作与函数调用(续)int func1(void)return 100;void main(void)func1();MOV A,#100RETMOV ACALL 3000300050004999500130013002func1()main()Call func1()700070027000堆栈指针SP4999PC图 堆栈与函数调用-后递增堆栈3.5.5 堆栈操作与函数调用(续)50007002300050007000RegAALURegBRegCSPstack图 简化的计算机系统该计算机系统能执行的指令是:POP RegX -从栈顶“弹出”一个数据,存放到数据寄存 器RegX中。(其中RegX是RegA、RegB和RegC三个数据寄存器中的一个)PUSH RegX -将寄存器RegX中的数据“压入”堆栈中;ADD -RegC=RegA+RegB DEC -RegC=RegB-RegA MULT -RegC=RegA*RegB考虑公式b b2-2-4ac4ac的计算:1.参数 a、b、c和4按什么次序放堆栈中较好?2.用给出的指令写出公式的计算过程。3.添加一条什么指令,能使计算过程 更简单,更有效率?v 练习题:练习题:v 练习题答案:练习题答案:POP RegA;弹出c-RegA POP RegB;弹出a-RegB MULT ;a*c-RegC POP RegA;弹出4-RegA PUSH RegC ;a*c入栈 POP RegB;弹出a*c-RegB MULT ;4ac RegC POP RegA;弹出b-RegA PUSH RegC ;4ac入栈 PUSH RegA ;b入栈 POP RegB;弹出b-RegB MULT ;b*b-RegC POP RegA;弹出4ac-RegA PUSH RegC ;b*b入栈 POP RegB;弹出b*b-RegB DEC ;b*b-4ac 按照b-4-a-c顺序放入堆栈。(计算过程与参数在堆栈中的存放次序是相关的)增加MOV指令。术语Copyright 2008 版权所有版权所有 东软集团东软集团
展开阅读全文