问题标签 [mips]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
mips - MIPS 获取地址未在字边界上对齐,使用 .align 4,仍然不行
有任何想法吗?为什么我得到:0x00400020 处的运行时异常:获取地址未在字边界 0x00000007 上对齐问题行是:lw $s1,0($a1) #copy arg2 = size of array
c - C 到 MIPS 的翻译
试图将此 c 代码转换为 MIPS 并在 SPIM 中运行。
到目前为止,这就是我所拥有的。
在 SPIM 中运行时出现以下错误:
一些方向会很好。谢谢
mips - MIPS 汇编的一些帮助-跳转和链接
我以前从未使用过 MIPS 程序集,它只是在课堂上介绍的。我正在做家庭作业,但我在调用函数时遇到了一些困难。这是我到目前为止所做的:
问题是它永远循环,所以我相信 $a1 没有正确通过。当我直接在函数中设置大小时,此代码有效。谁能指出我正确的方向?谢谢!
arrays - 在 MIPS 中创建(和访问)数组
我正在尝试在 MIPS 程序集中创建一个数组,然后将所有元素添加在一起。但是,当我尝试组装以下内容时,它说
read_array 第 1 行位置 7 出错:“.word”指令不能出现在文本段中 汇编:操作完成但有错误。
这是我的程序集:
谢谢!
assembly - 计数单周期数据路径中的前导零
大家可能都知道,MIPS 指令集支持 clz(计数前导零),如下所示:
clz $t0,$t1 计数前导零 t0 = # t1 中的前导零
我正在用verilog编写一个单周期数据路径,只是想知道ALU需要支持什么才能让我这样做......有什么想法吗?
vhdl - 在单周期数据路径中加载半字和加载字节
有人问过这个问题,即在无需更改数据存储器的情况下将加载字节实现到单周期数据路径中,解决方案如下。
替代文字 http://img214.imageshack.us/img214/7107/99897101.jpg
这实际上是一个很现实的问题;大多数内存系统完全基于字,单个字节通常只在处理器内部处理。当您在许多计算机上看到“总线错误”时,这通常意味着处理器试图访问未正确字对齐的内存地址,并且内存系统引发了异常。无论如何,因为字节地址可能不是 4 的倍数,我们不能直接将它们传递到内存。但是,我们仍然可以获取任何字节,因为每个字节都可以在某个字中找到,并且所有字地址都是 4 的倍数。所以我们要做的第一件事是确保我们得到正确的字。如果我们取地址的高 30 位(即 ALUresult[31-2])并将它们与低端的两个 0 位组合(这就是“左移 2”单元真正在做的事情),我们得到了包含所需字节的字的字节地址。这只是字节自己的地址,向下舍入为 4 的倍数。此更改意味着 lw 现在也将地址向下舍入为 4 的倍数,但这没关系,因为未对齐的地址无论如何都不适用于此内存的 lw单元。好的,现在我们从内存中取回数据字。我们如何从中得到我们想要的字节?好吧,请注意,字中字节的字节偏移量仅由字节地址的低 2 位给出。因此,我们只需使用这 2 位来使用多路复用器从字中选择适当的字节。注意大端字节编号的使用,这适用于 MIPS。下一个,我们必须将字节零扩展为 32 位(即,只需将其与高端的 24 个零组合),因为问题指定这样做。实际上,这是问题中的一个小错误:实际上, lbu 指令对字节进行零扩展,但 lb 对其进行符号扩展。那好吧。最后,我们必须扩展 MemtoReg 控制的多路复用器以接受一个新的输入:lb 情况下的零扩展字节。MemtoReg 控制信号必须加宽到 2 位。原来的 0 和 1 的 case 分别变成了 00 和 01,我们添加了一个新的 case 10,它只在 lb 的情况下使用。lbu 指令对字节进行零扩展,但 lb 对其进行符号扩展。那好吧。最后,我们必须扩展 MemtoReg 控制的多路复用器以接受一个新的输入:lb 情况下的零扩展字节。MemtoReg 控制信号必须加宽到 2 位。原来的 0 和 1 的 case 分别变成了 00 和 01,我们添加了一个新的 case 10,它只在 lb 的情况下使用。lbu 指令对字节进行零扩展,但 lb 对其进行符号扩展。那好吧。最后,我们必须扩展 MemtoReg 控制的多路复用器以接受一个新的输入:lb 情况下的零扩展字节。MemtoReg 控制信号必须加宽到 2 位。原来的 0 和 1 的 case 分别变成了 00 和 01,我们添加了一个新的 case 10,它只在 lb 的情况下使用。
即使在阅读了解释之后,我也不太了解它是如何工作的,尤其是关于将 ALU 结果左移 2 会给出字节地址......这怎么可能?所以如果我想加载一个半字然后我会做一次左移,我会得到半字的地址??什么是更好的方法来加载字节,通过修改数据存储器加载半字?(上面的问题提出了我们不能修改数据存储器的限制)
assembly - MIPS 程序集中的 .word 指令
在这个 MIPS 代码中,.word 部分有什么作用?我的模拟器无法处理文本部分中的数据指令。指令的作用是什么?使用 .word -2 和 .word -6 而不是 .word -8 有什么意义?
memory - 理解内存地址
我在 MIPS 中遇到内存寻址问题。它说寻址是字对齐的……在下面的文本中,我不明白为什么它要查看地址的 2 个最低有效位?为什么?有人可以给我一个例子来澄清/说明这里的观点......所以它是说一个有效的半字地址都是其 2 个最低有效位是 00 或 10 吗?
那么如果我想从一个字对齐的内存中加载一个字节呢?我怎样才能做到这一点?据说我需要左移2,即使至少2个有效位为0 ...然后提取这些位...
assembly - 有符号整数的 MIPS 除法
我想知道是否有人可能知道如何在 MIPS 中执行两个有符号整数之间的除法,而不使用内置的除法运算。
在问题规范中,我被告知除数寄存器、ALU 和商寄存器都是 32 位宽,余数寄存器是 64 位。