c - MIPS汇编语言 "move"和 "li"的区别

标签 c assembly mips

我正在练习将 C 代码转换为 MIPS 汇编语言,但无法理解 moveli 在变量赋值中的用法。

例如,要在 MIPS 中实现以下 C 行:

int x = 0;

如果我理解正确(尽管我对此深表怀疑),看起来这两个都可以在 MIPS 汇编器中工作:

move $s0, $zero
li $s0, $zero

我错了吗?这两行有什么区别?

最佳答案

move 指令将值从一个寄存器复制到另一个寄存器。 li 指令将特定数值加载到该寄存器中。

对于零的特定情况,您可以使用常量零或零寄存器来获取:

move $s0, $zero
li   $s0, 0

不过,没有寄存器可以生成非零值,因此如果您想要其他数字,则必须使用 li,例如:

li $s0, 12345678

关于c - MIPS汇编语言 "move"和 "li"的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19827522/

相关文章:

C http代理服务器套接字 - 没有命中

mips - 如果使用异步组件,是否可能出现 "single cycle cpu"?

assembly - 数据危险的特定情况(当 R 类型指令出现在两个连续的 LW 之后时)

c - 从 pop 函数返回错误的地址

c - 在运行时声明全局连续二维数组。编译时尺寸未知 C

assembly - 如何在汇编中表示八进制数?

assembly - s/360 程序集 : how to implement a call stack

java - 是否可以做一个动态 LLVM 汇编器(来自 Java 等高级语言)?

c++ - 如何解决系统和库依赖项之间的 C++ 冲突

c - 读取字符串字符时出错 - Visual Studio 2017