Assembly 欧文汇编合并数组

Assembly 欧文汇编合并数组,assembly,x86,masm,irvine32,Assembly,X86,Masm,Irvine32,我需要将已经排序的两个数组合并到另一个更大的数组中,也是按顺序。我不能用排序。它组装得很好,但不会显示任何内容 这就是我目前所拥有的。我是新来的,所以如果不是最好的,那就放轻松 include irvine32.inc Title MergeArrays .data a1 dw 1,3,4,7,9,15,17 a2 dw 2,6,8,10,11,14,18,19 a3 dw 15 dup(0) .code main proc sub EAX,EAX mo

我需要将已经排序的两个数组合并到另一个更大的数组中,也是按顺序。我不能用排序。它组装得很好,但不会显示任何内容

这就是我目前所拥有的。我是新来的,所以如果不是最好的,那就放轻松

include irvine32.inc
Title MergeArrays
.data
    a1 dw 1,3,4,7,9,15,17
    a2 dw 2,6,8,10,11,14,18,19
    a3 dw 15 dup(0)

.code
main proc
    sub EAX,EAX
    mov ESI,OFFSET a1
    mov EDI,OFFSET a2
    mov EDX,OFFSET a3
    mov ECX,lengthof a3 ;Set loop times

    call Merge
    call Display
    exit
    main endp
    jmp Endit

;=====================================================================
Merge proc
    TheLoop:
    TheJump:
    mov ax,[ESI]
    cmp ax,[EDI]
    jl AddA1        ;Jump if less
    jg AddA2        ;Jump if greater
    Loop TheLoop

    AddA1:
    mov ax,[ESI]
    mov [EDX],ax
    inc ESI
    inc EDX
    jmp TheJump

    AddA2:
    mov ax,[EDI]
    mov [EDX],ax
    inc EDI
    inc EDX
    jmp TheJump
Merge endp
;==================================================================
Display proc
    mov ECX,lengthof a3 ;Set loop times
    mov EDX,OFFSET a3

        DisplayLoop:
        mov ax,[EDX]
        call writedec
        call crlf
        inc EDX
        loop DisplayLoop
Display endp
;===================================================================


Endit:
end main

当循环降至零时会发生什么情况
ecx
变为负值,退出循环,然后继续执行下一条指令,该指令恰好是
AddA1
,然后返回到
跳转,然后跳转到
AddA1
AddA2
,这是一个无限循环。您需要在
循环循环之后和
AddA1
之前添加一些内容以退出该过程


您不需要真正的调试器,只需要打印通过的值以进行调试的调试器。

它不显示任何内容,因为它从不离开
合并
过程!!!进程的退出条件在哪里?你基本上有一个无止境的循环。。。学习使用调试器,或者更好,创建一个将打印值的调试宏…感谢您的帮助。在课堂上,我们只使用文本编辑器。我可能应该使用调试器。但是ECX没有设置循环时间吗?在a3(数组3)的长度之后,它不会停止吗。对不起,这些愚蠢的问题我对这一切都不熟悉。谢谢,我知道事情会很简单。除了一些其他问题外,它还起作用。你帮我省了几个小时的时间盯着同一个东西看。循环指令首先递减ECX,然后比较它为零。如果不为零,则分支到给定的标签。如果ECX变为零,则它将退出到
循环
指令之后的指令。ECX不会变为负数,但它会变为零。如果ECX在遇到
循环
指令之前等于零,则在这种情况下,它将递减1(变为负数),并且它还将跳转到指定的标签,因为ECX在递减后不等于零)。