2012-11-13 34 views
0

我正在写一个数字操作程序,并且一步就是反转数组。到目前为止,我有如何在Irvine汇编语言中反转数组?

reverseArray proc 
mov eax, arraySize 
mov temp, eax 
Imul eax, 4 
mov esi, eax 
mov eax, 0 
mov number, 0 
jne L1 
L1: 
cmp temp, 0 
je L3 

mov eax, numbers[esi] 
mov tempnumbers[ecx], eax 

mov eax, tempnumbers[ecx] 
call writeDec 
call crlf 


sub esi,4 
add ecx, 4 
sub temp, 1 

loop L1 


L2: 
ret 


L3: 

.If(number >= 0) 

mov esi, 0 
.ENDIF 
mov eax, number 
cmp eax, arraySize 
je L2 


mov eax, tempnumbers[esi] 
mov numbers[esi], eax 

add esi, 4 
add number, 1 
loop L3 

但是,这只能颠倒我的数组的一半。我在esi或ecx计数器上做错了什么?任何帮助,将不胜感激。

+1

不清楚你如何使用'ecx'。它在哪里初始化?你为什么要添加ecx,4'然后是'loop'?从顶部再次考虑这一点。先写评论可能会有所帮助。 –

+0

我的思考过程是,ecx从0开始,并将数组中的位置指定给数组array array final spot。在ECX循环之前,一个点和esi会向下移动一个点。但由于某种原因,它只适用于前五个地方,然后开始给我大量无关的数字 – Bill

+0

ecx可能是真的,从0开始 - 但我不会指望它! 'loop'指令减少ecx,所以你只能移动“四分之三的点”。我不知道这是你的问题还是不是... –

回答

0

使用edi代替ecx,并在开始时将其设置为0。