gpt4 book ai didi

assembly - 将寄存器设置为 1 的 MIPS 指令

转载 作者:行者123 更新时间:2023-12-03 09:21:08 27 4
gpt4 key购买 nike

这是一个在过去的几篇论文中出现过的问题,但我在互联网上找不到任何相关内容。

哪六个单指令 MIPS 可以设置 $v1 来保存十进制值 1?

最佳答案

与常见的误解相反,lilamove 并不总是只是一条指令。它们是汇编为一个或多个机器代码 MIPS 指令的伪指令。 (li $v1, 1 通常只会汇编为一条指令,因为常量很小,但它将与真正的 MIPS 指令之一是相同的指令。)因此,我猜他们不这样做t 作为一个选项。

这里是可以执行此操作的说明

addi  $v1, $zero, 1
addiu $v1, $zero, 1
ori $v1, $zero, 1
xori $v1, $zero, 1

# these use comparison
slt $v1, $zero, $31 # the last one can be any non-zero register. $31 is $ra
slti $v1, $zero, 1
sltu $v1, $zero, $31 # the last one can be any non-zero register
sltiu $v1, $zero, 1

# these use memory
lb $v1, one($zero)
lbu $v1, one($zero)
lh $v1, one($zero)
lhu $v1, one($zero)
lw $v1, one($zero)

one: .word 1 # assuming little-endian MIPS where the lowest-address byte is 1

其他可能的加载包括 lwllwr 未对齐单词加载,其中之一将从 one: 加载 1 。单词 1。但是从内存加载需要地址空间的低 15 位或高 15 位中的地址,这有点不寻常。

$31 又名 $ra 通常不为零。 $sp 几乎总是非零,但在异常情况下,某些先前的代码可能已将其设置为零。或者,如果我们想将 $v1 = 1 设置为 ROM 中的第一条指令,那么上电后它可能为零。

因此,如果我们不计算负载(需要在可访问地址处提供额外数据)或非立即 slt[u](需要另一个寄存器中已知的非零值),我们有 6 个经典 MIPS I 中的指令:addi/addiuorixorisltiusltiu

当使用伪指令计数时,lila 也可用。

关于assembly - 将寄存器设置为 1 的 MIPS 指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30650451/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com