计算机系统结构 MIPS指令系统和MIPS体系结构

该实验旨在熟悉MIPSsim模拟器的使用,包括启动模拟器、配置流水线、执行MIPS指令,如load/store、算术运算、逻辑运算和控制转移。通过样例程序的运行,观察寄存器和内存的变化,加深对MIPS指令系统的理解。
摘要由CSDN通过智能技术生成

一.实验目的

(1)了解和熟悉指令级模拟器。

(2)熟练掌握MIPSsim模拟器的操作和使用方法。

(3)熟悉MIPS指令系统及其特点,加深对MIPS指令操作的理解。

(4)熟悉MIPS体系结构。

二.实验环境

实验平台采用指令级和流水线操作级模拟器MIPSsim。

三.实验内容和步骤

首先要阅读MIPSsim模拟器的使用方法(见第四节),然后了解MIPSsim的指令系统和汇编语言。

(1)启动MIPSsim(用鼠标双击MIPSsim.exe)。

(2)选择“配置”→“流水方式”选项,使模拟器工作在非流水方式下。

(3)参照1.4节的使用说明,熟悉MIPSsim模拟器的操作和使用方法。

可以先载入一个样例程序(在本模拟器所在的文件夹下的“样例程序”文件夹中),然后分别以单步执行一条指令、执行多条指令、连续执行、设置断点等的方式运行程序,观察程序的执行情况,观察CPU中寄存器和存储器的内容的变化。

(4)选择“文件”→“载入程序”选项,加载样例程序 alltest.s,然后查看“代码”窗口,查看程序所在的位置(起始地址为0x00000100)。

(5)查看“寄存器”窗口PC寄存器的值;[PC]=0x 00000000         。

(6)执行load和store指令,步骤如下:

①单步执行1条指令。

②下一条指令地址为0x  00000004 。是一条 有(有,无)符号载入 字节  (字节,半字,字)指令。                                                                                                                                                                                                                                                                                 

③单步执行1条指令。

④查看R1的值,[R1]=0x FFFF FFFF FFFF FF80  。

⑤下一条指令地址为0x 0000 0008 ,是一条 有 (有,无)符号载入 字  (字节,半字,字)指令。

⑥单步执行1条指令。

⑦查看R1的值,[R1]=0x 0000000000000080 。

⑧下一条指令地址为0x 0000000C ,是一条 无 (有,无)符号载入 字节  (字节,半字,字)指令。

⑨单步执行1条指令。

⑩查看R1的值,[R1]= 0x 000000000080  

⑪单步执行1条指令。

⑫下一条指令地址为0x 00000014  ,是一条保存   (字节,半字,字)指令。

⑬单步执行1条指令。

⑭查看内存BUFFER处字的值,值为0x     00000080        

(7)执行算术运算类指令。步骤如下:

①双击"寄存器"窗口中的R1,将其值修改为0x2。

②双击“寄存器"窗口中的R2,将其值修改为0x3,

③单步执行1条指令。

④下一条指令地址为Ox 0000001C ,是一条加法指令。

⑤单步执行1条指令。

⑥查看R3的值,[R3]=0x 0000000000000005   

⑦下一条指令地址为0x  00000024           ,是一条乘法指令。

⑧单步执行1条指令。

⑨查看LO、HI的值,[LO]=0x  0000000000000006  ,[HI]=0x 0000000000000000           

(8)执行逻辑运算类指令。步骤如下

①双击“寄存器"窗口中的R1,将其值修改为OxFFFF0000.

②双击“寄存器"窗口中的R2,将其值修改为OxFFOOFF00,

③单步执行1条指令。

④下一条指令地址为Ox  0000002C ,是一条逻辑与运算指令,第二个操作数寻址方式是 寄存器直接寻址  (寄存器直接寻址,立即数寻址)

⑤单步执行1条指令。

⑥查看R3的值,[R3]=0x   000000000FF000000          

⑦下一条指令地址为0x  00000034           ,是一条逻辑或指令,第二个操作数寻址方式是   寄存器直接寻址          (寄存器直接导址,立即数寻址)。

⑧单步执行1条指令。

⑨查看R3的值,[R3]=0x   0000000000000000          

(9)执行控制转移类指令,步骤如下:

①双击“寄存器”窗口中的R1,将其值修改为2。

②双击“寄存器”窗口中的R2,将其值修改为2。

③单步执行1条指令。

④下一条指令地址为0x   00000038          ,是一条BEQ指令,其测试条件是   相等转移      ,⑤单步执行1条指令。

⑥查看PC的值,[PC]=0x    0000004C         ,表明分支   成功          (成功,失败)。

⑦下一条指令是一条BGEZ指令,其测试条件是   r1>0          ,目标地址为0x  00000048           

⑧单步执行1条指令。

⑨查看PC的值,[PC]=0x  00000058           ,表明分支   成功          (成功,失败)。

⑩下一条指令是一条BGEZAL指令,其测试条件是   r1>=0          ,目标地址为0x   00000060          

⑪单步执行1条指令。

⑫查看PC的值,[PC]=0x  00000064           ,表明分支    成功         (成功,失败)。查看R31的值,[R31]=0x   000000000000005C          

⑬单步执行1条指令。

⑭查看R1的值,[R1]=0x   000000000000074           

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

16单步执行1条指令。

17查看PC和R3的值,[PC]=0x   00000074          ,[R3]=0x  000000000000006C            

四、实验结果及分析

ADDIU:r8,r0,124 ADDIU是无符号立即值加,r8=r0+124

LB r1,0(r8) 从r8读取一个字节的数据(带符号)到r1

LW r1 , 0(r8) 从r8读取一个字的数据(不带符号)到r1

LBU r1 , 0(r8) 从r8读取一个字节的数据(不带符号)到r1

SW r1 , 0(r8):把一个字的数据从寄存器存储到存储器中

BEQ ,$r0, $r0,PROG2:相等转移。当两个寄存器内容相等时转移发生—>跳转到PROG2

DADD $r3 $r1 r2把两个定点寄存器的内容相加,也就是定点加r3 =$r1+ $r2 =128

DMULT $r1 r2,也就是定点乘r1=128,r2=0

AND $r3 $r1 r2 与运算,两个寄存器中的内容相与(r3=$r1 & $r2) r1=128 r2=0 r3=0 两位同时为“1”,结果才为“1”,否则为0。

ANDI $r3 r 10一个寄存器中的内容与一个立即数相与

BEQ $r1 r22条件转移指令,当两个寄存器内容相等时转移发生,r1不等于$r2不发生

SLL $r0 $r0 0 逻辑左移

BGEZ $r1 2 跳转指令->跳转到label2

BGEZAL $r1 2 条件转移指令->跳转到label3

JALR $r3 $r1寄存器跳转并链接。无条件转移到r1给出的地址并将返回地址保存到R31。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值