この関数では、行列内の偶数を取得したいと考えています。私のパラメータは、二次元のポインタと行列の次元です。 誰も私を助けることができますか? Cで、私が間違ってました...行列内の偶数を数える
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
私の実装:
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;
}
マトリックスはどのように宣言されていますか? –
アセンブリ言語の完全な機能が表示されておらず、呼び出し規約を尊重していない(呼び出し先保存レジスタを保存または復元したり、%ebpを正しく設定しない) - コードを試すことができない私はあなたにそれを手伝ってくれるのではない。 – zwol
私は、あなたのアセンブリコードをline_と 'gcc -m32 -march = native -fomit-frame-pointer -fno-schedule-insns -fno-スケジュール-insns2 -O2 -S'。それらが異なるところでは、コンパイラはあなたが何かを知っていて何かを研究していると仮定します。 ( '.cfi_something blah blah blah'という行を無視しても問題ありません) – zwol