2014-10-02 6 views
0

프로그램을 빌드하거나 실행하는 데 오류가 있습니다. 배열을 반복하고 첫 번째 요소를 끝으로 이동하고 기본적으로 모든 요소를 ​​인덱스에서 하나씩 위로 이동합니다. 인덱싱이 필요하지만 나에게 혼란스러운 구문 부분이 있다는 것을 알고 있습니다.어셈블리가있는 배열 회전

도와주세요!

INCLUDE Irvine32.inc 

.386 
.model flat,stdcall 
.stack 4096 
ExitProcess proto,dwExitCode:dword 

.data 
array dword 10h,20h,30h,40h 
arraySize dword lengthof array 

.code 
main proc 

    mov ecx, 0 

    loop_start: 
    cmp ecx, 7 
    jge loop_end 

    mov eax, array[ecx*4] 
    ; Use Irvine's WriteHex to display value in register eax 
    call WriteHex 
    call Crlf 
    add ecx, 1 
    jmp loop_start 
    loop_end: 

    INVOKE ExitProcess, 0 
main endp 
end main 

도움을 주시면 감사하겠습니다.

+0

달성하고자하는 것에 대한 귀하의 설명이 명확하지 않습니다. 배열을 어떻게 바꾸고 싶습니까? {0,1,2,3} -> {1,2,3,0} (기본적으로 배열 회전)? – EOF

+0

예! 정확하게! 어떻게 그렇게 할 것입니까? 레지스터가있는 내 논리/구문이 꺼져 있습니다. –

답변

0

나는 더 높은 수준의 언어로 구성 알고리즘을 작성하여 시작하는 것이 좋습니다 :

void rotateArray(uint32_t *arr, size_t num) 
{ 
    uint32_t temp = arr[0]; 
    for (size_t i = 0; i<num-1; i++) //loop is essentially a memmove() 
    { 
     arr[i] = arr[i+1]; 
    } 
    arr[num-1] = temp; 
    return; 
} 

이 심지어 meatbag 인간에 대한, 컴파일 간단합니다.