计算机的简单模型:
计算机的简单组成模型:
计算机的组成有三大部分:处理器,输入输出,存储器。处理器从存储器中获取指令,然后按照指令执行一定的操作,输入/输出用来提供运算数据、显示运算结果。
存储器中存储的是指令,指令就是一条运算命令,处理器按照命令执行即可。处理器内部具有译码功能,用来解释接收到的0,1编码表示的运算类型。
计算机的简单使用模型
使用编译程序将高级语言编写的程序翻译成汇编指令,然后使用汇编程序将其翻译成01编码
架构与指令集
指令集架构(ISA),ISA同来描述编程时用到的抽象机器,从软件角度,ISA包括一套指令集和一些寄存器。与ISA对应的概念是微架构,后者是前者的一个实现,比如英特尔很多处理器都是遵循x86的ISA,但每一款处理器都有自己的微架构,ISA是设计规范,微架构是具体实现,同样的ISA,不同的微架构,不同的性能。
CISC与RISC区别
CISC是复杂指令计算机,RISC是精简指令计算机
CISC每条指令对应的0,1编码长度不一,RISC每条指令对应的0,1编码长度固定。
几种主要ISA
x86,ARM,SPARC,POWER,MIPS,除了x86是CISC ISA外,其他都是RISC ISA。
MIPS32指令集架构简介
数据类型
- 位(b):长度1bit
- 字节(byte):长度8bit
- 半字(half word):长度16bit
- 字(word):长度32bit
- 双字(double word):长度64bit
此外还有32位单精度浮点数,64位双精度浮点数
寄存器
寄存器的存取可以在一个时钟周期内完成,简化了寻址方式。MIPS32中除了加载/存储指令外,都是使用寄存器或立即数作为操作数的,MIPS32中寄存器分为2类:通用寄存器和特殊寄存器。
通用寄存器
MIPS32架构定义了32个寄存器,在硬件上没有强制指定寄存器的使用规则,但是在实际使用中,这些寄存器的用法都遵循一系列规定。
约定用法:
特殊寄存器
MIPS32中架构中定义的特殊寄存器有3个:
- PC(程序计数器)
- HI(乘除结果高位寄存器)
- LO(乘除结果低位寄存器)
乘法运算时,HI和LO保存乘法运算结果,HI存储高32位,LO存储低32位;
除法运算时,HI和LO保存除法运算的结果,其中HI存储余数,LO存储商。
字节次序
数据在存储器中,按照字节存放。处理器是按照字节访问存储器汇总的指令和数据。
想要读出一个字,有两种结果
- {men[n],men[n+1],men[n+2],men[n+3]} 大端模式MSB
- {men[n+3],men[n+2],men[n+1],men[n]} 小端模式LSB
大端模式下,数据高位保存在存储器低位中,数据的低位保存在存储器高位中。本书中,处理器采用大端模式。
指令格式
MIPS32架构中所有指令都是32位。有3种指令格式。
op是指令码,func是功能码
(1)R类型:由op,func结合指定,rs,rt是源寄存器编号,rd是目的寄存器编号,如目的寄存器是$3,对应rd编号00011。MIPS32架构中只有32个通用寄存器,使用5位编码就可以全部表示。因此,rs,rt,rd宽度都是5位。sa只在移位指令中使用,用来指定移位位数。
(2)I类型:具体操作由op指定,指令低16位是立即数,运算时要扩展到32位,然后作为其中一个源操作数参与运算。
(3)J类型:具体操作由op指定,一般是跳转指令,低26位是字地址,用于跳转的目的地址。
指令集
MIPS32架构中定义的指令可以分为以下几类:
逻辑操作指令:
8条指令:and,andi,or,ori,xor,xori,nor,lui。实现逻辑与,或,异或,或非等运算。
移位操作指令:
6条指令:sll,sllv,sra,srav,srl,srlv。实现逻辑左移,右移,算术右移等运算。
移动操作指令:
6条指令:movn,movz,mfhi,mthi,mflo,mtlo。用于通用寄存器之间数据移动,以及通用寄存器与HI,LO寄存器之间的数据移动。
算术操作指令:
21条指令ad,addi,addiu,addu,sub,subu,clo,clz,slt,slti,slyiu,sltu,mhl,mult,multu,madd,maddu,msub,msubu,div,divu。实现加法,减法,比较,乘法,乘累加,除法等运算。
转移指令:
14条指令:jr,jalr,j,jal,b,bal,beq,bgez,bgezal,bgtz,blez,bltz,bltzal,bne。其中有无条件转移,条件转移,用于程序转移到另一个地方执行。
加载存储指令:
14条指令:lb,lbu,lh,lhu,ll,lw,lwl,lwr,sb,sc,sh,sw,swl,swr。l开始的都是加载指令,以s开始的都是存储指令,这些指令用于从存储器中获取数据,或者向存储器中保存数据。
协处理器访问指令:
2条指令:mtc0,mfc0。用于读取协处理器CP0中某个寄存器的值,或将数据保存到协处理器CP0中的某一个寄存器。
异常相关指令:
14条指令,其中有12条自陷指令。包括teq,tge,tgeu,tlt,tltu,tne,teqi,tgei,tgeiu,tlti,tltiu,tnei。
此外有系统调用指令syscall,异常返回指令eret
其余指令:
4条指令:nop,ssnop,sync,pref。nop是空指令,ssnop是一种特殊类型的空指令。sync指令用于保证加载、存储操作的顺序,pref指令用于缓存预取。
寻址方式
MIPS32架构寻址模式有寄存器寻址、立即数寻址、寄存器相对寻址、PC相对寻址4种。
(1):寄存器相对寻址
此种寻址模式是主要加载/存储指令使用,将一个16位的立即数做符号扩展,然后与指定通用寄存器的值的相加,从而得到一个有效地址。
(2):PC相对寻址
此种寻址模式主要是转移指令使用,在转移指令中有一个16位的立即数,将其左移两位并作符号扩展,然后与程序计数寄存器PC的值相加,从而获取有效地址。
协处理器CP0
协处理器一词通常来表示处理器的一个可选部件,负责处理指令集的某个扩展,拥有与处理器相独立的寄存器。MIPS32架构提供最多4个协处理器,分别是CP0,CP1,CP2,CP3。
CP0用作系统控制,CP1,CP3用于浮点处理单元,CP2被保留用于特定实现。除CP0外的协处理器都是可选的。
异常
处理器运行中,会从存储器汇中依次取出指令,然后执行,但一些事件会打断正常的程序执行流程,这些事情中有中断,陷阱,系统调用等,统称为异常。
异常发生后,处理器会转移到一个事先定义好的地址,该地址有异常处理流程,在其中进行异常处理。该地址被称为异常处理例程入口地址
异常处理完成后,使用异常返回指令eret,返回到异常发生前的状态继续执行。
累了。。。