繁体   English   中英

检查 MIPS 中的数字是否不等于 0

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM