x86如何在数组中添加所有正整数

时间:2014-01-30 18:46:01

标签: assembly x86 sum

我在下面有这个代码,这似乎是将数组中的所有整数相加,而不仅仅是正数。我有点困惑如何解决这个问题,因为我是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
    }
}

1 个答案:

答案 0 :(得分: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