当前位置:   article > 正文

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

lbu指令

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指令,进行下一次循环。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/272159
推荐阅读
相关标签
  

闽ICP备14008679号