int matrix[50][100], a, b, c;
matrix[a][b] = c;
我真的不明白这段 C 代码做了什么,我需要这样做,这样我才能将它“翻译”成汇编程序
int matrix[50][100], a, b, c;
matrix[a][b] = c;
它创建了 50 个 100 的数组int
。然后它用 value 初始化第th 数组的b
第 th 整数。但是你应该初始化,和。否则,由于它们具有自动存储期限,它们的值将是未定义的。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 中,数组确实以行优先顺序存储。也就是说,在编写matrix[a][b]
源代码时,您将访问:
offset = row*NUMCOLS + column = a*100 + b
这就是汇编代码显示的内容。