问题标签 [spim]

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.

0 投票
3 回答
32168 浏览

assembly - 在 MIPS 的 HI 和 LO 寄存器中存储值

我正在 MIPS 中编写某些代码,我已经到了需要将结果临时存储在特殊寄存器(均为 4 字节宽)HI中的地步。LO这些说明可供我使用:

因此,divu将除法的结果LO和余数存储在 中HI,而multu将乘法的结果存储在LO(低 4 字节)和HI(高 4 字节)中。

稍后,要从寄存器中检索结果,我可以HILO

我已经想出了如何将计算结果存储在LO

  • divu除法的结果存储在 LO 中,所以我只需将结果除以 1 即可。

但是,存储起来HI更复杂。一种方法是强制multu指令将值移动 32 位(4 字节):

但是,结果是 in 的值在HI它应该在的位置右边 1 位(所以如果我的值是,0100 1000那么HI将包含0010 0100)。

有谁知道如何在HI寄存器中存储一些东西?

0 投票
2 回答
8995 浏览

c - C 到 MIPS 的翻译

试图将此 c 代码转换为 MIPS 并在 SPIM 中运行。

到目前为止,这就是我所拥有的。

在 SPIM 中运行时出现以下错误:

一些方向会很好。谢谢

0 投票
2 回答
38706 浏览

c - MIPS(或 SPIM):加载浮点数

我正在研究一个小型迷你编译器,同时尝试在这里学习一些 MIPS。这是我的问题:

MIPS 有一个指令 li (立即加载),它可以像这样工作

这会将 100 加载到寄存器 5 中。

但是,我现在需要将浮点数加载到寄存器中,并且正在努力寻找一种方法来做到这一点......因为 li $5,2.5 不起作用。

有人有什么建议吗?

我在 C 中工作,我在想我可以以某种方式获得我正在使用的浮点的整数表示(即浮点二进制表示 == ints 二进制表示)然后将“整数”加载到寄存器中并像对待它一样从此浮出水面。

也许为时已晚,但我现在卡住了。

0 投票
1 回答
880 浏览

arrays - 声明多个 SPIM 数组会导致语法错误

下面是一段 SPIM 代码的开头:

不幸的是,我声明的第二个数组 ('b') 导致 SPIM 解释器吐出:

当我只有一个数组时,类似的代码可以工作——它似乎是第二个搞砸了。我已经对此进行了刺激,但无法弄清楚导致它崩溃的声明是什么。有什么想法吗?感谢您的任何见解。

0 投票
2 回答
6138 浏览

input - 如何将十六进制字符串转换为二进制?

我的问题是从用户那里获得 64 位密钥。为此,我需要获取 16 个字符作为包含十六进制字符(123456789ABCDEF)的字符串。我从用户那里得到了字符串,我用下面的代码找到了字符。但我不知道如何将字符转换为 4 位二进制

0 投票
3 回答
6164 浏览

c++ - ELF 文件格式

我正在尝试将我使用 g++ 编译的 elf 文件的 hexdump 手动加载到我设计的处理器模拟中。一个标准的 elf 文件有 30 个部分,我正在加载所有 30 个段,并考虑到它们的正确内存位置偏移量。然后我在部分 (00400130) 的开头启动我的程序计数器,.text但似乎程序运行不正确。我已经使用 SPIM 作为黄金标准,相对彻底地验证了我的处理器设计。奇怪的是,如果我将一个程序集文件加载到 SPIM 中,然后将软件生成的反汇编文件.text.data部分加载到我的处理器内存中,程序就可以工作。这与我想做的不同,因为我想:

  • 编写一个c++程序
  • 使用 mipseb-linux-g++ 编译它(交叉编译器)
  • 十六进制将所有部分转储到自己的文件中
  • 读取文件并将内容加载到处理器“内存”中
  • 运行程序

我最初应该在 ELF 文件中的哪个位置放置程序计数器?我现在一开始就有.text。另外,我是否只需要包含.text.data让我的程序正常工作?我在这里做错了什么?

0 投票
1 回答
1984 浏览

c++ - 将 C++ 代码转换为 SPIM 的程序集

我在让我编译的汇编文件在 SPIM 上工作时遇到了很多麻烦。基本上我想写一个 c++ 文件,然后生成一个 .s 文件,我可以在 SPIM 中打开而不会出错。这意味着程序集必须使用 MIPS I 指令(某些 MIPS II)在 MIPS32 ABI 中。我该怎么做呢?现在我正在使用 g++,但是当我尝试在 SPIM 中运行文件时遇到了重大错误。我正在使用 MAC OSx 10.6.3,并且正在 Linux 机器上进行远程编译。有没有我可以使用的特殊编译器让这对我来说很容易?

0 投票
1 回答
1076 浏览

assembly - MIPS 中的算法问题

我正在重写我对 MIPS 程序集中 Project Euler 问题的答案,但我无法让这个答案输出正确的答案。我已经检查了过去一个小时的代码,但我无法弄清楚我的方法有什么问题(因为当答案比这高出 200,00+ 时,我得到了 33165),所以我想出了问题一定是我对语法的摇摆不定。我在这里做了什么愚蠢的事情,比如使用保留寄存器?

编辑:代码自发布以来进行了调整。提出了修复建议,但它仍然会产生大约 100,000 的答案。:(

0 投票
1 回答
12935 浏览

assembly - 在 MIPS 中将十进制转换为二进制并打印

我正在为赋值编写一段简单的代码,我需要将十进制数转换为二进制、八进制和十六进制。我让它工作了,但后来我意识到由于我使用的算法,我向后打印二进制数。我使用的策略是一次打印一个数字。我仍然是初学者,所以我认为这将是避免更多中间问题的简单方法。不幸的是,我并没有一路想通。

有什么方法可以将每个数字存储到带有标签的字符串中,然后将每个数字连接起来,然后向后读取字符串或其他什么?也许有更好的建议你可以指出我。

请注意,此时代码通过一次打印一个二进制数字来工作,但顺序与我们想要的相反。该程序应该能够处理大数字(如 20 个二进制数字长),所以我不能将每个数字存储在它自己的寄存器中。谢谢大家!

0 投票
1 回答
5102 浏览

mips - Mips 输出系统调用

为什么 system out is (null) in spim ?