赞
踩
(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。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。