在 MIPS 中检查数字是否不为零
Checking if a number is not equal to zero in MIPS
我目前正在尝试将一个 do - while 循环从 C 翻译成 MIPS,但在涉及分支测试时我有点困惑。
我试图从 C 语言转换成 MIPS 的代码如下:
do{
code
} while(x != 0)
我已声明以 mips 为单位
loop:
#code
# and down here I should be translating while(x != 0)
如何使用分支语句最有效地转换 while(x != 0)?看到一次 x == 0,do while 循环停止。
每个结构化语句都有一个汇编语言的 if-goto 风格的翻译。
当条件在高级语言中的意义与分支相反,即继续时,通常需要反转条件。
为了明白我的意思,让我们先看看 while 循环。
while ( condition )
body
condition
的意思是与接下来出现的正文的延续。
在if-goto风格中,我们唯一能做的就是跳出循环,所以我们必须反转condition
,即! (condition)
.
if ( ! condition ) goto LoopExit;
body
LoopExit:
(if-goto 结构需要在留在循环和退出循环之间做出选择——我们不能“分支”留在循环中,所以唯一的选择是分支退出并掉入循环循环。)
由于 do while 的含义和 if-goto 的含义相同,因此测试条件与 C 中的相同。这是因为两者都将控制流更改回循环顶部。
有关将结构化语句转换为程序集的 if-goto 样式的更多信息,请参阅本文。
https://erikeidt.github.io/Transforming%20Structured%20Statements%20into%20Assembly%20Language
我目前正在尝试将一个 do - while 循环从 C 翻译成 MIPS,但在涉及分支测试时我有点困惑。
我试图从 C 语言转换成 MIPS 的代码如下:
do{
code
} while(x != 0)
我已声明以 mips 为单位
loop:
#code
# and down here I should be translating while(x != 0)
如何使用分支语句最有效地转换 while(x != 0)?看到一次 x == 0,do while 循环停止。
每个结构化语句都有一个汇编语言的 if-goto 风格的翻译。
当条件在高级语言中的意义与分支相反,即继续时,通常需要反转条件。
为了明白我的意思,让我们先看看 while 循环。
while ( condition )
body
condition
的意思是与接下来出现的正文的延续。
在if-goto风格中,我们唯一能做的就是跳出循环,所以我们必须反转condition
,即! (condition)
.
if ( ! condition ) goto LoopExit;
body
LoopExit:
(if-goto 结构需要在留在循环和退出循环之间做出选择——我们不能“分支”留在循环中,所以唯一的选择是分支退出并掉入循环循环。)
由于 do while 的含义和 if-goto 的含义相同,因此测试条件与 C 中的相同。这是因为两者都将控制流更改回循环顶部。
有关将结构化语句转换为程序集的 if-goto 样式的更多信息,请参阅本文。
https://erikeidt.github.io/Transforming%20Structured%20Statements%20into%20Assembly%20Language