簡體   English   中英

這個方程式的三地址代碼是什么?

[英]What is a three address code for this equation?

我的方程是x = y + z;

我已經看到,當解決x = y + zx,y,z是問題的變量時,這些變量通常會轉換為如下所示的三個地址代碼:t1 = y + z; x = t1;

我的疑問是,何時x = y + z本身是一個三地址代碼,因此為什么我們使用臨時變量。

例如轉換

for(int i=1; i<10; i++) x = y+z;

3個地址碼:

i = 1
l1: if(i>=10) goto l2
    t1 = y+z;
    x = t1;
    goto l1;
l2:

為什么我們不能寫x = y + z而不是t1 = y + z和x = t1;

x = y + z是一個三地址代碼。

否。這是4位地址代碼。

通常,“三個”意味着我們必須另外考慮寄存器變量或時間變量。

可能的等效項可能是:

y = <some value>
z= <some value>
T1 = z
T1 += y
x = T1

一些開發人員使用類似於匯編程序的語法:

Move y, <some value>
Move z, <some value>
Move T1, z
Add T1, y
Move x, T1

如您所知,使用中間代碼(或三個地址代碼表達式)需要考慮一些重要事項:

  • “三個”表示限制,而不是規則,可以少於一個或兩個操作數。

    x ++; x = y; x = y + z;

  • 開始考慮將常量,數字或變量表示為“位置”,每個操作數或地址代碼(“郵政信箱”)代表計算機內存中的一個位置。

  • 變量中的至少一個是結果的目標位置。

    w = a * 2;

  • 該目標變量可以用作源操作數。

    x = x * y; y = y + 1;

  • 三個地址代碼表達式是簡短的數學表達式,與常用的表達式相似,但是使用較少的元素,因為這意味着可以轉換為匯編代碼。

除了僅使用1、2或3個位置以外,還不能在任何位置進行某些操作,通常時間變量代表CPU寄存器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM