[英]How to Translate Nested If/AND Statements into MIPS?
作为我正在处理的课程项目的一部分,必须包含调试功能。 我在处理一些 if/and 语句时遇到问题。 这是我写的:
/以前的代码,用于查找状态矩阵包含 1 的位置/
`beq s0, 1, _debug_mode #debug feature is ON if s0 contains 1
_debug_mode:
li a0, 0 #tile flipped to say NOT revealed
_else:
li a0, 1
` 我没有得到我期望的结果,所以我的想法是代码写错了。 任何见解都会很棒!
这适用于最小的 C 代码:
if (debug)
status = !status;
在 MIPS 中,可以这样写(假设 s0 是调试,a0 是状态):
blez s0, no_debug_mode
xori a0, a0, 1
no_debug_mode:
# ...
或者更详细
blez s0, no_debug_mode
blez a0, set_status_high
li a0, 0
j no_debug_mode
set_status_high:
li a0, 1
no_debug_mode:
# ...
您仅在其中一个值上发布了分支并且没有使用否定的示例,因此它会给出错误的结果。 此外,您在_debug_mode
标签的末尾没有跳转,因此_else
将始终执行。
我已经有一段时间没有做 MIPS 了。 如果需要分支延迟时隙,则必须将它们添加到上述两个答案中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.