2010-06-26 43 views
0

這種轉換我想知道,如果有人可以解釋我的解決了這個問題:無法瞭解從C到大會

代碼:

#include <stdio.h> 
#include <stdlib.h> 
typedef struct { 
    int c[20]; 
    int n; 
} t_coda; 
t_coda coda; 
void init(t_coda *coda) { 
    coda->n = 0; 
} 
void add(t_coda *coda, int x) { 
    if (coda->n < 20) 
     coda->c[(coda->n)++] = x; 
} 
main() { 
    init(&coda); 
    coda->n=1; 
    coda->c[0]=2; 
    add(&coda,3); 
    add(&coda,4); 
} 

,我需要知道在simplesem(彙編式語義)中的相應指令:coda->n = 0;coda->c[(coda->n)++] = x;;

的解決方案是:

set D[D[0]+3]+20, 0 

對於第一個問題 和:

set D[D[0]+3]+D[D[D[0]+3]+20], D[D[0]+4] 
set D[D[0]+3]+20, D[D[D[0]+3]+20] + 1 

爲第二個;

d是數據堆棧,以及d [0]返回包含在該數據的0單元格的值

謝謝

回答

1

我猜......

  • D[0]+3是對地址coda(函數調用中的*coda)的引用
  • D[D[0]+3]是查找地址處的數據coda被存儲爲
  • D[D[0]+3]+20是從其中coda開始的20的偏移,因此移動通過coda->c(這是20項)到達coda->n

這應該有助於你理解第一個;相同的想法可以延伸到第二個。