[英]Can't understand this conversion from C to Assembly
我想知道是否有人可以向我解釋這個問題的解決方案:
代碼是:
#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);
}
我需要知道以下相應的指令: coda->n = 0;
和coda->c[(coda->n)++] = x;
在simplesem(類似於程序集的語義)中;
解決方案是:
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單元中包含的值
謝謝
我猜是...
D[0]+3
是對coda
地址(函數調用中的*coda
)的引用。 D[D[0]+3]
是在存儲coda
的地址處查找數據 D[D[0]+3]+20
是20的從那里偏移coda
開始,從而移動經過coda->c
(這是20項),以獲得給coda->n
。 那應該可以幫助您理解第一個。 相同的想法可以擴展到第二個。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.