【P2】MARS使用/MIPS汇编
课上
T1 在n位数中删除N个数使剩下的(n-N)位数最大
写得似乎过于谨慎而慢了,没出现寄存器打错的问题,一遍过了
T2 拆分数字
将输入整数N拆分为几个数相加的形式,按拆分项数降序排列,每项按数字大小升序排列(giao记不清了)
输入
5
输出
1+1+1+1+1
1+1+1+2
1+1+3
1+2+2
1+4
递归
js+函数调用
讲真算法没看懂,就硬敲
bug1
print:执行完后忘记jal $ra返回
- 运行一下就能看出
bug2
自认为jal print调用规避了已用寄存器而没进行变量维护 -> $ra被覆盖 -> 返回地址错误,js反复退出回收栈,却不分配栈 -> $sp不断增大,最终指向.text段导致错误跳出
- 从报错信息和
$sp异常容易看出
bug3
自认为给print传参时将t-1值存入了$a0,且之后从if块跳出后进入for块内并没有更改$a0,因而为了省指令数在产生a[t-1]地址时直接用了sll $t1, $a0, 2,殊不知if块未必每次都能进入!加上存在多次递归传参后$a0未必是t-1 -> 样例的输出变成
1+1+1+1+1
1+1+1+2
1+1+2+1
1+1+3 //这里开始记不清了
1+3+1
1+2+2
1+4
在不理解算法的情况下,遇到这个输出属实是丈二和尚摸不着脑袋。
- 单步调试点下来,定位到了输出
1+1+2+1时a数组地址内容就是1 1 2 1 1; - 回退确定该步具体运行位置,确认问题出在for循环中;
- 然后发现
a[3]被从1改为2(本该改为3); - 查看循环变量i(存在
$t0)的值,确实有过3出现,又因为i>=t(t为2,存在$s2)而跳出循环; - 想不通,有点怀疑代码本身问题,心例纠结是去尝试看懂算法从还是直接检查翻译;
- 心急火燎下这种递归C代码看不懂了。。转而检查翻译,压根没有翻译错误(自己写的那么谨慎,质量可高了xs);
- 慌了手脚乱提交了这份问题代码,竟然还过了两个点,似乎说明问题不在主要逻辑上,可能出现在旁支寄存器覆盖上
- 突然想道当时偷懒用了
$a0似乎很可能出漏洞,和错误的相性很高。改后就对了
前后花了1h不到一点,人已经冒烟
即将21:00,急忙交卷;然而发现这次P2结束时间是21:30,人傻了
T3 双关键字排序
回头看了眼题目,虽然C代码要自己写,但就常用排序多加个判断条件罢了。没有递归,完全可以不用栈维护。30min大概率足够。
总之就是亏大了,信息接收要全面啊,长个记性吧
【P2】MARS使用/MIPS汇编的更多相关文章
- MIPS汇编学习
MIPS汇编学习 mips汇编不同于x86汇编,属于精简指令集,常见于路由器等一些嵌入式设备中. mips汇编没有对堆栈的直接操作,也就是没有push和pop指令,mips汇编中保留了32个通用寄存器 ...
- MIPS汇编及模拟器下载
1. 简述汇编语言发展 在计算机发展初期,人们用0-1序列来表示每一条语言,亦即二进制的机器指令 由于机器指令过于繁琐,程序员们开发出了一种新的语言,这种用符号表示的计算机语言被称为汇编语言 计算机继 ...
- MIPS汇编指令集
MIPS有三种指令格式: R型 6 5 5 5 5 6 op rs rt rd shamt funct 功能:寄存器-寄存器ALU操作 (算术运算,逻辑运算) I型 6 5 5 16 op rs rt ...
- iot漏洞mips汇编基础
1 基础概念 MIPS(Microprocessor without Interlocked Piped Stages architecture),是一种采取精简指令集(RISC)的处理架构,由MIP ...
- 计算机系统6-> 计组与体系结构3 | MIPS指令集(中)| MIPS汇编指令与机器表示
上一篇计算机系统5-> 计组与体系结构2 | MIPS指令集(上)| 指令系统从顶层讲解了一个指令集 / 指令系统应当具备哪些特征和工作原理.这一篇就聚焦MIPS指令集(MIPS32),看看其汇 ...
- MIPS 汇编指令学习
MIPS 寄存器 MIPS comes with 32 general purpose registers named $0. . . $31Registers also have symbolic ...
- MIPS汇编程序设计——四则运算计算器
实验目的 运用简单的MIPS实现一个能够整数加减乘除的计算器,同时使自己更加熟悉这些指令吧 MIPS代码 #sample example 'a small calculater’ # data sec ...
- 【原创】MIPS中断系统的板级验证及实例测试
“五一”假期前后这约五天时间,终于将MIPS中断系统进行了板级验证及实例测试.因为老师给的交叉编译工具不会用,所以测试代码完全用MIPS汇编编写.使用MARS而没有用QtSpim,其实我觉得SPIM这 ...
- 计算机系统5-> 计组与体系结构2 | MIPS指令集(上)| 指令系统
系列的上一篇计算机系统4-> 计组与体系结构1 | 基础概念与系统评估,学习了一些计算机的基础概念,将一些基本的计算机组成部分的功能和相互联系了解了一下,其中很重要的一个抽象思想就是软硬件的接口 ...
- learn mips
可以使用MARS来编汇编,MARS是一个用java编的IDE,它是一个模拟环境. 样例:重要的句子输出三遍 .data str: .asciiz "weidiao is great\n&qu ...
随机推荐
- mac 10.15 国内如何安装brew
下载文件 brew_install.sh,然后执行 sh brew_install.sh 通常会卡在 tapping homebrew/core ,没关系, 执行如下命令即可 解决方法,手动执行下面 ...
- Linux sudo 提权之软链接攻击
软链接提权的原理 低权限用户能够以 root 用户的权限执行某个脚本,该脚本中又使用到了诸如 chown 等命令修改文件的权限,且该文件又能够被低权限的用户所修改.因此低权限的用户可以删除该文件,然后 ...
- Qt音视频开发12-mpv解码播放
一.前言 之前玩了vlc解码和ffmpeg解码,前阵子有个客户需要换成mpv解码,于是研究了下mpv的使用方法,自从用了mpv以后发现爱不释手,这玩意天生适合极客和程序员啊,居然将各种处理封装成了命令 ...
- [转]Spring Security打造一个简单Login登录页面,实现登录+跳转+注销+角色权限功能,核心代码不到100行!
原文链接:Spring Security打造一个简单Login登录页面,实现登录+跳转+注销+角色权限功能,核心代码不到100行!
- SSM或Spring Boot开发中,mapper包中的mapper.xml没有编译到targger中的解决办法
SSM或Spring Boot开发中,mapper包中的mapper.xml没有编译到targger中的解决办法 在pom文件中加入如下配置: <resources> <!-- 编译 ...
- 命名空间“System.Web.UI.Design”中不存在类型或命名空间名称“ControlDesigner”
命名空间"System.Web.UI.Design"中不存在类型或命名空间名称"ControlDesigner" 命名空间"System.Web.UI ...
- 【OpenGL ES】GLSL基础语法
1 前言 本文将介绍 GLSL 中数据类型.数组.结构体.宏.运算符.向量运算.矩阵运算.函数.流程控制.精度限定符.变量限定符(in.out.inout).函数参数限定符等内容,另外提供了一个 ...
- 『AotuHotKey』——一个小巧却高效的实用效率工具
[!note] 本来主要是想找一下「」和『』,然后这个方法直接可以找到大部分的特殊字符 通过输入法输出 『Ctr + shift + Z』进入搜狗输入法的『符号大全』 在『标点符号』项可以找到「」和『 ...
- 题解:CF727F Polycarp's problems
link. 贪心做法. 本题贪心做法的实质就是用整数尽量多地抵消该整数后面的负数. 如果正着做,没有办法考虑全该数后面的所有负数,所以倒着做. 例如当前遍历到了 \(50\),此时序列如下: \[\d ...
- java-文件输入输出处理
--------------------------------------------------- 1.File类 File类是IO包中唯一代表磁盘文件本身的对象,File类定义了一些与平台无关的 ...