实验一_MIPS指令集实验
mips指令集(24条指令)的字段和功能描述

MIPS指令集(24条指令)的字段和功能描述指令集概述M I PS(M ic ro pr oc es s or wi th ou tI nt erl o ck ed Pi pe li ne dSt a ge s)指令集是一种精简指令集(R IS C)体系结构,广泛应用于计算机体系结构的教学和实践中。
本文将介绍M IP S指令集中的24条常用指令,并对它们的字段和功能进行详细描述。
加载和存储指令1.l w指令字段描述:-指令格式:lw$r t,o f fs et($rs)-r s(源寄存器):指定存储单元的基址寄存器-r t(目标寄存器):指定目标寄存器,用于存储从存储单元中加载的数据-o ff se t:用于指定存储单元的偏移量,计算出实际地址功能描述:l w指令用于从存储单元中加载数据到目标寄存器。
它通过基址寄存器和偏移量计算出实际地址,并将存储单元中的数据加载到目标寄存器中。
2.s w指令字段描述:-指令格式:sw$r t,o f fs et($rs)-r s(源寄存器):指定存储单元的基址寄存器-r t(目标寄存器):指定源寄存器,用于存储到存储单元中的数据-o ff se t:用于指定存储单元的偏移量,计算出实际地址功能描述:s w指令用于将源寄存器中的数据存储到指定的存储单元中。
它通过基址寄存器和偏移量计算出实际地址,并将源寄存器中的数据存储到该地址对应的存储单元中。
算术和逻辑指令3.a d d指令字段描述:-指令格式:ad d$rd,$rs,$rt-r s(源寄存器1):参与运算的第一个源寄存器-r t(源寄存器2):参与运算的第二个源寄存器-r d(目标寄存器):用于存储运算结果功能描述:a d d指令用于将两个源寄存器中的数据相加,并将结果存储到目标寄存器中。
4.s u b指令字段描述:-指令格式:su b$rd,$rs,$rt-r s(源寄存器1):参与运算的第一个源寄存器-r t(源寄存器2):参与运算的第二个源寄存器-r d(目标寄存器):用于存储运算结果功能描述:s u b指令用于将源寄存器2中的数据从源寄存器1中的数据减去,并将结果存储到目标寄存器中。
计算机设计与实践——MIPS基本指令

MIPS 基本指令和寻址方式:MIPS 是典型的RISC 处理器,采用32位定长指令字,操作码字段也是固定长度,没有专门的寻址方式字段,由指令格式确定各操作数的寻址方式。
MIPS 指令格式一般有三种格式: R-型指令格式 I-型指令格式 J-型指令格式R _Type 指指指指262116116316bit6bit5bit5bit5bit5bitOP : 操作码rs : 第一个源操作数寄存器rt : 第二个源操作数寄存器(单目原数据) rd : 结果寄存器 shamt :移位指令的位移量 func : 指令的具体操作类型特点:R-型指令是RR 型指令,其操作码OP 字段是特定的“000000”,具体操作类型由func字段给定。
例如:func=“100000”时,表示“加法”运算。
R[rd] ← R[rs] + R[rt]I _Type 指指指指2621163115特点:I-型指令是立即数型指令双目运算: R[rt] R[rs](OP )SignExt(imm16) Load 指令:Addr ← R[rs] + SignExt(imm16) 计算数据地址 (立即数要进行符号扩展) R[rt] ← M[Addr] 从存储器中取出数据,装入到寄存器中Store 指令:Addr ← R[rs] + SignExt(imm16) M[Addr] ← R[rt]J _Type 指令格式26316bit26bit25特点:J-型指令主要是无条件跳转指令,将当前PC 的高4位拼上26位立即数,后补两个“0”,作为跳转目标地址。
j L //goto L 指指指指指指指指指jal L //$ra 指PC+4;goto L 指指指指指指指指指R 型指令:定点运算: add / addu , sub / subu , sra , mult/multu , div/divu 逻辑运算: and / or / nor , sll / srl 比较分支: beq / bne / slt / sltu 跳转指令: jrI 型指令:定点运算: addi / addiu 逻辑运算: andi / ori 比较分支: slti / sltiu数据传送: lw / sw / lhu / sh / lbu / sb / luiJ 型指令: j / jal设计模块划分,教学安排1、MIPS格式指令系统设计2、指令存储器设计3、寄存器堆设计4、ALU设计——基本算术、逻辑单元的设计32位超前进位加法器的设计32位桶式移位寄存器的设计5、取指令部件的设计6、立即数处理单元设计7、单周期处理器设计——R型指令的数据通路设计I型指令的数据通路设计Load/Store指令的数据通路设计分支指令/转移指令的数据通路设计综合12条指令的完整数据通路设计8、ALU控制单元设计9、主控制单元的设计10、单周期处理器总体验证11、异常和中断处理及其电路实现12、带有异常和中断处理功能的处理器的设计设计示例1:指令存储器设计1、 指令存储器模块定义:指令存储器用于存放CPU 运算的程序指令和数据等,采用单端口存储器设计,设计最大为64个存储单元,每个存储单元数据宽度为32bit 。
实验1 MIPS指令系统和MIPS体系结构

