gpt4 book ai didi

无法理解从 C 到汇编的这种转换

转载 作者:行者123 更新时间:2023-11-30 16:04:26 25 4
gpt4 key购买 nike

我想知道是否有人可以向我解释这个问题的解决方案:

代码是:

#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; code> in 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 是距 coda 开始位置 20 的偏移量,从而越过 coda->c (即 20 项)到达 coda->n

这应该可以帮助你理解第一个;同样的想法可以扩展到第二个。

关于无法理解从 C 到汇编的这种转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3124730/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com