0
我希望得到一些幫助下面給出的代碼。該代碼應該爲表格引用一個參考,對象的數量並計算有多少個負值和奇數值。 然後它應該將負數值發送到存儲器中的一個表中,並將奇數值發送到存儲器中的另一個表中。 我試圖比較零,我試圖找到最後一點,我試圖XOR的註冊表,沒有任何工作。所有值都是長長類型是重要的。大會64位氣體,計數奇數和負數
.type max_1_ind, @function
.global max_1_ind
max_1_ind:
movq %rdi, %r8 # object table address from rdi to r8
xor %r11, %r11
xor %r12, %r12
movq %rcx, %r14 # rcx is needed for the loop
movq %rsi, %rcx # number of objects for the loop counter
xor %r15, %r15
loop:
movq (%r8), %r15
and $1, %r15
jc increase
continue:
movq (%r8), %r15
test %r15, %r15
jne increase2
continue2:
inc %r8
dec %rcx
cmpq $0, %rcx
jne loop
movq %r11, (%rdx)
movq %r14, %rcx
movq %r12, (%rcx)
finish:
xor %rax, %rax
ret
increase:
inc %r11
jmp continue
increase2:
inc %r12
jmp continue2
而 「C」 程序調用該函數
#include <stdio.h>
#include <stdlib.h>
extern long long max_1_ind(long long *tab, long long n, long long *even_cnt, long long *neg_cnt);
int main(void) {
long long tab[4] = {6, 2, -20, 3};
long long count = 4;
long long even_cnt[1] = {0};
long long neg_cnt[1] = {0};
max_1_ind(tab, count, even_cnt, neg_cnt);
printf("Result: %lld, %lld\n", *even_cnt, *neg_cnt);
return 0;
}
當你'INC%r8'如何,是否會增加R8?多長的價值有多寬? –
您應該在調試器中逐句通過彙編代碼。在逐步完成代碼時,您將能夠看到寄存器中的內容。 –
我提到r8是因爲我懷疑它是所有原始問題的根源。您的分支指令仍然存在問題。你的問題的標題說找到奇數,但你的變量名稱表明你試圖找到一個偶數。 –