基于MIPS的计算机指令学习(1)——CPU组成

CPU

组成:程序计数器(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指令,进行下一次循环。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值