mips相关内容

$ra 注册被调用者保存还是调用者保存在 mips 中?

我读过保留的寄存器是调用者保存的,非保留的寄存器是被调用者保存的.但在我看来,$ra,一个保留的寄存器,是调用者保存的,因为调用者保存了它必须返回的地址.任何人都可以解释我缺少什么吗? 解决方案 我读过保留的寄存器是调用者保存的,未保留的寄存器是被调用者保存的. 这可能不是最好的陈述方式,而且可能是造成混乱的根源.这是一个更好的方法: 一个函数(即被调用者)必须保留 $s0 ..
发布时间:2021-11-17 01:57:17 其他开发

递归函数如何在 MIPS 中工作?

我是 MIPS 的新手(当我开始为我的大学学习 MIPS 汇编时),我在理解 MIPS 中递归函数的工作原理方面遇到了问题. 例如,我有这个程序(用 C 语言)用 MIPS 编写: int fact (int n){如果 (n 有人可以用这个或另一个递归函数的例子帮助我并解释它是如何工作的吗? 解决方案 我想分享的第一件事是,将其转换为 MIPS 的复杂性来自于单纯的函数调用, ..
发布时间:2021-07-05 19:19:26 其他开发

如何在 MIPS 中删除换行符?

所以我正忙于编写一个 MIPS 程序,它将接受一个输入字符串,然后打印该字符串的所有可能的唯一排列.(也就是如果这个词是 LoOp,LoOp 和 LOop 是一样的). 为了做到这一点,我知道我不需要在输入字符串的末尾有换行符,但我不知道要确保它没有被添加.这是我目前所拥有的: .data新队:.asciiz "\n"用户提示:.asciiz "输入不超过 20 个字母的单词:\n"单词: ..
发布时间:2021-06-07 19:59:05 其他开发

MIPS32 上 32 位整数数组的 64 位平方和

我必须在 Mips 程序集中计算数组的平方和.我正在寻找对我的代码的反馈.下面发布的代码只是一个开始,没有考虑可能的溢出情况.但是,我只是想确保这个基本代码块按预期工作 #计算平方和的函数## 输入:# $a0: 数组在内存中的地址 (*a)# $a1: 数组大小 (n)## 输出:# $v0: 结果的低 32 字节# $v1: 结果的高 32 字节## 如果数组为空,则函数返回零.#平方和:环 ..
发布时间:2021-06-02 22:21:18 其他开发

如何将存储的字符串与输入的字符串进行比较-MIPS

我正在编写一个程序,询问用户他们的温度,然后获取该输入并转换和输出所有四个温度.我需要帮助让我的用户输入读入,以便它可以在我的分支中工作,beq.我无法将输入 'f' 识别为等于存储的版本. .datatemptype: .asciiz "输入温度类型,即 f, c, k, r: "tempdegree: .asciiz "\n 输入度数:"空间:.space 2tempx: .asciiz “ ..
发布时间:2021-06-02 22:21:14 其他开发

有一个整数并在 MIPS 中打印出十六进制

如果我有一个整数,将整数打印为十六进制的代码行是什么?我知道您使用 34 作为命令,但我不确定其余部分 解决方案 您所指的“34"是 mars 模拟器中“以十六进制打印整数"的系统调用号. 系统调用参考是:http://courses.missouristate.edu/kenvollmar/mars/help/syscallhelp.html 假设您的号码在寄存器中,例如 $ ..
发布时间:2021-06-02 22:21:09 其他开发

如何计算 MIPS 中奇数正整数的总和?

如何计算 MIPS 中奇数正整数的总和?我家里有一个 MIPS 模拟器,我用来预订来帮助验证我的工作.我的大学有一个计算机实验室,其硬件由外部公司提供.我认为这个想法是大学通过课程向学生“拉皮条".对我来说,部分问题是我想验证我的代码是否正常工作,而在学校使用董事会时,但在家验证代码似乎更容易.无论如何,我认为代码应该是这样的: andi $t8, $s0, 1 #value from $s0 ..
发布时间:2021-06-02 22:21:06 其他开发

la 指令在 MIPS 中是如何翻译的?

我知道 MIPS 中的 la 分解为 lui 和 ori 但这些指令的参数是什么? 我在这里查看了这个问题 MIPS 伪指令,替换但结果lui 总是使用 4097? 考虑以下事项: .data_a: .space 4.文本主要: la $s0,_a 翻译成这个了吗? lui $at,4097原 $s0,$at,0 谢谢! 解决方案 4097 十进制是 0x1001.这 ..
发布时间:2021-06-02 22:21:03 其他开发

从 C 到 MIPS 的 mips 上的数组?

B[8] = A[i-j]; 在尝试将上述 C 表达式转换为 MIPS 时如何使用数组?我想的是这样的: lw $t0, 16 ($s7)子 $t1, $s3, $s4lw $t2, $t1 ($s6) 考虑到 $s6 持有 A$s7 --- B$s3----我和 $s4 -- j 但我不确定如何进行计算以实际获得 A [i-j] 有什么建议吗? 解决方案 好吧,首先,16 ..
发布时间:2021-06-02 22:20:59 其他开发

在 MIPS 中编写迭代

我正在用 MIPS 编写这个程序来计算 2 的幂,然后将顺序幂求和为 0.例如,如果我像下面的代码一样将 4 放入 $a0 中,我希望它计算(4^2)+(3^2)+(2^2)+(1^2) 应该是 15.它应该在它达到零之前停止.这是我目前写的内容 主要:addi $a0, $zero, 4 #put k in $a0 在这种情况下addi $a1, $zero, 0 #在当前总和中输入0addi ..
发布时间:2021-06-02 22:20:56 其他开发

为什么是 `addi $reg, $0, N` 而不是 `li $reg N`?

我正在通过网上找到的资源自己学习 MIPS*,看到很多人在做 addi $reg, $0, N 来存储数值 N一个寄存器 $reg,我想知道为什么当 li $reg N 可以这样做时它如此普遍. 我错过了什么? *(所以不要对我所学的内容进行详尽而易于理解的解释) 解决方案 Assembler 具有: 指令——.text、.data、.align 2、其他 标签——ma ..
发布时间:2021-06-02 22:20:53 其他开发

汇编器和符号表的目的是什么?符号的地址是什么?

来自我的教科书: 要生成汇编语言程序中每条指令的二进制版本,汇编程序必须确定所有标签对应的地址.汇编器在符号表中跟踪分支和数据传输指令中使用的标签.如您所料,该表包含符号和地址对. 为什么需要符号表?如果我们有一个带有标签名称和地址的符号表,那么地址有什么用呢?地址是什么……只是标签的名称?还是标签的说明? 假设我们在汇编 MIPS 中有这样的指令: add_numbers:a ..
发布时间:2021-06-02 22:20:49 其他开发

遍历 mips 程序集数组的最简单方法是什么?

我想以最干净的方式复制这个 在蟒蛇中 A = [0,0,0,0,0]我 = 0而(我!= 5):A[i] = 10我++ 也就是说,我想遍历一个数组并将其所有值设置为 [10,10,10,10,10] 这就是我在 mips 程序集中所做的 .data数组:.word 0:5.文本主要的:li $t1, 0 # i = 0la $t9, array # $t9 = addr(arr ..
发布时间:2021-06-02 22:20:46 其他开发

使用 MIPS 汇编查找四个输入的最大整数

我需要打印来自用户的四个输入的最大整数.我想出了如何做到最多三个整数,但最后一个 CMP 我遇到了困难.我需要上次 CMP 的帮助. 我假设我还需要一个 CMP 来解决这个问题,但我尝试的每件事总是只打印出前三个数字中最大的一个. # 这个程序打印出两个数字中的四个# 四个数字通过键盘读取.文本.globl 主主要的:# 显示提示1li $v0, 4la $a0, prompt1系统调用 ..
发布时间:2021-06-02 22:20:43 其他开发

递归乘积mips

我对代码进行了一些更改,但它仍在打印一个 9 位数字.不知道这里发生了什么.当我输入 2 * 3 时,它输出 268501017.我很难找出如何从寄存器中获取结果并打印出来. 主要:#提示 1li $v0, 4 # 在标签“输入"处打印字符串la $a0, num1系统调用li $v0, 5系统调用移动 $a2, $v0#提示2li $v0, 4 # 在标签“输入"处打印字符串la $a0, ..
发布时间:2021-06-02 22:20:39 其他开发

在 MIPS 中空终止字符串?

我正在 MIPS 中编写 strncpy,但是我在用空终止字符串时遇到了麻烦.如果我自己不空终止它,则字符串会继续.我试过 sb $__ 0($0) 但这似乎不起作用...... $a0 = 指向目标数组的指针 $a1 = 源字符串 $a2 = 要复制的字符数 strncpy:添加 $t1 $zero $zero #counterbeq $a2 $0 done # 如果要复制的字符数为 ..
发布时间:2021-06-02 22:20:34 其他开发

与函数调用的SP增量相关的困境

函数调用时push的情况下,为什么栈指针移动到a通过减去 4 倍的寄存器数量来获得更小的值压入堆栈? 我在阅读理解堆栈 解决方案 在同一个页面中,明确提到了栈的内存布局:- 考虑堆栈的以下方面很有用. 栈底 栈的最大有效地址.栈初始化时,栈指针指向栈底. 堆栈限制 堆栈的最小有效地址.如果堆栈指针变得比这个小,那么就会出现堆栈溢出(这个不应与数学运算溢出混淆). ..
发布时间:2021-06-02 22:20:31 其他开发

汇编 MIPS %call16(printf)

我在汇编中有这个代码. .datatabela: .word 4, 2, 10, 1, 6打印:.asciiz "值是:%d\n".文本.globl 程序a程序:########################在这里做一些事情.10 美元的价值是 -99########################4 美元,打印移动 $5, $10lw $25,%call16(printf)($28)25 ..
发布时间:2021-06-02 22:20:27 其他开发

如何刷新 mars mips 中的提示?

好的,我尝试清除 MARS(mips 汇编程序)的默认提示 i/o,并且真诚地,不知道如何做到这一点.在程序运行期间,我可以使用哪些代码或系统调用来刷新屏幕? 编辑:抱歉信息不全.我说的是 MARS 中存在的“模拟 MIPS 控制台输出/输入".我的问题是是否可以在程序运行期间清除此控制台以及任何代码实现. 解决方案 有两种基本方法可以做到这一点,但它们都涉及捕获 clear 命令的 ..
发布时间:2021-06-02 22:20:10 其他开发

在MIPS中,为什么跳转指​​令可以将程序计数器设置为28位目标地址

在 MIPS 中,32 位跳转指令由 6 位操作码和 26 位目标(目标)地址组成,我们希望将程序计数器设置为目标(目的)地址. 但是,可以将程序计数器设置为 28 位目标地址.如果跳转指令只能容纳 26 位,这怎么可能? 解决方案 MIPS 上的指令总是 4 字节对齐的,因此任何有效目标地址的低 2 位只能为零.因此,跳转指令中指定的 26 位总是隐式左移 2 个位置,从而设置 P ..
发布时间:2021-06-02 22:20:06 其他开发