实验1 MIPS指令系统和MIPS体系结构1.1 实验目的1.了解和熟悉指令集模拟器。
2. 熟练掌握模拟器MIPSsim的操作和使用方法。
3. 熟悉MIPS指令系统及其特点,加深对MIPS指令操作语义的理解。
4. 熟悉MIPS体系结构。
1.2 实验平台实验平台采用指令级和流水线操作级模拟器MIPSsim1.3 实验内容和步骤首先要阅读MIPSsim模拟器的使用方法,然后了解MIPSsim的指令系统和汇编语言。
1. 启动MIPSsim2. 选择“配置”→“流水方式”选项,使模拟器工作在非流水方式下。
3.参照使用说明,熟悉MIPSsim模拟器的操作和使用方法。
可以先载入一个样例程序,然后分别以单步执行一条指令、执行多条指令、连续执行、设置断点等的方式运行程序,观察程序的执行情况,观察CPU中寄存器和存储器的内容的变化。
4.选择“文件”→“载入程序”选项,加载样例程序alltest.s,然后查看“代码”窗口,查看程序所在的位置。
(起始地址为0x00000000)5.查看“寄存器”窗口PC寄存器的值:[PC]=0x6. 执行load和store指令,步骤如下:(1)单步执行一条指令(F7)(2)下一条指令地址为0x ,是一条(有,无)符号载入(字节,半字,字)指令。
(3)单步执行一条指令(F7)(4)查看R1的值,[R1] =0x 。
(5)下一条指令地址为0x ,是一条(有,无)符号载入(字节,半字,字)指令。
(6)单步执行一条指令。
(7)查看R1的值,[R1] =0x 。
(8)下一条指令地址为0x ,是一条(有,无)符号载入(字节,半字,字)指令。
(9)单步执行一条指令。
(10)查看R1的值,[R1] =0x 。
(11)单步执行一条指令。
(12)下一条指令地址为0x ,是一条(有,无)符号载入(字节,半字,字)指令。
(13)单步执行一条指令(F7)(14)查看内存BUFFER处字的值,值为0x 。
7. 执行算术运算类指令。
mips控制器设计实验原理

mips控制器设计实验原理MIPS(Microprocessor without Interlocked Pipelined Stages)是一种32位的RISC (Reduced Instruction Set Computing)处理器架构,旨在提高处理器效率和性能。
MIPS 架构的处理器被广泛应用于各种领域,包括计算机、嵌入式系统、网络设备、数字信号处理等需要高性能的应用中。
在本实验中,我们将学习如何设计一个基于MIPS控制器的处理器。
控制器是一个能够控制处理器各个子系统如存储器、算术逻辑单元(ALU)、输入/输出设备等的模块。
MIPS控制器的设计是关键,因为它可以决定处理器的运行效率和性能。
MIPS控制器的设计需要考虑以下几个方面:1. 指令解码MIPS指令集包含了大量的指令,但是由于指令采用RISC架构,指令集中的每一个指令都很简单,只有少量的寄存器、立即数和内存操作。
控制器需要能够识别每一个指令,并正确地解码指令中的操作数。
为了实现这个目标,控制器需要包含适当的译码电路和其他必要的逻辑门电路。
2. 流水线控制流水线是一种增加处理器效率和性能的技术,通过将指令的执行拆分为多个阶段,多个指令可以在同一时刻被处理。
MIPS架构使用了5级流水线结构,即取指令、指令译码、执行、访问存储器和写回结果。
控制器需要能够控制流水线的各个阶段,确保它们按照正确的顺序执行。
3. 异常处理处理器在执行指令时可能会出现各种错误,如未定义的指令、内存访问冲突、算术溢出等。
这些错误称作异常。
处理器需要能够捕获异常并采取适当的措施,如停止当前指令的执行、中断指令流并处理异常。
控制器需要包含适当的硬件和逻辑电路来处理异常。
4. 输入/输出一个处理器需要有输入/输出接口来连接外部设备,如键盘、鼠标、显示器、网络等。
这些设备通过输入输出端口(I/O端口)与处理器相连。
控制器需要能够控制I/O端口的数据传输,并确保数据在正确的时刻被传输。
实验一:MIPS指令集实验

深圳大学实验报告课程名称:计算机系统(3)实验项目名称:MIPS指令集实验学院:计算机与软件学院专业:计算机与软件学院所有专业指导教师:*****报告人:******* 学号:********** 班级:******* 实验时间:2017年10月16日星期一实验报告提交时间:2017年10月19日星期四教务处制一、实验目标:了解WinMIPS64的基本功能和作用;熟悉MIPS指令、初步建立指令流水执行的感性认识;掌握该工具的基本命令和操作,为流水线实验作准备。
二、实验内容按照下面的实验步骤及说明,完成相关操作记录实验过程的截图:1)下载WinMIPS64;运行样例代码并观察软件各个观察窗口的内容和作用,掌握软件的使用方法。
(80分)2)学会正确使用WinMIPS64的IO方法;(10分)3)编写完整的排序程序;(10分)三、实验环境硬件:桌面PC软件:Windows,WinMIPS64仿真器四、实验步骤及说明WinMIPS64是一款指令集模拟器,它是基于WinDLX设计的,如果你对于WinDLX这款软件十分熟悉的话,那么对于WinMIPS64也会十分的容易上手。
DLX 处理器(发音为"DeLuXe")是Hennessy 和Patterson合著一书《Computer Architecture - A Quantitative Approach》中流水线处理器的例子。
WinDLX是一个基于Windows的模拟器。
本教程通过一个实例介绍WinMIPS64的使用方法。
WinMIPS64模拟器能够演示MIPS64流水线是如何工作的。
本教程使用的例子非常简单,它并没有囊括WinMIPS64的各个方面,仅仅作为使用WinMIPS64的入门级介绍。
如果你想自己了解更多的资料,在给出的winmips64.zip中,有WinMIPS64 — Documentation Summary.html和winmipstut.docx两个文件可以供你随时参考,其中涵盖了WinMIPS64的指令集和模拟器的组成与使用方法。
thco mips实验指导书

