2011-09-29 54 views
-1

我應該扭轉陣列。我一直在努力,這是我的。誰能告訴我我做錯了什麼?如何在裝配中反轉陣列?

.data 
array BYTE 10h, 20h, 30h, 40h 

.code 
main PROC 
    mov esi, 0 
    mov edi, 0 
    mov esi, OFFSET array 
    mov edi, OFFSET array + SIZEOF array 
    mov ecx, SIZEOF array/2 

l1: mov al, [esi] 
    mov bl, [edi] 
    mov [edi], al 
    mov [esi], bl 
    inc esi 
    dec edi 
    LOOP l1 

    call DumpRegs 
    call DumpMem 

    exit 

main ENDP 

END main 
+1

作業的問題?無論如何,如果你在閱讀或寫作之後減少*,你最初不應該將'edi'放在數組的末尾。 – 2011-09-29 20:24:09

回答

-1

試圖聲明兩個陣列,一個intilized與您的值並且另一個可以是這樣使用DUP操作者5 DUP(?)

,並且開始使用從第一陣列移動值到所述第二循環。

實施例:(?)

。數據 myArr1 DWORD 5,4,3,2,1 myArr2 DWORD 5 DUP

.CODE主PROC MOV EDI,偏移myArr1 添加EDI,的sizeof myArr1 MOV ESI,偏移myArr2 MOV ECX,lengthof myArr2

reverseLoop: 添加EBX,[EDI] MOV [EDI],EBX 子EDI,類型myArr2 附加ESI,類型myArr1 MOV EAX,[EDI] 呼叫writeint

LOOP reverseLoop

出口 主ENDP 端主

+0

你的意思是說要在原地做一個嬰兒的步驟?當你在原地進行循環時,循環邊界是不同的。這不像就地是複雜得多,只是不同。 –

+0

如果您認爲它有用,您應該將其編輯到您的答案中。這不會幫助任何人作爲評論,沒有格式。 –