mips32相关内容

C到MIPS程序集混淆

我是汇编编码的新手,我遇到了一个问题,要求将以下C代码转换为MIPS汇编。 b[8] = b[i-j] + x ; 变量i、j、x位于寄存器7、4和15中,数组b的基址为2,870,220十进制。 我想出了以下解决方案 lui $2, 0x002B ori $2, $2, 0xCBCC sub $3, $7, $4 add $3, $2, $3 lw $12, 0( ..
发布时间:2022-07-03 10:12:38 其他开发

从寄存器中提取字段的MIPS指令

解决方案手册中的答案对于这个位域提取问题似乎是错误的。我的问题发布在下面。 以下是设置: 提出的问题是: 查找最短的MIPS指令序列,以提取 常量值i=22和j=5的$t0中的字段,并将该字段放入$t1 采用数据表中显示的格式。 解决方案手册给出了以下答案: lui $t1, 0x003f ori $t1, $t0, 0xffe0 and $t1, $t0, $t1 sr ..
发布时间:2022-03-27 22:09:38 其他开发

MIPS-32操作码格式:大写还是小写?

我目前正在学习计算机组织课程,我一直在学习MIPS-32体系结构。我注意到我们使用的书中操作码都是小写的,而教授列出的操作码都是大写的。我在不同的网站上查了一下,注意到一些网站的操作码都是大写的,而另一些网站的操作码都是小写的。我查找了有关堆栈溢出的类似问题,但找不到任何问题。 例如,要添加,我们可以这样做: ADD $s2, $s1, $s0 但是,其他网站和这本书是这样说的: ..
发布时间:2022-03-27 21:11:12 其他开发

数据存储单元

我几周前开始使用 Verilog,现在我正在 FPGA 板上实现 MIPS 流水线,并且我处于流水线阶段的 MEM 部分.我正在尝试编写数据存储单元(在图片中 -> 数据存储单元). 我不明白 memread 的用法.我理解如果memwrite为1,则传递当前地址的内容来读取数据. 到目前为止,这是我的代码: 模块 data_memory (input wire [31:0] add ..
发布时间:2021-09-17 19:26:28 其他开发

如何阻止用户输入在 MIPS 中打印新行?

我的大学计算机科学课程有一项作业,要求我们使用用户输入打印出两个相邻的三角形.用户必须输入一个整数作为三角形的高度和一个用于打印三角形的字符. 我可以很好地接受三角形高度的整数,但是每次打印用户输入的字符都会开始一个新行,而不是打印在同一行上. 这是我获取和打印输入的方式: #提示用户输入字符li $v0, 4la $a0, charPrompt系统调用#存储用户的字符li $v0 ..
发布时间:2021-09-15 19:13:51 其他开发

使用 Valgrind 运行时 mmap 返回 EINVAL

我针对 Valgrind 运行的 mips32 应用程序在 mmap 函数中失败.如果我单独运行它可以正常工作,但是当我针对 valgrind 运行它时,它每次都以 EINVAL 失败. void * mem = (uint32_t *)mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_SHARED, ,mmap_size); 解决方案 当客户端应用 ..
发布时间:2021-06-03 18:31:40 其他开发

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

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

递归乘积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中,为什么跳转指​​令可以将程序计数器设置为28位目标地址

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

将一个寄存器中的某些位存储到另一个寄存器的某些位中

我正在尝试学习计算机组织,以便为即将到来的学期做好准备,但我偶然发现了这个问题.该问题要求将寄存器 $1 的第 5 至 10 位存储到寄存器 $2 的第 10 至 15 位,而不更改 $1 和 $2 的其余位.注意:它还表示位编号是小端. 这就是我所做的. sll $3, $1, 22单反 $3, $3, 27sll $3, $3, 10 # 在最后 3 个步骤之后 $3 应该有所需的位, ..
发布时间:2021-06-02 22:19:36 其他开发

MIPS-32链接器如何转换LW和SW地址?

我正在阅读计算机的第2.12章组织和设计,试图了解MIPS-32链接器的逻辑.我了解链接两个目标文件和绝对引用链接的概念.我不明白的是,下面引用的段落解释了计算绝对地址的逻辑. 由于相对于基址,加载和存储地址更难登记.本示例使用全局指针作为基址寄存器.图2.13显示$ gp初始化为1000 8000 hex .要获得地址1000 0000 hex (单词X的地址),我们将8000 hex 放 ..
发布时间:2021-05-14 18:31:34 其他开发

结构中的位是否得到保证

我有一个与结构位字段有关的问题,请参阅下面的内容,因为我对应该使用哪个关键字来最好地描述我的问题一无所知: 上下文:我正在为MIPS R3000A汇编指令编写反汇编程序,该指令在2000年初用于Playstation程序. 问题:我想知道是否在此代码中: struct指令{u32其他:26;u32 op:6;};//主要的:指令指令= *(指令*)(数据+ pc);printf(“ ..
发布时间:2021-05-04 19:51:25 其他开发

在6级标量或超标量MIPS中,有多少条指令因未命中而需要杀死?

我正在使用6个阶段的流水线:F D I X0 X1W.有人问我,当发生分支未命中预测时,需要杀死多少条指令. 我想出了4.我想这是因为分支解析发生在X1中,我们将需要杀死分支之后的所有指令.在管道图中,看起来需要杀死流经管道的4条指令.那是对的吗? 我还被问到,如果管道是三宽超标量,则需要杀死多少人.我不确定这一点.我认为应该是12,因为您一次可以提取3条指令.正确吗? 解决方案 ..
发布时间:2021-04-24 21:07:48 其他开发

关于否定mips中的符号整数?

我正在考虑如何对mips32中的带符号整数取反.我的直觉是使用2的补码的定义,例如:(假设 $ s0 是要取反的数字) 也不$ t0,$ s0,$ s0;1的补码addiu $ t0,$ t0,1;2's = 1's + 1 然后我意识到可以这样做: sub $ t0,$ zero,$ s0 所以...有什么区别?哪个更快?IIRC子程序将尝试检测溢出,但这会使速度变慢吗?最后,还有 ..

MIPS-阵列中的阵列索引

MIPS中的以下C代码是什么? f = A [B [i]] 有人告诉我它可以用6行完成,但还不知道怎么做. f 位于 $ t0 中, i 位于 $ t3 中, A [] 在 $ s0 中,而 B [] 在 $ s1 中.所有类型都是整数. 我能想到的最好的是 lw $ t5,$ t3($ s0);#不起作用,因为lw语法不接受寄存器作为偏移量lw $ t6,$ t5($ s1); ..
发布时间:2021-04-09 20:04:34 其他开发

Syscall和陷阱之间的区别

我想知道MIPS syscall和trap指令之间是否有任何区别.我找不到与此相关的任何内容,因此不确定是否有区别.陷阱似乎只是有条件的系统调用,但进行一些澄清可能会有所帮助. 解决方案 SYSCALL和TRAP指令均触发异常,但是产生的异常类型不同(SystemCall与Trap),并且操作系统将可能会以不同的方式处理它们. ..
发布时间:2020-11-01 21:13:44 其他开发

Mips装配中的平方和

我必须计算Mips装配中数组的平方和.我一直在寻找我的代码的反馈.下面发布的代码只是一个开始,并未考虑可能的溢出情况.但是,我只想确保此基本代码块按预期工作 # Function to calculate squared sum # # Inputs: # $a0: address of array in memory (*a) # $a1: array size ..
发布时间:2020-09-13 01:27:21 其他开发

从C ++转换MIPS字符数组反转

我的项目是转换下面的代码,这将颠倒字符串的顺序,即(string-> gnirts).我不了解如何开始转换为MIPS程序集.我们将不胜感激关于如何执行此项目的任何帮助或澄清.即使只是一个类似的示例,也将非常棒. #include using namespace std; void reverse(char [], int size); void swap(char * ..
发布时间:2020-09-13 00:20:05 其他开发