课上

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+函数调用print。总体写得顺畅,质量也不错。然而一个致命小bug玩崩了心态

讲真算法没看懂,就硬敲

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汇编的更多相关文章

  1. MIPS汇编学习

    MIPS汇编学习 mips汇编不同于x86汇编,属于精简指令集,常见于路由器等一些嵌入式设备中. mips汇编没有对堆栈的直接操作,也就是没有push和pop指令,mips汇编中保留了32个通用寄存器 ...

  2. MIPS汇编及模拟器下载

    1. 简述汇编语言发展 在计算机发展初期,人们用0-1序列来表示每一条语言,亦即二进制的机器指令 由于机器指令过于繁琐,程序员们开发出了一种新的语言,这种用符号表示的计算机语言被称为汇编语言 计算机继 ...

  3. MIPS汇编指令集

    MIPS有三种指令格式: R型 6 5 5 5 5 6 op rs rt rd shamt funct 功能:寄存器-寄存器ALU操作 (算术运算,逻辑运算) I型 6 5 5 16 op rs rt ...

  4. iot漏洞mips汇编基础

    1 基础概念 MIPS(Microprocessor without Interlocked Piped Stages architecture),是一种采取精简指令集(RISC)的处理架构,由MIP ...

  5. 计算机系统6-> 计组与体系结构3 | MIPS指令集(中)| MIPS汇编指令与机器表示

    上一篇计算机系统5-> 计组与体系结构2 | MIPS指令集(上)| 指令系统从顶层讲解了一个指令集 / 指令系统应当具备哪些特征和工作原理.这一篇就聚焦MIPS指令集(MIPS32),看看其汇 ...

  6. MIPS 汇编指令学习

    MIPS 寄存器 MIPS comes with 32 general purpose registers named $0. . . $31Registers also have symbolic ...

  7. MIPS汇编程序设计——四则运算计算器

    实验目的 运用简单的MIPS实现一个能够整数加减乘除的计算器,同时使自己更加熟悉这些指令吧 MIPS代码 #sample example 'a small calculater’ # data sec ...

  8. 【原创】MIPS中断系统的板级验证及实例测试

    “五一”假期前后这约五天时间,终于将MIPS中断系统进行了板级验证及实例测试.因为老师给的交叉编译工具不会用,所以测试代码完全用MIPS汇编编写.使用MARS而没有用QtSpim,其实我觉得SPIM这 ...

  9. 计算机系统5-> 计组与体系结构2 | MIPS指令集(上)| 指令系统

    系列的上一篇计算机系统4-> 计组与体系结构1 | 基础概念与系统评估,学习了一些计算机的基础概念,将一些基本的计算机组成部分的功能和相互联系了解了一下,其中很重要的一个抽象思想就是软硬件的接口 ...

  10. learn mips

    可以使用MARS来编汇编,MARS是一个用java编的IDE,它是一个模拟环境. 样例:重要的句子输出三遍 .data str: .asciiz "weidiao is great\n&qu ...

随机推荐

  1. Netty 中ChannelOption的含义以及使用的场景Netty 中ChannelOption的含义以及使用的场景

    一.概述 最近在写一个分布式服务框架,打算用netty框架做底层网络通信,关于netty的学习可以参考如下资料: http://blog.csdn.net/column/details/enjoyne ...

  2. java 随机生成字符串 RandomStringUtils

    使用RandomStringUtils,可以选择生成随机字符串,可以是全字母.全数字或自定义生成字符等等... 其最基础的方法如下: public static String random(int c ...

  3. Qt/C++原创推流工具/支持多种流媒体服务/ZLMediaKit/srs/mediamtx等

    一.前言 1.1 功能特点 支持各种本地视频文件和网络视频文件. 支持各种网络视频流,网络摄像头,协议包括rtsp.rtmp.http. 支持将本地摄像头设备推流,可指定分辨率和帧率等. 支持将本地桌 ...

  4. 问题:Opencv(3.1.0/3.4)找不到 /opencv2/gpu/gpu.hpp 问题

    解决:Opencv(3.1.0/3.4/4.1.0)找不到 /opencv2/gpu/gpu.hpp 问题 环境: 系统:Win10 环境:Opencv3.4.0/4.1.0 显卡:1080ti 问题 ...

  5. SSM或Spring Boor开发中@Repository和@Mapper的区别

    在做一个SpringBoot项目的时候在Dao层使用了@Repository注解然后报了这个错: Description: Field userService in com.example.demo. ...

  6. Python格式化字符串字面值 | 被官方文档称之为『漂亮』的输出格式

    Python格式化字符串字面值 | 被官方文档称之为『漂亮』的输出格式 本文参考输入输出 - Python 3.7.10 文档.首先声明咱的实验环境. ❯ python --version Pytho ...

  7. 回顾 2024 年 12 个月的C#/.NET/.NET Core优秀项目和框架简报

    前言 今天咱们一起来回顾一下 2024 年 12 个月的C#/.NET/.NET Core优秀项目和框架简报,看看是否有适合你学习和参考的项目和框架. 简报初衷 公众号每月定期推广和分享的C#/.NE ...

  8. G1原理—6.G1垃圾回收过程之Full GC

    大纲 1.FGC的一些前置处理 2.FGC的整体流程 3.传统FGC只能串行化 + G1的FGC可以并发化 4.并行化FGC之并行标记 + 任务窃取 5.并行化FGC之跨分区压缩 + 避免对象跨分区 ...

  9. C# 调用FFmpeg 合并视频和音频

    C#修改环境变量: string pathStr = System.Environment.GetEnvironmentVariable("Path", EnvironmentVa ...

  10. Java接口-详解

    一.基本概念 接口(Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合.接口通常以interface来声明.一个类通过继承接口的方式,从而来继承接口的抽象方法. 如果一个类只由 ...