Thco Mips 实验指导书目录一、实验目的二、实验环境三、实验步骤3.1 准备工作3.2 编译程序3.3 运行程序四、实验总结一、实验目的本实验旨在通过对Thco Mips进行实验操作,加深对计算机体系结构的理解,提高学生的实践能力,培养学生的动手能力,帮助学生掌握计算机系统的基本实验技能。
二、实验环境本实验需要使用Thco Mips模拟器进行操作。
Thco Mips是一个Mips指令集的模拟器,可以模拟Mips处理器的运行情况,对于学习计算机体系结构非常有帮助。
在进行本实验之前,请确保已经下载并安装了Thco Mips模拟器,并熟悉了其基本操作方法。
三、实验步骤3.1 准备工作1. 打开Thco Mips模拟器。
2. 点击“文件”菜单,选择“新建”创建一个新的Mips程序文件。
3. 在新建的Mips程序文件中,输入所需的Mips指令代码。
3.2 编译程序1. 点击“编辑”菜单,选择“编译”命令,对输入的Mips指令代码进行编译。
2. 如果程序中存在语法错误,会提示相应的错误信息,需要及时进行修改并重新编译程序,直至通过编译。
3.3 运行程序1. 点击“运行”菜单,选择“运行”命令,可在Thco Mips模拟器中运行已经编译通过的程序。
2. 在程序运行期间,可以通过监控寄存器和内存的方式,观察程序的运行情况,分析程序的执行过程。
四、实验总结通过本次实验,我深入了解了Thco Mips模拟器的使用方法,掌握了Mips指令集的基本编程技巧,加深了对计算机体系结构的理解。
在实验过程中,我不仅学会了如何编写Mips程序,还学会了如何调试和运行Mips程序,对于我今后的学习和研究都具有重要的意义。
通过这次实验,我对计算机体系结构有了更深入的认识,也为我未来的学习和研究打下了良好的基础。
实验实践能力的培养不仅仅是在课堂上学习理论知识,更需要通过实践操作,将理论知识转化为实际应用能力。
Thco Mips模拟器作为一个模拟Mips处理器的工具,给我们提供了一个很好的实践评台,让我们能够深入理解计算机体系结构的工作原理,加强对计算机系统的实际操作能力。
c语言 mips指令

MIPS是一种精简指令集(RISC)架构,它是一种用于构建嵌入式系统、超级计算机和游戏机的微处理器架构。
在C语言中,您可以使用汇编指令集来与MIPS架构进行交互。
以下是一些常用的MIPS汇编指令:1. add:将两个操作数相加并将结果存储在指定的寄存器中。
2. sub:从第一个操作数中减去第二个操作数并将结果存储在指定的寄存器中。
3. mul:将两个操作数相乘并将结果存储在指定的寄存器中。
4. div:将第一个操作数除以第二个操作数并将结果存储在指定的寄存器中。
5. move:将一个操作数的值复制到另一个操作数中。
6. load:将数据从内存加载到寄存器中。
7. store:将数据从寄存器存储到内存中。
8. jump:无条件跳转到指定的地址。
9. jr:将控制权转移给指定的寄存器中的地址。
10. syscall:发起系统调用并等待其完成。
在C语言中,您可以使用内联汇编(inline assembly)来编写MIPS汇编代码。
下面是一个使用内联汇编实现两个整数相加的示例:```cint main() {int a = 10;int b = 20;int result;__asm__ __volatile__("add $t0, %1, %2; move %0, $t0" : "=r"(result) : "r"(a), "r"(b));printf("The result is %d\n", result);return 0;}```在这个示例中,使用了add指令将a和b相加,并将结果存储在$t0寄存器中。
然后使用move指令将$t0寄存器的值复制到result变量中。
注意,使用了$符号来标识寄存器,%符号来标识操作数。
mips 实验报告

mips 实验报告MIPS实验报告引言:计算机体系结构是计算机科学中的一个重要领域,它研究计算机硬件和软件之间的关系。
在计算机体系结构的学习过程中,我们接触到了MIPS (Microprocessor without Interlocked Pipeline Stages)指令集架构。
本实验报告将介绍我们在实验中对MIPS进行的学习和实践。
一、MIPS的背景和特点MIPS是一种经典的RISC(Reduced Instruction Set Computer)指令集架构,它于1981年由斯坦福大学的约翰·亨尼西(John Hennessy)和他的学生大卫·帕特森(David Patterson)提出。
MIPS架构的设计理念是简化指令集,提高指令执行速度,以及降低硬件复杂度。
MIPS指令集包含了一组简洁而强大的指令,使得编译器和硬件设计更容易实现。
该架构的特点包括高效的流水线执行、固定长度的指令格式、延迟槽等。
二、MIPS的实验环境和工具为了学习和实践MIPS指令集,我们使用了一款名为MARS(MIPS Assembler and Runtime Simulator)的工具。
MARS提供了一个模拟器,可以在计算机上运行MIPS指令。
它还提供了汇编器和调试器,方便我们编写和调试MIPS程序。
通过MARS,我们可以观察和分析指令的执行过程,更好地理解MIPS的工作原理。
三、MIPS的基本指令和寄存器MIPS指令集包含了一系列基本指令,如加载(Load)指令、存储(Store)指令、算术运算(Arithmetic)指令、逻辑运算(Logic)指令等。
这些指令可以完成各种计算和数据操作任务。
同时,MIPS架构还提供了32个通用寄存器,用于存储和操作数据。
这些寄存器以$0、$1、$2等命名,并且有特殊用途的寄存器如程序计数器(PC)和堆栈指针(SP)等。
四、MIPS程序设计实践通过MARS工具,我们编写了一些简单的MIPS程序,以加深对MIPS指令集和寄存器的理解。
MIPS指令集及汇编

