Не могу понять это преобразование из C в сборку - PullRequest
0 голосов
/ 26 июня 2010

Я хотел бы знать, может ли кто-нибудь объяснить мне решение этой проблемы:

код:

#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-ячейке данных

Спасибо

1 Ответ

1 голос
/ 26 июня 2010

Я бы предположил, что ...

  • D[0]+3 является ссылкой на адрес coda (*coda в вызове функции)
  • D[D[0]+3] - это поиск данных по адресу, где хранится coda
  • D[D[0]+3]+20 - это смещение в 20 от места, где начинается coda, таким образом, проходя мимо coda->c (то есть 20 элементов)доберитесь до coda->n.

Это должно помочь вам понять первое;те же идеи могут быть распространены на второй.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...