我想知道是否有人可以解释这个问题的解决方案:
代码是:
#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单元格中包含的值
谢谢
答案 0 :(得分:1)
我猜是......
D[0]+3
是coda
地址的引用(函数调用中的*coda
)D[D[0]+3]
是查找存储coda
的地址的数据D[D[0]+3]+20
与coda
开始的偏移量为20,因此超过coda->c
(即20个项目)以转到coda->n
。这应该有助于你理解第一个;同样的想法可以扩展到第二个。