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

我真的不明白这段 C 代码做了什么,我需要这样做,这样我才能将它“翻译”成汇编程序

4

1 回答 1

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

它创建了 50 个 100 的数组int。然后它用 value 初始化第th 数组的b第 th 整数。但是你应该初始化,和。否则,由于它们具有自动存储期限,它们的值将是未定义的。acabc

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

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

于 2013-03-03T17:29:24.820 回答