2011-09-29 66 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

如果您认为它有用,您应该将其编辑到您的答案中。这不会帮助任何人作为评论,没有格式。 –