[英]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)
! (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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.