int matrix[50][100], a, b, c;
matrix[a][b] = c;
我真的不明白这个C代码的作用,我需要这样做,所以我可以“翻译”成汇编程序
答案 0 :(得分:3)
int matrix[50][100], a, b, c;
matrix[a][b] = c;
它创建了50个100 int
的数组。然后它使用值b
初始化a
数组的c
整数。但您应初始化a
,b
和c
。否则,由于它们具有自动存储持续时间,因此它们的值将是未定义的。
int matrix[50][100];
int a = 2;
int b = 3;
int c = 4;
matrix[a][b] = c;
这就是我的gcc
(4.4.4)将代码转换为汇编(AT& T语法)的方式:
movl $2, -4(%ebp) # a = 2
movl $3, -8(%ebp) # b = 3
movl $4, -12(%ebp) # c = 4
movl -4(%ebp), %edx # %edx = a = 2
movl -8(%ebp), %eax # %eax = b = 3
imull $100, %edx, %edx # %edx = 100 * a = 100 * 2 = 200
addl %eax, %edx # %edx = %edx + b = 200 + 3 = 203
# Formula: %edx = 100 * a + b
movl -12(%ebp), %eax # %eax = c = 4
movl %eax, -20012(%ebp,%edx,4) # Access to 203-th element (each of these
# are 4 bytes, ie. sizeof(int) on my
# computer) and put %eax = 4 in it.
在C中,数组确实存储在row-major order中。也就是说,在源代码中编写matrix[a][b]
时,您将访问:
offset = row*NUMCOLS + column = a*100 + b
这就是汇编代码所显示的内容。