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