赞
踩
组成:程序计数器(PC)、指令寄存器(IR)、寄存器堆(RF)、算术逻辑单元(ALU)、控制器(Controller)。
1.程序计数器(PC)
PC是一个32位寄存器,其存储的32位值就是指令在主存中的地址(指令存储在主存中)
从程序员角度看,PC是C程序中的一个指针变量
2.指令寄存器(IR)
IR是一个32位寄存器,它保存着CPU当前正在执行的指令
3.寄存器堆(RF)
由于主存的性能通常比处理器慢很多(至少一个数量级),现代CPU内部会设置几十个性能远高于主存的寄存器。MIPS定义了32个32位通用寄存器,编号为0-31.一般将其称之为寄存器堆。
REGISTER | NAME | USAGE |
$0 | $zero | 常量0(constant value 0) |
$1 | $at | 保留给汇编器(Reserved for assembler) |
$2-$3 | $v0-$v1 | 函数调用返回值(values for results and expression evaluation) |
$4-$7 | $a0-$a3 | 函数调用参数(arguments) |
$8-$15 | $t0-$t7 | 暂时的(或随便用的) |
$16-$23 | $s0-$s7 | 保存的(或如果用,需要SAVE/RESTORE的)(saved) |
$24-$25 | $t8-$t9 | 暂时的(或随便用的) |
$28 | $gp | 全局指针(Global Pointer) |
$29 | $sp | 堆栈指针(Stack Pointer) |
$30 | $fp | 帧指针(Frame Pointer) |
$31 | $ra | 返回地址(return address) |
4.算数逻辑单元(ALU)
完成算数运算和逻辑运算
算术运算:加减乘除等
逻辑运算:与、或、非、异或等
5.控制器
当指令被读入指令寄存器(IR)后,控制器就对指令进行分析,并通过控制PC、RF、ALU来完成指令的进行。
Loop_Start:
lbu $9,0($17)
sb $9,0($18)
addiu $17,$17,1
addiu $18,$18,1
beq $9,$0,Loop_End
j Loop_Start
Loop_End
(1)
PC初始值定为00400000,为lbu操作
(从17号寄存器位基地址且偏移为0的主存单元读取一个字节,保存在9号寄存器的最低字节)
对读入的这一个字节存入$9的最低字节,把高3字节都清除为0
lbu指令为顺序执行指令,所以控制器在指令执行后将PC+4写入PC,CPU读取第二条sb指令
(2)
sb将保存在$9中的字符写入$18(偏移为0)
PC+4写入PC
(3)
beq比较$9和$0,如果相等,则将PC调整为Loop_End对应的地址,否则PC写入PC+4
(4)
j语句可以无条件修改PC的值,直接将PC修改为Loop_Start标号后的第一条指令,即lbu指令,进行下一次循环。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。