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