这个C矩阵代码做了什么?

时间:2013-03-03 17:24:12

标签: c matrix

int matrix[50][100], a, b, c; 
matrix[a][b] = c; 

我真的不明白这个C代码的作用,我需要这样做,所以我可以“翻译”成汇编程序

1 个答案:

答案 0 :(得分:3)

int matrix[50][100], a, b, c; 
matrix[a][b] = c;

它创建了50个100 int的数组。然后它使用值b初始化a数组的c整数。但您应初始化abc。否则,由于它们具有自动存储持续时间,因此它们的值将是未定义的。

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

这就是汇编代码所显示的内容。