什麼是三地址碼?


三地址碼是一系列形式為 A−=B op C 的語句,其中 A、B、C 可以是程式設計師定義的名稱、常量或編譯器生成的臨時名稱,op 表示一個運算子,可以是常量或浮點算術運算子,或者布林值資料或邏輯運算子。“三地址碼”這個名稱的原因在於,每個語句通常包含三個地址,兩個用於運算元,一個用於結果。

在三地址碼中,最多三個地址定義任何語句。兩個地址用於運算元,一個用於結果。

因此,op 是一個運算子。

在表示式的右側一次只允許進行單個操作。

示例− 表示式 a = b + c + d 可以轉換為以下三地址碼。

t1 = b + c

t2 = t1 + d

a = t2

其中 t1 和 t2 是編譯器生成的臨時變數。大多數情況下,語句包含少於三個引用,但它仍然被稱為三地址語句。

三地址碼語句的型別

以下是各種型別的三地址語句:

  • 賦值− 三種類型的賦值語句為

x = y op z,op 是一個二元運算子,y、z 為運算元。

x = op y,op 是一個一元運算子

x = y,y 的值賦給 x。

  • 無條件跳轉− 無條件跳轉的形式為 goto L,L 為標籤。

控制流到標有 L 的三地址語句。

  • 條件跳轉− 條件跳轉的形式為

if x relop y goto L

這裡 relop 可以是 <、>、<=、>=。如果條件為真,則它可以執行標籤 L 處的三地址語句,否則將執行 if 語句之後的語句。

  • 陣列語句

x = y[i],陣列 y 的第 i 個位置的值賦給 x。

x[i] = y,y 的值賦給陣列 x 的第 i 個位置。

  • 地址和指標賦值− 像 Pascal 和 C 這樣的語言允許指標賦值。

x = & y,y 的地址賦給 x。

x = * y,y 指向的位置的內容賦給 x。

*x=y,最終將 x 指向的物件的右值設定為 y 的右值。

  • 過程呼叫/返回− 對過程 P(x1, x2 … . . xn) 的呼叫,其引數為 x1, x2 … . . xn,寫成

              param x1

              param x2

             ………..

             param xn

             call p, n

這裡 param 指的是引數,& call p, n 將用 n 個引數呼叫過程 p。

更新於: 2021年11月5日

16K+ 瀏覽量

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告
© . All rights reserved.