实验一:MIPS指令系统和MIPS体系结构

MIPS架构

MIPS架构(英语:MIPS architecture,为Microprocessor without interlocked piped stages architecture的缩写,亦为Millions of Instructions Per Second的双关语),是一种采取精简指令集(RISC)的处理器架构,1981年出现,由MIPS科技公司开发并授权,广泛被使用在许多电子产品、网络设备、个人娱乐装置与商业装置上。最早的MIPS架构是32位,最新的版本已经变成64位。

问:为什么 MIPS 中有(加载字节无符号)和(加载字节)指令,但只有(存储字节)?
答:MIPS 寄存器为 32 位宽。当您将单个 8 位字节从内存加载到这些寄存器之一时,您必须决定是否对其进行符号扩展。因此有两个加载指令。存储时,没有这种歧义。

指令

LB指令:

在这里插入图片描述

LW指令:

在这里插入图片描述
LB与LW的区别:LB加载字节,地址不一定是4的倍数。LW加载字(1字=4字节),地址必须是4的倍数。

LBU指令

从内存中读取一个字节(8位),并将其零扩展为一个32位整数。

SW指令

将一个寄存器中的字写入内存中。

BEQ指令

在这里插入图片描述

实验报告

一、实验目的
了解和熟悉指令级模拟器。
熟练掌握MIPSsim模拟器的操作和使用方法。
熟悉MIPS指令系统及其特点,加深对MIPS指令操作语义的理解。
熟悉MIPS体系结构。
二、实验内容和步骤
首先要阅读MIPSsim模拟器的使用方法《MIPSsim使用手册》。然后了解MIPSsim的指令系统。

  1. 启动MIPSsim(用鼠标双击MIPSsim.exe)。
  2. 点击“配置”→“流水方式”,使模拟器工作在非流水方式下。
  3. 熟悉MIPSsim模拟器的操作和使用方法。
  4. 选择“文件”→“载入程序”选项,加载样例程序alltest.asm,然后查看“代码”窗口,查看程序所在的位置(起始地址为0x00000100)。
  5. 查看“寄存器”窗口PC寄存器的值:[PC]=0x00000000
    6.执行load和store指令。步骤如下:
    (1)单步执行一条指令(F7)。
    (2)下一条指令地址为0x00000004,是一条_有_(有,无)符号载入_字节_(字节,半字,字)指令。
    (3)单步执行1条指令(F7)。
    (4)查看R1的值,[R1]=0xFFFFFFFFFFFFFF80。
    (5)下一条指令地址为0x0x00000008,是一条 无(有,无)符号载入字(字字,半字,字)指令。
    (6)单步执行1条指令。
    (7)查看R1的值,[R1]=0x0000000000000080。
    (8)下一条指令地址为0x0000000C,是一条无(有,无)符号载入字节(字,半字,字)指令。
    (9)单步执行1条指令。
    (10)查看R1的值,[R1]=0x0000000000000080。
    (11)单步执行1条指令。
    (12)下一条指令地址为0x00000014,是一条保存字(字,半字,字)指令。
    (13)单步执行1条指令。
    (14)查看内存BUFFER处字的值,值为0x00000080。
    7.执行算术运算类指令。步骤如下:
    (1)双击“寄存器”窗口里的R1,将其值修改为2。
    (2)双击“寄存器”窗口里的R2,将其值修改为3。
    (3)单步执行1条指令。
    (4)下一条指令地址为0x00000020,是一条加法指令。
    (5)单步执行1条指令。
    (6)查看R3的值,[R3]=5
    (7)下一条指令地址为0x00000024,是一条乘法指令。
    (8)单步执行1条指令。
    (9)查看LO、HI的值,[LO]=0x0000000000000006 [HI]=0x0000000000000000
    8.执行逻辑运算类指令。步骤如下:
    (1)双击“寄存器”窗口里的R1,将其值修改为0xFFFF0000。
    (2)双击“寄存器”窗口里的R2,将其值修改为0xFF00FF00。
    (3)单步执行1条指令。
    (4)下一条指令地址为0x00000030,是一条逻辑与运算指令,第二个操作数寻址方式是寄存器直接寻址(寄存器直接寻址,立即数寻址)。
    (5)单步执行1条指令。
    (6)查看R3的值,[R3]=0x00000000FF000000
    (7)下一条指令地址为:0x00000034,是一条逻辑或指令,第二个操作数寻址方式是立即数寻址(寄存器直接寻址,立即数寻址)。
    (8)单步执行1条指令。
    (9)查看R3的值,[R3]=0x0000000000000000。
    9.执行控制转移类指令。步骤如下:
    (1)双击“寄存器”窗口里的R1,将其值修改为2。
    (2)双击“寄存器”窗口里的R2,将其值修改为2。
    (3)单步执行1条指令。
    (4)下一条指令地址为0x00000040,是一条BEQ指令,其测试条件是: R 1 = = R1== R1==R2。
    (5)单步执行1条指令。
    (6)查看PC的值,[PC]=0x0000004C,表明分支成功(成功,失败)。
    (7)下一条指令是一条BGEZ指令,其测试条件是$R1>=0,目标地址为 0x00000058。
bgez(指令码为REGIMM,且第16~20bit为5’b00001):
用法:bgez rs,offset,
作用:if rs >= 0 then branch

(8)单步执行1条指令。
(9)查看PC的值,[PC]=0x00000058,表明分支成功(成功,失败)。

(10)下一条指令地址是一条BGEZAL指令,其测试条件是$R1>=0,目标地址为0x0000064。

bgezal(指令码为REGIMM,且第16~20bit为5’b10001):
用法:bgezal rs,offset,
作用:if rs >= 0 then branch,并且将指令后面的指令地址作为返回地址,保存到通用寄存器$31

(11)单步执行1条指令。
(12)查看PC的值,[PC]=0x00000064,表明分支成功(成功,失败);查看R31的值,[R31]=92。

(13)单步执行1条指令。
(14)查看R1的值,[R1]=0x0000000000000074

(15)下一条指令地址为0x00000068,是一条JALR指令,保存目标地址的寄存器为R1,保存返回地址的目标寄存器为R3

jalr是MIPS指令集中的一条跳转指令,用于实现函数调用和返回。 jalr的全称为”Jump and Link Register”,它的作用是将当前的程序计数器PC(Program Counter)的值保存到一个指定的寄存器(链接寄存器)中,然后跳转到指定地址执行。

(16)单步执行1条指令。
(17)查看PC和R3的值,[PC]=0x00000074 ,[R3]=0x000000000000006C。

  • 26
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值