簡體   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