typedef struct {
char array[B];
int t;
short s[B];
int u;
} str2;
typedef struct {
short x[A][B];
int y;
} str1;
void setVal{str1* p, str2 *q) {
int v1 = q->t;
int v2 = q->u;
p->y = v1+v2;
}
movl 12(%ebp), %eax
movl 40(%eax), %edx
addl 12(%eax), %edx
movl 8(%ebp), %eax
movl %edx, 96(%eax)
我无法理解 IA32 代码。我明白第一个 movl 指令表示 %eax = q,第四个 movl 指令表示 %eax = p,但我不明白第二个、第三个和第五个指令是什么意思。我认为第二条指令意味着 q + B(char 1byte) = q + 40。对吗?
最佳答案
第二条和第三条指令对eax
的值进行操作,其中包含q
的值。
第二条指令获取q
指向的内存位置加上40字节的值。添加位移是因为引用的struct
成员的偏移量是40字节。
第三条指令添加另一个成员,基本上计算表达式 v1+v2
。同样,eax
(包含 q
的值)指向 str2
并且位移 12
是偏移到引用成员的 struct
。
第四条指令用p
加载eax
,第五条指令加载计算表达式v1+v2
,到p
加上96字节,即p->y
,点。
关于c - 这段代码用什么来确定数组的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41109975/