2017-06-20 107 views
1

我试图将数组复制到另一个数组,但元素的顺序应该颠倒并显示。我的程序文件编译但不运行,并且每次都会导致Windows停止错误(Windows对话框)。
我不知道我在做什么错。请指教。将数组复制到另一个数组并将其显示在组件中

INCLUDE Irvine32.inc 

.data 
sarray DWORD 500h, 400h, 300h, 200h, 100h 
darray DWORD 5 DUP(?) 

.code 
main PROC 

    mov eax, 0 
    mov esi, OFFSET sarray ;move first element address to esi 
    mov edi, OFFSET darray + SIZEOF darray - TYPE darray ;move last element address to edi 
    mov ecx, LENGTHOF sarray ;sets the counter in the reverseLoop 

    reverseLoop: 
    mov eax,sarray[esi]  ;move 1st sarray element to eax 
    mov darray[edi],eax  ;move 1st sarray element as last element on darray 
    call WriteInt 
    call Crlf 
    add esi, TYPE sarray 
    sub edi, TYPE darray 
    call WriteInt 
    loop reverseLoop 

    exit 
main ENDP 

END main 

编辑:我的问题是,esiedi就已经加入(OFFSET sarray)地址,但在循环,我再次(mov eax, sarray[esi])的添加开始。

修复程序后,我不得不添加另一个循环打印的第二darray(新)

+0

你必须退出你的循环的条件? –

+0

x86上的'loop'指令将'ecx'作为计数器递减,如果它变为零则退出。所以,这不是无限的。 – Jester

+1

“我的程序文件在编译后停止工作。”不是一个好的错误描述,请详细说明发生了什么。另外,使用调试器。 – Jester

回答

0

我的问题是,esiedi与地址已添加OFFSET sarray,但在环我增加了重新开始(mov eax, sarray[esi])。

解决这个问题后,我还必须添加另一个循环来打印第二个数组(反转的)。

这里是工作代码:

INCLUDE Irvine32.inc 

.data 
sarray DWORD 500h, 400h, 300h, 200h, 100h 
darray DWORD 5 DUP(?) 

.code 
main PROC 

    mov esi, OFFSET sarray        ;move first element address to esi 
    mov edi, OFFSET darray + SIZEOF darray - TYPE darray ;move last element address to edi 
    mov ecx, LENGTHOF sarray        ;sets the counter in the reverseLoop 

reverseLoop: 
    mov eax,[esi]  ;move 1st sarray element to eax 
    mov [edi],eax  ;move 1st sarray element as last element to the darray 
    add esi, TYPE sarray 
    sub edi, TYPE darray 
    loop reverseLoop 
    call clrscr 

    mov esi, OFFSET darray 
    mov ecx, LENGTHOF darray 
    mov ebx, 0 

printerLoop: 
    mov eax,[esi] 
    call WriteHex   
    call Crlf 
    add esi, TYPE darray 
    loop printerLoop 

    call Crlf 

    exit 
main ENDP 

END main 
+0

为了使这个更好的答案(我会upvote),请[编辑]它包括(在顶部)简要说明你的原始代码有什么问题以及你如何改变它。 Jester基本上已经在评论中告诉你了,所以能够提示并将其转化为真实的代码是非常棒的,但理想情况下,我们希望这些信息本身就是答案。 –

+0

Edited.Thank您的意见 – mwater07

相关问题