- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在意识到我对汇编语言和使用 MIPS 有多么迷茫之后,我决定从基础开始,真正理解它。
显然 MIPS 代码有特定的用途,但很多东西似乎都在做类似的事情,我很难理解其中的一些差异。
load immediate.. (li) 和 loading a word.. (lw) 有什么区别?我什至不确定“词”是什么。或者以下内容的作用:
li $t0,y
lw $t0,0($t0)
它是否在第一行将 y 加载到寄存器 $t0 中?然后加载 0($t0) 作为 y?
抱歉,这可能是一个非常愚蠢的问题。如果有人能解释这两条线在做什么以及 li/lw 之间的区别,我将不胜感激。谢谢!
最佳答案
一个word
是一个固定长度的位序列。
在MIPS32上,一个word
是32位宽。
指令lw $regA, offset($regB)
从 offset($regB)
指定的内存位置加载一个字到寄存器 regA
。
相比之下,li reg, immediate
不是真正的指令。没有 MIPS cpu 可以执行 li
。它是一条伪指令,由汇编程序转换为两条指令的序列:
lui $reg, [most significant 16 bits of immediate]
ori $regA, $regA, [least significant 16 bits of immediate]
lui
使用指令中的立即数加载 32 位寄存器的高 16 位,将低 16 位设置为零。ori
获取 $regA
的内容,与指令中的 16 位立即数进行按位逻辑或,并将结果存储回 $regA
.
因此,总结一下:li $reg, immediate
将总是将相同立即数放入寄存器,而 lw $regA, offset($regB)
将从内存位置 offset($regB)
加载当前值。
关于assembly - 在 MIPS/SPIM 中,li 和 lw 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26984244/
Q1。在我的类(class)ppt中,写了代码,但是MIPS代码在SPIM中不起作用。如何修改 MIPS 代码? Q2。假设 x 和 y 的地址分别为 100 和 200,并且 i = 10 和 sp
我在让我的编译汇编文件在 SPIM 上运行时遇到了很多麻烦。基本上我想写一个 c++ 文件,然后生成一个 .s 文件,我可以在 SPIM 中打开它而不会出错。这意味着程序集必须在 MIPS32 ABI
我正在使用 MIPS 模拟器。 当我尝试在模拟器中打开包含我的代码的文本文件时发生 我无法理解为什么它不能在 QTSpim 上运行。我得到错误 spim: (parser) syntax error
当我在汇编中编程并使用标签.byte时,我在使用Qtspim执行它时遇到问题。我尝试更改位置或值,但问题仍然存在,可能是标签问题。 错误回复位于第 3 行。在标签末尾,您可以找到解析器。 main:
给定文件 #include int main() { printf("hello world\n"); return 0; } 我可以使用命令 clang -emit-l
我编写了一个在 C 上计算阶乘的代码,但是我试图将其转换为汇编语言以在 PCspim 上工作,但不知道如何实现?有人可以帮忙吗? C 代码: #include #include #inclu
我在尝试在这里学习一些 MIPS 的同时,正在开发一个小型迷你编译器。这是我的问题: MIPS 有一条指令 li(立即加载),其工作方式如下 li $5,100 这会将 100 加载到寄存器 5。 但
在意识到我对汇编语言和使用 MIPS 有多么迷茫之后,我决定从基础开始,真正理解它。 显然 MIPS 代码有特定的用途,但很多东西似乎都在做类似的事情,我很难理解其中的一些差异。 load immed
我们正在开发 C 到 MIPS 的交叉编译器,为此我们需要将我们的 MIPS 代码与其他 C 到 MIPS 交叉编译器(如 LLVM 或 CodeSourcery 等)生成的代码进行比较。我们正在使用
我是一名优秀的程序员,十分优秀!