2014-01-30 4 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

관련 문제