和R12000(1997年)等型号。 z 随后,MIPS公司把重点放在嵌入式系统。
{ 1999年发布MIPS32和MIPS64架构标准,集成了所有原 来MIPS指令集,并且增加了许多更强大的功能。陆续开发 了高性能、低功耗的32位处理器内核(core)MIPS324Kc 与高性能64位处理器内核MIPS64 5Kc。
{ 应用广泛的32位MIPS CPU包括R2000,R3000 其ISA都是MIPS I,另一个广泛使用的、含有许多 重要改进的64位MIPS CPU R4000及其后续产 品,其ISA版本为MIPS III
一、 MIPS简介
{ 1984年,MIPS计算机公司成立。1992年,SGI收购了 MIPS计算机公司。1998年,MIPS脱离SGI,成为MIPS 技术公司。
龙芯2E笔记本电脑运行 OpenOffice打开Word文档
ቤተ መጻሕፍቲ ባይዱ
二、MIPS体系结构
{ 指令集体系结构类型:寄存器——寄存器型
(1)寄存器的特点 (2)整数乘法单元和寄存器 (3)寻址方式 (4)存储器和寄存器中的数据类型 (5)流水线冒险
二、 MIPS体系结构——(1)寄存器
{ MIPS 包含32个通用寄存器
{ 2000年,MIPS公司发布了针对MIPS32 4Kc的版本以及 64位MIPS 64 20Kc处理器内核。
一、 MIPS简介
{ 基于龙芯2E处理器的千元的PC、1999元的笔记本电脑、 意法半导体3000万元购买龙芯2E 5年的生产和销售权, 国产操作系统内核在龙芯2E上测试成功。
《计算机体系结构》课程实验教学大纲(Ⅰ)

《计算机体系结构》课程实验教学大纲(Ⅰ) [注:同一门实验课程若对不同专业开设的实验项目、实验要求不同,则大纲应不同,区分可采用题目后加(Ⅰ)、(Ⅱ)、(Ⅲ)……的办法]编号:课程总学时:54 实验学时:8课程总学分: 3 实验学分:(非单独设课的实验不用填此项)先修课程:《模拟电子技术》、《数字电子技术》、《数字逻辑》、《计算机组成原理》,《操作系统》,《编译原理》适用专业:计算机科学与技术(嵌入式本科)、网络工程(本科)、计算机科学与技术(信息技术方向本科)一、本课程实验的主要目的与任务本课程实验的主要目的与任务是为了配合本课程更好的深入开展和执行,通过让学生做一定数量的实验,提高学生从总体结构、系统分析这一层次来研究和分析计算机系统的能力,帮助学生建立整机的概念;使学生掌握计算机系统结构的基本概念、基本原理、基本结构、基本设计和分析方法,并对计算机系统结构的发展历史和现状有所了解。
二、本课程实验应开设项目注:1、类型---指验证性、综合性、设计性;2、该表格不够可拓展。
三、各实验项目主要实验内容和基本要求实验 1 MIPS指令系统和MIPS体系结构1. 实验目的(1)了解和熟悉指令级模拟器;(2)熟练掌握MIPSsim模拟器的操作和使用方法;(3)熟悉MIPS指令系统及其特点,加深对MIPS指令操作语义的理解;(4)熟悉MIPS体系结构。
2. 实验内容首先要阅读MIPSsim模拟器的使用方法,然后了解MIPSsim的指令系统和汇编语言。
(1)启动MIPSsim(用鼠标双击MIPSsim.exe)。
(2)选择“配置”->“流水方式”选项,使模拟器工作在非流水方式。
(3)参照使用说明,熟悉MIPSsim模拟器的操作和使用方法。
可以先载入一个样例程序(在本模拟器所在的文件夹下的“样例程序”文件夹中),然后分别以单步执行一条指令、执行多条指令、连续执行、设置断点等的方式运行程序,观察程序的执行情况,观察CPU中寄存器和存储器的内容的变化。
计算机系统结构实验报告-MIPS 指令系统和MIPS 体系结构

计算机系统结构实验报告实验名称:MIPS 指令系统和MIPS 体系结构专业年级:0xxxxxxx姓名:xxxxxx计算机系统结构实验报告班级xxxxxxxxxxx 实验日期xxxxxxxxxx 实验成绩姓名xxxxxxxx 学号230xxxxxxxxxx4实验名称Cache性能分析实验目的、要求及器材实验目的:1、加深对Cache的基本概念、基本组织结构以及基本工作原理的理解。
2、掌握Cache容量、相联度、块大小对Cache性能的影响3、掌握降低Cache不命中率的各种方法以及这些方法对提高Cache性能的好处。
4、理解LRU与随机法的基本思想以及它们对Cache性能的影响实验平台:采用Cache模拟器MyCache。
实验内容、步骤及结果首先要掌握 MaCache模拟器的使用方法。
1、Cache容量对不命中率的影响选择地址流文件,选择不同的Cache容量,执行模拟器,记录各种情况的不命中率。
表:地址流文件名: eg.din结论:Cache容量越大,不命中率越低.但增加到一定程度时命中率不变。
2、相联度对不命中率的影响表:64KB相联度 1 2 4 8 16 32 不命中率(%)0.89 0.53 0.47 0.45 0.44 0.44地址流文件: all.din图:64KB表:256KB相联度 1 2 4 8 16 32 不命中率(%)0.49 0.38 0.36 0.36 0.35 0.35地址流文件: all.din图:256KB结论:相联路数越多,则不命中率越低,同时,有个极限值,且该极限值随Cache容量大小的增加而减小。
3 Cache块大小对不命中率的影响块大小Cache容量2 8 32 128 51216 18.61 10.12 3.81 1.95 1.4232 14.22 7.59 2.84 1.26 0.8764 12.62 6.47 2.36 0.92 0.60128 12.98 6.35 2.31 0.76 0.47256 16.04 7.29 2.15 0.72 0.40地址流文件:ccl.din结论:不命中率随分块大小的增大先减小后增大,即存在一个最优的分块大小,且该最优分块随Cache容量的增大而增大。
MIPS指令集

$1=0
其中 rs=$2,rt=$1
sltiu $1,$2,10
if($2<10) $1=1 else $1=0
if (rs <(zero-extend)immediate) rt=1 else rt=0 ;
其中 rs=$2,rt=$1
PC
<-
j 10000
goto 10000 (PC+4)[31..28],address,0,0
$1=$2+100
00
其中 rt=$1,rs=$2
00100
addiu
rs rt immediate
1
rt
<-
rs
+
addiu $1,$2,1
$1=$2+100 (zero-extend)immediate ; 其 中
00
rt=$1,rs=$2
00110
andi
rs rt immediate
0
rt
<-
xor
rs rt rd
xor $1,$2,$3 $1=$2 ^ $3
0
00
rt=$3, rd=$1(异或)
00000
0000 10011
rd <- not(rs | rt) ;其中 rs=$2,
nor
rs rt rd
nor $1,$2,$3 $1=~($2 | $3)
0
01
rt=$3, rd=$1(或非)
and
rs rt rd
and $1,$2,$3 $1=$2 & $3
0
00
rd=$1
00000
0000 10010
mips实验报告

mips实验报告MIPS实验报告引言:计算机体系结构是计算机科学中的重要研究领域,而MIPS(Microprocessor without Interlocked Pipeline Stages)是一种经典的RISC(Reduced Instruction Set Computer)体系结构。
本实验报告将介绍我对MIPS实验的理解和实践,包括MIPS指令集的基本特点、实验环境的搭建、以及在MIPS架构下编写和运行程序的过程。
一、MIPS指令集的基本特点MIPS指令集是一种精简的指令集,其特点主要包括以下几点:1. 定长指令格式:MIPS指令采用32位定长指令格式,使得指令解码和执行过程更加高效。
2. 延迟槽:MIPS指令集中的延迟槽是指在分支指令后的一条指令,它总是会被执行,无论分支是否发生。
这种设计可以提高指令流水线的效率。
3. 五种指令格式:MIPS指令集包括R格式、I格式、J格式、COP0格式和COP1格式,分别用于处理寄存器相关操作、立即数操作、跳转操作、协处理器0操作和协处理器1操作。
4. 寄存器:MIPS体系结构中有32个通用寄存器,可以进行高速数据传递和操作。
二、实验环境的搭建为了进行MIPS实验,我们需要搭建相应的实验环境。
在本次实验中,我选择使用MARS(MIPS Assembler and Runtime Simulator)作为MIPS实验的模拟器。
MARS提供了一个图形化界面,可以方便地进行MIPS程序的编写、调试和运行。
搭建实验环境的步骤如下:1. 下载和安装MARS:从MARS官方网站上下载最新版本的MARS软件,并按照提示进行安装。
2. 配置MARS:打开MARS软件后,点击“Settings”菜单,选择“MIPS Assembler”选项卡。
在这里,我们可以设置MIPS汇编程序的语言类型、字符集和显示格式等。
3. 编写MIPS程序:在MARS的编辑器中,我们可以编写MIPS程序。
MIPS单周期CPU实验报告

《计算机组成原理实验》实验报告(实验二)学院名称:专业(班级):学生姓名:学号:时间:2017 年11 月25 日成绩: 实验二:单周期CPU设计与实现一.实验目的(1) 掌握单周期CPU数据通路图的构成、原理及其设计方法;(2) 掌握单周期CPU的实现方法,代码实现方法;(3) 认识和掌握指令与CPU的关系;(4) 掌握测试单周期CPU的方法;(5) 掌握单周期CPU的实现方法。
二.实验内容设计一个单周期的MIPSCPU,使其能实现下列指令:==> 算术运算指令==> 逻辑运算指令功能:rd←rs | rt;逻辑或运算。
==>移位指令==>比较指令==> 存储器读/写指令将rt寄存器的内容保存到rs寄存器内容和立即数符号扩展后的数相加作为地址的内存单元中。
即读取rs寄存器内容和立即数符号扩展后的数相加作为地址的内存单元中的数,然后保存到rt寄存器中。
==> 分支指令功能:if(rs=rt) pc←pc + 4 + (sign-extend)immediate <<2 else pc ←pc + 4特别说明:immediate是从PC+4地址开始和转移到的指令之间指令条数。
immediate 符号扩展之后左移2位再相加。
为什么要左移2位?由于跳转到的指令地址肯定是4的倍数(每条指令占4个字节),最低两位是“00”,因此将immediate放进指令码中的时候,是右移了2位的,也就是以上说的“指令之间指令条数”。
12特别说明:与beq不同点是,不等时转移,相等时顺序执行。
功能:if(rs>0) pc←pc + 4 + (sign-extend)immediate <<2 else pc ←pc + 4==>跳转指令==> 停机指令三.实验原理1.时间周期:单周期CPU指的是一条指令的执行在一个时钟周期内完成,然后开始下一条指令的执行,即一条指令用一个时钟周期完成。
MIPS指令集

sw
rs rt immediate
1
memory[$2+ memory[rs
+
sw $1,10($2) 10]
(sign-extend)immediate] <- rt ;
=$1
rt=$1,rs=$2
00010
beq
rs rt immediate
0
00010
bne
rs rt immediate
1
00101
sham 00001
rd
sra $1,$2,10 $1=$2>>10 意符号位保留
t1
其中 rt=$2, rd=$1
00000
0000 00010
rd <- rt << rs ;其中 rs=$3,rt=$2,
sllv
rs rt rd
sllv $1,$2,$3 $1=$2<<$3
0
00
rd=$1
00000
6、整数乘法、除法和求余数: div、mul、rem 等等。
7、整数乘加(累加): mad 等。
8、加载和存储: lb、ld、ldl、ldr、sdl、sdr、lh、lhu、ll、sc、pref、sb 等操作。
9、浮点加载和存储: l.d、l.s、s.d、s.s 等
常用 MIPS 指令集及格式:
MIPS 指令集(共 31 条)
1、空操作:nop:相当于 sll zero,zero,o, ssnop: equals sll zero,zero,1.
这个指令不得与其它指令同时发送,这样就保证了其运行要花费至少一个时钟周期。这 在简单的流水线的 CPU 上无关紧要,但在复杂些的实现上对于实现强制的延时很有用。
自己动手写CPU之第五阶段(3)——MIPS指令集中的逻辑、移位与空指令

⾃⼰动⼿写CPU之第五阶段(3)——MIPS指令集中的逻辑、移位与空指令将陆续上传本⼈写的新书《⾃⼰动⼿写CPU》(尚未出版),今天是第17篇。
我尽量每周四篇5.4 逻辑、移位操作与空指令说明MIPS32指令集架构中定义的逻辑操作指令有8条:and、andi、or、ori、xor、xori、nor、lui。
当中ori指令已经实现了,本章要实现其余7条指令。
MIPS32指令集架构中定义的移位操作指令有6条:sll、sllv、sra、srav、srl、srlv。
MIPS32指令集架构中定义的空指令有2条:nop、ssnop。
当中ssnop是⼀种特殊类型的空操作。
在每⼀个周期发射多条指令的CPU中,使⽤ssnop指令能够确保单独占⽤⼀个发射周期。
OpenMIPS设计为标量处理器,也就是每⼀个周期发射⼀条指令,所以ssnop的作⽤与nop同样。
能够依照nop指令的处理⽅式来处理ssnop指令。
另外,MIPS32指令集架构中还定义了sync、pref这2条指令,当中sync指令⽤于保证载⼊、存储操作的顺序,对于OpenMIPS⽽⾔,是严格依照指令顺序运⾏的,载⼊、存储操作也是依照顺序进⾏的,所以能够将sync指令当作nop指令处理,在这⾥将其归纳为空指令。
pref指令⽤于缓存预取,OpenMIPS没有实现缓存,所以也能够将pref指令当作nop指令处理,此处也将其归纳为空指令。
以上17条指令依照格式、作⽤的不⽤,⼜可分为⼏类,分别说明例如以下。
1、and、or、xor、nor这4条指令的格式如图5-10所看到的。
从图中能够发现这4条指令都是R类型指令。
⽽且指令码都是6'b000000,也就是MIPS32指令集架构中定义的SPECIAL类。
此外,第6-10bit都为0,须要根据指令中0-5bit功能码的值进⼀步推断是哪⼀种指令。
当功能码是6'b100100时,表⽰是and指令。
逻辑“与”运算指令使⽤⽅法为:and rd, rs, rt指令作⽤为:rd <- rs AND rt,将地址为rs的通⽤寄存器的值。
mips指令集

mips指令集加入日期条目指令2016年3月18日1sb2li(load immediate)3la(load address)4move5nop6bal7.set8.global9mtc010or11j2016年3月19日1.align2016年3月21日1bne(branch not equal)2subu3and4sw5addiu6srl7bnez(branch not equal zero) 2016年3月26日1LB 2LH3LW4LD5L.S6L.D7SB8SH9SW10SD11S.S12S.D2016年3月28日1beq(branch equal)2sll2016年3月31日1b2 .ent3beqz(Branch if Equal Zero )2016年4月1日1sltMIPS指令集(时序)解释把一个字节的数据从寄存器存储到存储器指令用于将一个立即数存入一个通用寄存器指令用于将一个地址(或者标签)存入一个通用寄存器将一个寄存器的值传给另外一个寄存器no-operationpc相对的子程序/函数调用设置状态设置全局可见将数据从特殊寄存器复制到通用寄存器或运算,两个寄存器中的内容相或直接跳转指令,跳转的地址在指令中bne s,t,label if (s != t) goto label三操作数减运算交运算存储一个字addiu是GPR和立即数做无符号加法操作32位逻辑右移条件转移指令,当寄存器中内容不为0时转移发生从存储器中读取一个字节的数据到寄存器从存储器中读取半个字的数据到寄存器从存储器中读取一个字的数据到寄存器从存储器中读取双字的数据到寄存器从存储器中读取单精度浮点数到寄存器从存储器中读取双精度浮点数到寄存器把一个字节的数据从寄存器存储到存储器把半个字节数据从寄存器存储到存储器把一个字的数据从寄存器存储到存储器把t2寄存器中值(1 Word),存储到t0的值再减去偏移量12, 所指向的RAM 中把两个字节的数据从寄存器存储到存储器把单精度浮点数从寄存器存储到存储器把双精度数据从存储器存储到存储器if (s == t) goto lable左移转移到标签告诉assembler将这一点标志为“name”函数的起始点,为调试提供信息。
mips汇编语言指令

mips汇编语言指令MIPS(Microprocessor without Interlocked Pipeline Stages)是一种精简指令集(RISC)架构的计算机处理器。
它的指令集被广泛应用于各种领域,包括嵌入式系统、操作系统和编译器等。
本文将介绍一些常见的MIPS汇编语言指令。
1. 加载和存储指令MIPS提供了一系列用于数据传输的指令。
其中,lw(load word)指令用于从内存中加载一个字(32位数据)到寄存器中,sw(store word)指令用于将一个字存储到内存中。
例如,lw $t0, 0($s0)表示将从地址$s0偏移量为0的内存位置加载一个字到$t0寄存器中。
2. 算术和逻辑指令MIPS提供了一系列用于算术和逻辑运算的指令。
例如,add指令用于将两个寄存器中的值相加,并将结果存储到目标寄存器中。
而and 指令用于对两个寄存器中的值进行按位与操作,并将结果存储到目标寄存器中。
例如,add $t0, $s0, $s1表示将$s0和$s1中的值相加,并将结果存储到$t0寄存器中。
3. 分支和跳转指令MIPS提供了一系列用于控制程序流程的指令。
其中,beq(branch if equal)指令用于在两个寄存器中的值相等时跳转到目标地址。
而j (jump)指令用于无条件跳转到目标地址。
例如,beq $t0, $t1, label表示如果$t0和$t1中的值相等,则跳转到标签为label的位置。
4. 移位指令MIPS提供了一系列用于移位操作的指令。
其中,sll(shift left logical)指令用于将一个寄存器中的值左移指定的位数,并将结果存储到目标寄存器中。
例如,sll $t0, $s0, 2表示将$s0中的值左移2位,并将结果存储到$t0寄存器中。
5. 系统调用指令MIPS提供了一系列用于进行系统调用的指令。
其中,syscall指令用于触发系统调用,并根据不同的系统调用号执行相应的操作。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
深圳大学实验报告课程名称:计算机系统(3) 实验项目名称: MIPS指令集实验学院:计算机与软件学院专业:计算机与软件学院所有专业指导教师: ***** 报告人: ******* 学号: ********** 班级: ******* 实验时间: 2017年10月16日星期一实验报告提交时间: 2017年10月19日星期四教务处制一、实验目标:了解WinMIPS64的基本功能和作用;熟悉MIPS指令、初步建立指令流水执行的感性认识;掌握该工具的基本命令和操作,为流水线实验作准备。
二、实验内容按照下面的实验步骤及说明,完成相关操作记录实验过程的截图:1)下载WinMIPS64;运行样例代码并观察软件各个观察窗口的内容和作用,掌握软件的使用方法。
(80分)2)学会正确使用WinMIPS64的IO方法;(10分)3)编写完整的排序程序;(10分)三、实验环境硬件:桌面PC软件:Windows,WinMIPS64仿真器四、实验步骤及说明WinMIPS64是一款指令集模拟器,它是基于WinDLX设计的,如果你对于WinDLX这款软件十分熟悉的话,那么对于WinMIPS64也会十分的容易上手。
DLX 处理器 (发音为 "DeLuXe")是Hennessy 和Patterson合著一书《Computer Architecture - A Quantitative Approach》中流水线处理器的例子。
WinDLX是一个基于Windows的模拟器。
本教程通过一个实例介绍WinMIPS64的使用方法。
WinMIPS64模拟器能够演示MIPS64流水线是如何工作的。
本教程使用的例子非常简单,它并没有囊括WinMIPS64的各个方面,仅仅作为使用WinMIPS64的入门级介绍。
如果你想自己了解更多的资料,在给出的winmips64.zip中,有WinMIPS64 — Documentation Summary.html和winmipstut.docx两个文件可以供你随时参考,其中涵盖了WinMIPS64的指令集和模拟器的组成与使用方法。
虽然我们将详细讨论例子中的各个阶段,但你应具备基本的使用Windows的知识。
现假定你知道如何启动 Windows,使用滚动条滚动,双击执行以及激活窗口。
(一)、安装请按以下步骤在Windows下安装WinMIPS64 :1.为WinMIPS64 创建目录,例如D:\ WinMIPS64 2.解压给出的winmips64.zip压缩文件到创建的目录中。
(二)、一个完整的例子1.开始和配置WinMIPS64在winmips64这个子目录下,双击winmips64.exe文件,即打开了WinMIPS64模拟器,其外观如下图:为了初始化模拟器, 点击File菜单中的Reset all(Ctrl+R)菜单项即可。
WinMIPS64可以在多种配置下工作。
你可以改变流水线的结构和时间要求、存储器大小和其他几个控制模拟的参数。
点击Configuration/Floating Point Stages(点击Configuration打开菜单,然后点击Architecture菜单项),选择如下标准配置:如果需要,可以通过点击相应区域来改变设置。
然后,点击OK返回主窗口。
在Configuration菜单中的其他四个配置也可以设置,它们是:Multi-Step, Enable Forwarding, Enable Branch Target Buffer 和Enable Delay Slot。
点击相应菜单项后,在它的旁边将显示一个小钩。
本次实验要求不要勾选“Enable Forwarding”。
2. 装载测试程序用标准的text编辑器来新建一个名为sum.s的文件,这个文件的功能是,计算两个整数A、B之和,然后将结果传给C。
程序如下:.dataA: .word 10B: .word 8C: .word 0.textmain:ld r4,A(r0)ld r5,B(r0)dadd r3,r4,r5sd r3,C(r0)halt在将该程序装载进WinMIPS64之前,我们必须用asm.exe来检验该输入程序的语法正确性。
asm.exe程序文件在所给的winmips压缩包里有,用命令行使用它。
具体操作为,打开终端,利用cd命令进到D:\ WinMIPS64目录中,然后直接使用asm.exe sum.s命令,检查输出结果是否无误。
在开始模拟之前,至少应装入一个程序到主存。
为此,选择File / OPEN,窗口中会列出当前目录中所有汇编程序,包括sum.s。
按如下步骤操作,可将这个文件装入主存。
∙点击sum.s∙点击open 按钮现在,文件就已被装入到存储器中了,现在可以开始模拟工作了。
你可以在CODE窗口观察代码内容,可以在DATE窗口观察程序数据了。
3. 模拟在主窗口中,我们可以看见七个子窗口,和一条在底部的状态栏。
这七个子窗口分别是Pipeline, Code, Data, Registers, Statistics, Cycles和Terminal。
在模拟过程中将介绍每一个窗口的特性和用法。
(1) Pipeline窗口在Pipeline窗口中,展示了MIPS64处理器的内部结构,其中包括了MIPS64的五级流水线和浮点操作(加法/减法,乘法和除法)的单元。
展示了处于不同流水段的指令。
(2) Code窗口我们来看一下Code窗口。
你将看到代表存储器内容的三栏信息,从左到右依次为:地址 (符号或数字)、命令的十六进制机器代码和汇编命令。
我们可以看到,初始时,第一行为黄色,表示该行指令处于“取指”阶段。
现在,点击主窗口中的Execution开始模拟。
在出现的下拉式菜单中,点击Single Cycle 或按F7键。
这时,第一行变成了了蓝色,第二行变成了黄色,这表示第一行指令处于“译码”阶段,而第二行指令处于“取指”阶段。
这些不同的颜色代表指令分别处于不同的流水线阶段。
黄色代表“取指”,蓝色代表“译码”,红色代表“执行”,绿色代表“内存数据读或写”,紫色代表“写回”。
接着按F7,直到第五个时钟周期的时候,有趣的事情发生了,“dadd r3,r4,r5”指令没有从“译码”跳到其下一个流水阶段“执行”,并且“sd r3,C(r0)”指令,仍然停留在“取指”阶段,同时在terminal窗口显示一行信息“RAW Stall in ID (RS)”,思考一下这是为什么?(3) Cycls窗口我们将注意力放到Cycls窗口上。
它显示流水线的时空图。
在窗口中,你将看到模拟正在第五时钟周期,第一条指令正在WB段,第二条命令在MeM 段,第四条命令在处于暂停状态(installed),第五条指令也因此停滞不前。
这是因为发生了数据相关(第四条指令的dadd命令需要用到寄存器r5的值,但是r5的值并不可用)。
接着点击F7,到第五个时钟周期时,再次发生相关,造成停滞。
接着点击F7,直至第十三个时钟周期全部指令执行结束。
值得一提的是,Cycls窗口是分为两个子窗口的,左边的子窗口是一系列的指令,右边的窗口是图示的指令执行过程。
其中,左边子窗口的命令是动态出现的,当一条指令在进行“取指”时,该指令才出现,而且,当出现了数据相关的时候,所涉及到的指令会变色,暂停的指令会变成蓝色,而被其影响的后续指令会变成灰色。
(4) Data窗口在Data中,我们可以观察到内存中的数据,包括数据内容和地址两个方面,其中地址使用64位表示。
如果想改变一个整型的数据的值,左键双击该值所在的行,如果是想改变一个浮点类型的数据的值,那么请右键双击该值所在的行。
上图即为第十三个时钟周期的data窗口的图示,其中,左边一行即为用64位表示的内存地址,中间行为数据的内容,右边的一行为相关的代码。
可以看出,在这个时钟周期,A与B 的值分别为0xa和0x8,C的值为0x12,表明A与B的值之和已经相加并保存到了C中。
(5) Registers窗口这个窗口显示存储在寄存器中的值。
如果该寄存器为灰色,那么它正处于被一条指令写入的过程,如果它用一种颜色表示,那么就代表,该颜色所代表的的流水线阶段的值可以用来进行前递(forwarding)。
同时,这个窗口允许你交互式的该变寄存器的值,但是前提是该寄存器不能处于被写入或者前递的阶段。
如果想改变一个整型的数据的值,左键双击该值所在的行,如果是想改变一个浮点类型的数据的值,那么请右键双击该值所在的行,然后按OK来进行确定。
上图即为第十三个时钟周期的Registers窗口的图示,很显然,其中可以很清楚的看出每个寄存器的值是什么。
(6)Statistics窗口最后我们来看一下Statistics窗口。
这个窗口是用来记录一些模拟周期的统计数据。
其中包括Execution,Stalls,和Code Size三个大项。
其中,Execution用来显示模拟周期中指令数,执行周期数和CPI(没条指令所用周期数),Stalls用来表示暂停的周期数,并且分门别类的进行了统计,其中包括RAW Stalls,WAW Stalls,WAR Stalls, Structural Stalls, Branch Taken Stalls和Branch misprediction Stalls。
Code Size表示了代码的大小,用byte表示。
上图即为Statistics窗口的图示,其中表示了该程序有13个时钟周期,5条指令,CPI 为2.600,有4个RAW Stalls,代码大小为20个Bytes。
(三)、更多操作首先,点击File/Reset MIPS64(ctrl + R)进行重置。
如果你点击File/Full Reset,你将删除内存中的数据,这样你就不得不重新装载文件,所以点击File/Reload(F10)是一个很方便的重置的方法。
你可以一次推进多个时钟周期,方法是点击Execute/Multi cycle(F8),而多个时钟周期数是在Configure/Multi-step中设置的。
你也可以通过按F4一次完成整个程序的模拟。
同时,你可以设置断点,方法是,在Code 窗口中左键双击想要设置断点的指令,该指令会变成蓝色,然后点击F4,程序就会停在这条指令执行“ 取指”的阶段,如果想要清除断点,再次左键双击改行指令。
(四)、终端I/O的简单实例通过上面对WinMIPS64的了解,我们可以开始简单的使用该工具了。
这里,需要我们编写一个简单的终端输出“Hello World!!”的小程序,运行并且截图。
所以,我们需要了解如何将数据在终端中输出输入。
下图是I/O区域的内存映射,一个是控制字,一个是数据字:所以我们需要先将CONTROL和DATA地址读取到寄存器,然后分别在这两个区域内存储相应的序列号(如上图所示)和要显示在Terminal窗口的数据,同时,设置CONTROL为9,我们能对其进行读取数据。