簡體   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