实验一: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。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/223650.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Unity中Batching优化的GPU实例化(1)

文章目录 前言一、GPU实例化的规则1、必须满足 Mesh 网格一样2、只有OpenGL es 3.0及以上才支持(3.0及以上有部分硬件可能也不支持) 二、GPU实例化的应用场景1、公开几个成员属性,用于存放可以调整的数据2、用Random.insideUnitCircle随机生成…

ansible常用模块介绍

ansible运行模块的两种方式 Ad - Hoc 利用 ansible 命令直接完成管理 , 主要用于临时命令使用场景 ansible westos -m shell -a ls /mnt playbook ansible 脚本 , 主要用于大型项目场景 , 需要前期的规划 vim test.yml - hosts: all task…

【后端】JVM 远程调试

前言 再好的代码,也还是有瑕疵的,不是代码不给力,是线上问题太牛逼太玄幻。这不刚部署就出现了问题,幸好还是测试的时候,早点发现早点解决,不给任何人带来不必要的损失,是我做人的原则,只要钱到位,任何问题都不是问题。 JVM 远程调试 不得不说 IDEA 和 宝塔配合是真…

Windows驱动中使用数字签名验证控制设备访问权限

1. 背景 在一般的驱动开发时,创建了符号链接后在应用层就可以访问打开我们的设备并进行通讯。 但我们有时候不希望非自己的进程访问我们的设备并进行交互,虽然可以使用 IoCreateDeviceSecure 来创建有安全描述符的设备,但大数的用户账户为了方…

多人聊天室

1.创建服务面板 package yiduiy;import java.awt.BorderLayout; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; import java.util.Has…

STM32串口接收数据包(自定义帧头帧尾)

1、基本概述 本实验基于stm32c8t6单片机,串口作为基础且重要的外设,具有广泛的应用。本文主要理解串口数据包的发送与接收是如何实现的,重要的是理解程序的实现思路。 2、关键程序 定义好需要用到的变量: uint8_t rxd_buf[4];//…

Gti GUI添加标签

通过Git Gui打开项目,通过菜单打开分支历史,我这里是名为"develop"的分支 选中需要打标签的commit,右键-Create tag即可 但貌似无法删除标签,只能通过git bash

MySQL之锁

MySQL之锁 锁是计算机在执行多线程或线程时用于并发访问同一共享资源时的同步机制,MySQL中的锁是在服务器层或者存储引擎层实现的,保证了数据访问的一致性与有效性 MySQL锁可以按模式分类为:乐观锁与悲观锁。 按粒度分可以分为全局锁、表级锁…

Python pass语句及其作用及(for和while)循环嵌套及用法

Python pass语句及其作用 很多程序都提供了“空语句”支持,Python 也不例外,Python 的 pass 语句就是空语句。 有时候程序需要占一个位、放一条语句,但又不希望这条语句做任何事情,此时就可通过 pass 语句来实现。通过使用 pass …

设计一算法,对单链表实现就地逆置

对单链表逆置,要联想到单链表的头插性质 举个例子:现在有一个空链表,我们依次对它进行头插123 那么形成的链表是321,这样就形成了逆置 //单链表就地逆置 //思路:把原表接到一个新表上,然后对原表进行头插 …

Nero刻录光盘软件-极好用

目录 一、下载Nero 二、软件安装 三、刻录数据 前言 刻录之前准备一张新的光盘,之前一旦使用过,就无法刻录,一定要新的光盘。 一、下载Nero nero官网下载地址:Nero下载 csdn免费下载地址:https://download.csdn.…

今日现货黄金最新建议

近期现货黄金价格再度逼近历史高位,很多本来在场外观望的投资者,都纷纷希望进场一试身手。然而大涨大跌的行情并不是很适合新手投资者参与,如果大家还没做好技术上的准备,可以多听听正规交易平台的专业人士的意见。 在正式入市之前…

重磅!苹果官方发布大模型框架:一个可以充分利用苹果统一内存的新的大模型框架MLX,你的MacBook可以一键运行LLaMA了

本文来自DataLearnerAI官方网站:重磅!苹果官方发布大模型框架:一个可以充分利用苹果统一内存的新的大模型框架MLX,你的MacBook可以一键运行LLaMA了 | 数据学习者官方网站(Datalearner)https://www.datalearner.com/blog/105170187…

西工大计算机学院计算机系统基础实验一(函数编写1~10)

还是那句话,千万不要慌,千万不要着急,耐下性子慢慢来,一步一个脚印,把基础打的牢牢的,一样不比那些人差。回到实验本身,自从​​​​​​按照西工大计算机学院计算机系统基础实验一(…

CMMI5大成熟度等级和4大过程域

CMMI(Capability Maturity Model Integration,能力成熟度模型集成)模型系列是帮助组织改进其过程的最佳实践的集合。这些模型由来自产业界、政府以及软件工程研究所(Software Engineering Institute, SEI)的…

2024年十大最好猫罐头有哪些?2024年10款最好的猫罐头盘点

我发现不少人有这样的困扰!买到各种数值都很好的猫罐头后,猫咪一点都不吃。或者是猫咪吃了猫罐头之后,吃了一段时间后就软便身体不舒服。 通过本文,我将与大家盘点2024年10款最好的猫罐头,并提供一些选购猫罐头的小妙招…

JavaSE基础50题:6. 求出0~999之间的所有“水仙花数”并输出

概念 “水仙花数”是指一个三位数,其各位数字的立方和确好等于该数本身。 如:153 135333,则153是一个“水仙花数”。 【方法】 如何获得每一位的数:如(153) 个位: 153 % 10 3 十位: 153 / 10 15 15 % 10 5 百位: 153 / 100 1 代码 pu…

SimplePIR——目前最快单服务器匿踪查询方案

一、介绍 这篇论文旨在实现高效的单服务器隐私信息检索(PIR)方案,以解决在保护用户隐私的同时快速检索数据库的问题。为了实现这一目标,论文提出了两种新的PIR方案:SimplePIR和DoublePIR。这两种方案的实现基于学习与错…

浅谈基于Pytest框架的自动化测试开发实践

Pytest是Python的一种易用、高效和灵活的单元测试框架,可以支持单元测试和功能测试。本文不以介绍Pytest工具本身为目的,而是以一个实际的API测试项目为例,将Pytest的功能应用到实际的测试工程实践中,教大家将Pytest用起来。 在开…

JFrog Artifactory—高性能软件制品管理仓库

产品概述 JFrog Artifactory是一个可扩展的通用二进制存储库管理器,可在整个应用程序开发和交付过程中自动管理工件和依赖项。JFrog Artifactory支持大多数开发语言,是整个DevOps流水线中大多数软件包、容器映像和Helm图表的单一数据源。Artifactory对元…