0

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

这就是我到目前为止所拥有的。我是新手,所以如果它不是最好的,那就放轻松。

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
4

1 回答 1

-1

TheLoop降至零时会发生什么? ecx变为负数,退出循环,然后KEEPS 转到下一条指令,该指令恰好AddA1又回到TheJumpthen 到AddA1or AddA2,这是一个无限循环。您需要在退出过程之后Loop TheLoop和之前添加一些内容。AddA1

您实际上并不需要调试器,只需要打印传递的值以进行调试的东西。

于 2012-12-10T00:30:44.227 回答