2014-01-30 34 views
1

我在下面有下面的代碼,這似乎是將數組中的所有整數相加,而不是僅取正數。我有點困惑如何解決這個問題,因爲我是x86裝配編程的新手。感謝您的幫助!x86如何在數組中添加所有正整數

int addpos(int* X, int length){ 
    __asm{ 
     PUSH ebx 
     PUSH ecx 
     PUSH edx 
     PUSH esi 
     PUSH edi 
     MOV ebx, X 
     MOV ecx, length 

     xor eax, eax 
    L1: 
     cmp ecx, 0 
     add eax, [ebx] 
     add ebx, 4 
     loop L1 

     POP edi 
     POP esi 
     POP edx 
     POP ecx 
     POP ebx 
    } 
} 
+0

移除你的問題的內容不會幫助任何人。它刪除Q&A格式的*上下文*。 –

回答

1

可能有更有效的變化,但下面應該做的:

xor eax, eax ; total = 0 
L1: 
    mov esi, [ebx] ; X[i] 
    add ebx, 4  ; or: lea ebx, [ebx + 4] 
    test esi, esi 
    js L2   ; jump if sign (most significant) bit set. 
    add eax, esi ; total += X[i] 
L2: 
    loop L1 

這可能不是構建循環的最佳方式 - 它假定:length (ecx) != 0

相關問題