簡體   English   中英

無法理解這種從C到Assembly的轉換

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM