2010-06-26 4 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] 나는 그 추측 할

당신에게

답변

1

감사 데이터의 0 - 셀에 포함 된 값을 반환 ...

  • D[0]+3coda (함수 호출에서 *coda) 주소에 대한 참조입니다.
  • D[D[0]+3]은 주소가인 주소에서 조회입니다. 10이 저장 됨
  • D[D[0]+3]+20coda이 시작되는 오프셋이 20이므로 coda->c (이 중 20 항목)이 coda->n이되도록 이동합니다.

처음 도움말을 이해하는 데 도움이됩니다. 동일한 아이디어가 두 번째 아이디어로 확장 될 수 있습니다.

관련 문제