繁体   English   中英

尔湾大会合并数组

[英]Irvine Assembly merge arrays

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

到目前为止,这就是我所拥有的。 我对此并不陌生,所以如果不是最好的,那就轻松一些。

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

TheLoop降至零时会发生什么? ecx变为负,退出循环,然后KEEPS要这恰好是下一条指令AddA1然后回到TheJump然后要么AddA1AddA2 ,它是一个无限循环。 您需要在Loop TheLoopAddA1之前添加一些AddA1以退出proc。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM