在这个函数中,我希望在矩阵中得到偶数。我的参数是二维指针和矩阵的维度。 有人可以帮帮我吗?哪里出错...
subl $12, %esp # 12 bytes to local variables
movl $0, -12(%ebp) # counter = 0
movl 8(%ebp), %esi # **m
movl $0, %ebx # i = 0
it_rows:
cmpl 12(%ebp), %ebx # while(i != y)
jz end # if not equal jump
leal (%esi, %ebx, 4), %edi # m+i
movl $0, %ecx # j = 0
it_col:
cmpl 16(%ebp), %ecx # while(j != k)
jz next_row
movl (%edi, %ecx, 4), %eax # *(*(m+i)+j)
andl $0x1, %eax # LSB
cmpl $0, %eax # LSB == 0
jnz not_even
movl -12(%ebp), %eax # counter
incl %eax # counter++
movl %eax, -12(%ebp) # update local variable
not_even:
incl %ecx # j++
jmp it_col
next_row:
incl %ebx # i++
jmp it_rows
我在C中的实现:
int count_even_matrix(int **m, int y, int k) {
int i, j;
int c = 0;
for(i = 0; i < y; i++) {
for(j = 0; j < k; j++) {
if(*(*(m+i)+j)%2 == 0) {
c++;
}
}
}
return c;
}
答案 0 :(得分:0)
使用
更改if
if ((m[i][j] % 2 ) == 0) {
c++;
}
i
是您的矩阵行索引,j
是列索引。这两个for
已经增加了它们。
答案 1 :(得分:0)
我只是C中的初学者,但是如果你将二维数组的数组名称传递给你的函数,你实际上是将一个指针传递给数组的第一个元素,在本例中是一个3元素的一维数组。所以我相信你的指针应该声明为int(* m)[3]。
答案 2 :(得分:0)
我想将我的C实现写到汇编中。
您的程序集只有一个错误:leal
,必须为movl
。考虑一下,您所说的二维指针是int **
类型所传达的指向int
指针的指针。与
leal (%esi, %ebx, 4), %edi # m+i
您仅将指针的地址加载到第 ebx 行中的int
,但是实际上您需要该指针的值,即。 e。 int
的地址,以及您获得的地址
movl (%esi, %ebx, 4), %edi # *(m+i)