一、处理器体系结构
相关定义
处理器到底是什么:程序员眼中的计算机组织方法
体系结构要素:指令集和操作数的组织方式(内存、寄存器)
指令集就是计算机体系结构开的处方,指定计算机需要的能力。指令集应该对机器语言程序员可见。指令集是区分不同处理器的关键标志。
操作数是参加某种功能操作的数据。
双操作数:利用两个操作数进行工作来产生一个结果。
三操作数:两个源操作数和一个目的操作数。
ALU:算术/逻辑单元,进行ADD、SUB、AND、OR等运算、
寄存器(Register):在处理器内部,靠近ALU,速度极快,成本昂贵。
操作数的可寻址性:内存内容增加->内存地址长度增加->一条指令可能无法存放多个内存地址。
地址线对内存空间的寻址:10根寻1K,20根寻1M,30根寻1G。
可寻址性指的是在内存中可以单独指定的最低精度的操作数。如果是字节寻址,那么单独寻址的最低精度是字节。
数值精度与空间、时间优化的关系:数据变量的数值精度越小,所占用的内存空间就越小。对于精度需求较低的算术/逻辑运算,在处理器和内存之间来回传送数据也会有一定的时间优势。
大端:字的高位在字地址上
小端:字的低位在字地址上
活动记录:栈中与当前执行过程有关的一部分区域。
LC-2200指令集:32位,基于寄存器、小端、固定长度的指令集。有16个通用寄存器和独立的程序计数器。所有地址都是字地址,适用于所有高级语言的功能需求。
基地址+偏移量的寻址模式
ld rdest, offset(rbase)
ld r2, 3(r1)
•语句语义
– rbase内的地址与offset相加,生成新的有效地址
– 取出新的有效地址的内容,放入rdest
• 注释写法
r2←M[(r1) + 3]
函数调用需要处理的问题
保存caller调用者的状态:当调用者调用被调用者时,他自身的某些结果正存储在寄存器中。由于不知道被调用者需要使用哪些寄存器,谨慎的做法是把在过程调用之前先将他们保存起来,在返回时再恢复。将调用点的状态存入栈中,返回时恢复。
参数传递:用处理器的寄存器来实现参数传递。
记住返回地址:JAL rtarget rlink(rtarget用来记录被调用者的起始地址,rlink记录返回地址)J rlink就返回了。
把控制权交给被调用者:在JAL时就把控制权交给了被调用者。
为被调用者的局部变量分配空间:使用栈为局部变量分配空间。
返回值:使用编译器为寄存器的返回值保存。
返回调用点:用J rlink返回调用点。
帧指针引入的目的
函数调用过程中,栈指针的位置可能会发生变化。在栈帧中所有元素的访问都基于栈指针,如果栈指帧的位置发生了变化,则所有元素的访问都会发生变化,最好能够在每个栈中标定一个固定的位置,用来访问其他元素。把这个固定地址存储在寄存器中,就是帧指针。函数调用时,不仅要保存caller的s寄存器组,还要保存caller的帧指针。
LC-2200指令集指令格式
R型指令(Register) add,nand
I型指令(Immediate) addi,lw,sw,beq
J型指令(Jump) jalr
O型指令 halt 中断
二、处理器实现
双端口寄存器(DPRF):地址线6位,数据线32位,控制线1位。
数据通路原理
PC:提供指令的位置
内存:提供指令的内容
IR:暂存取出来的指令
双端口寄存器:提供两路数据
ALU:对数据进行运算
运算结果写入寄存器堆
基于总线的设计
两点之间必须经过导线的联通才能传递信息
导线很昂贵->共享导线
单总线设计:同一时刻只有一个元件能写,但是多个元件可读。
三态缓冲器(驱动