问题标签 [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.
string - 删除字符串中的空格,MIPS 程序集
我正在尝试编写的程序有一个小问题。基本上我正在提示用户输入。然后我计算字符串中的空格数,并显示计数。我还需要打印出删除空格的原始字符串。
我遇到的错误是当我在没有空格的情况下向字符串中添加字符时,它只添加了第一个字符。$t2 是保存要添加的字符的寄存器,我在运行时检查了寄存器以确保那里的值发生了变化。我不知道还能去哪里看。
macos - 在 OS X 上安装 spim 时遇到问题
我正在尝试在 OS X 终端中运行 spim。我可以使用 QTSimp,但spim
终端中的命令尚不存在。当谈到终端(刚从 Windows 切换)时,我有点新手,所以也许这真的很明显。
首先,我只是导航到 spim 文件夹并输入make
.
我回去再次阅读安装指南,它说尝试make install
:
然后我尝试了安装指南中的其他内容,
出了什么问题,我该如何解决?
mips - 使用多个 mips 参数 >4
我试图通过将它们推入堆栈来编写一个函数以使用除 4 之外的额外参数(因为我的 mips 版本仅支持 $a0-$a3),但我的代码不正确。这是我在主要(片段)中的代码:
它将临时值设置为 40,在堆栈上提供空间并保存它。然后调用我的函数。作为测试是否有效,当我将这些临时参数 $a0-$a3 移动到它们保存的寄存器对应项时,在函数内部,我有以下代码:
...但它只打印出 0 而不是 40,所以我做错了什么。任何帮助将不胜感激(并赞成)
python - 打开另一个命令行解释器并输入命令
我使用“spim”模拟器来模拟 mips 架构。它的工作方式是我首先应该有一个“filename.asm”文件,然后在 bash 中键入“spim”以打开 spim 的命令行解释器,然后我可以使用 spim 命令,例如加载文件并运行它, ETC..
我正在尝试编写一个 python 脚本来打开 spim 命令行解释器并开始在其中输入 spim 命令。这可能吗?
谢谢。
assembly - MIPS 汇编 - 十六进制指令字符串
我正在Assembly中做一些事情,它需要一个字符串作为指令,例如
并以十六进制打印出指令。
我逐个扫描字符串,首先识别添加。Add 的操作码为 001000(6 位)
t1 被扫描,并将自身与数据部分进行比较,它的值为 5 位 01001,与 t0 相同的值为 01000,t1 再次为 01001。所有这些都是按顺序扫描的,因此优先级并不那么重要据我所知。
从那时起,我知道我需要以某种方式将它们混合在一起,然后从二进制转换为十六进制。我的问题是,我不确定在读取这些二进制值时应该如何存储它们。是否将它们存储在数据部分中,由于它们的奇数位大小,这似乎不正确,或者是否有一些更简单的方法。
老实说,我对位移知之甚少,所以答案可能就在那里。
这是我的代码。这在很大程度上是一个 WIP
spim - 在 spim 中将两个浮点寄存器相乘
我想在 spim 中编写一个小程序,计算圆的周长并从用户那里读取半径值......这是代码
s0 是在 .data 部分中从用户 p 浮点变量中输入的半径值
执行程序后,我在寄存器 f2、f6、f8 中有这些值(当 s0=3 时):
这个结果是真的吗?如果是真的,为什么 f8 10 中的值不是 10.2 ?
assembly - 计算偏移量
我有一个家庭作业问题。
我有一个BNE
指令0x88888888
,我需要告诉什么是合法的跳转范围。
我的理论是偏移量告诉我我可以去:
- 从 0x8888888 - 4 * 2 15
- 至 0x88888888 + 4 * (2 15 -1)
我真的不明白为什么以及如何工作,有人可以解释一下吗?
mips - MIPS la 关键字
假设有一个变量 var 存储在地址 0x00001000 并且它的值为 10。
如果我做了 la $t2, var
$t2 是否包含 var 的地址或 var 的值。我真的很想说地址,考虑到 la 代表加载地址,但我看过的所有例子都没有明确的联系。
我也知道这在本机指令中被分解为 lui ori,但它看起来究竟如何?
assembly - 在装配中挣扎于二维数组
我正在尝试在 MIPS 中实现以下内容
X 是双精度浮点数的二维数组(矩阵),Y 是 32 位整数的二维数组。尝试为以下内容编写代码
现在我不知道如何在 MIPS 中声明这些数组:
到目前为止,我已经编写了一些主程序,但不知道如何在该.data
部分中实现它们
assembly - 为什么 lw 在 QtSpim 中返回“立即值对于字段来说太大:”?
我在 64 位 Windows 7 上运行 QtSpim 9.1.7。在Simulator / Settings / MIPS下,我勾选了所有选项(“Bare Machine”、“Accept Pseudo Instructions”、“Enable Delayed Branches”、“Enabled Delayed Loads”、“启用映射 IO”、“加载异常处理程序”)。
如果我使用以下方式存储硬编码值,我可以运行基本代码以在 QtSpim 中添加值ori
:ori $t0,$0,4
现在我想从内存中加载和存储数据,但lw
不工作。
当我重新初始化并加载上述文件时,我收到以下错误消息:“Immediate value is too large for field:”
如果我然后尝试单步执行代码,我会到达 [00400024] 行。越过那条线,我收到以下错误消息:“PC=0x00400024 发生异常”/“数据/堆栈读取中的错误地址:0x00000000”
作为参考,我的代码被解析为:
我首先想到0($0)
的肯定不是num1
. 我的数据声明不正确吗?如果是这样,我做错了什么?
我不知道它是否相关,但我得到以下la
和li
命令的语法错误(当我试图找到替代方法时lw
):
la $a0,num1
li $t0,4