0
我試圖將這兩個排序的數組合並在一起。我知道問題出在程序試圖在達到其大小限制之後比較第一個數組時,但我在計算如何克服這個問題時感到不知所措。任何幫助將非常感激。歐文大會:合併兩個不同大小的陣列
include irvine32.inc
Title ArrayMerge
.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
call Merge
call Display
exit
main endp
;=====================================================================
Merge proc
mov ECX,lengthof a3 ;Set loop times
TheLoop:
TheJump:
mov ax,[ESI]
cmp ax,[EDI]
jl AddA1 ;Jump if less
jg AddA2 ;Jump if greater
Loop TheLoop
jmp EndJump
AddA1:
mov ax,[ESI]
mov [EDX],ax
add ESI,2
add EDX,2
jmp TheJump
AddA2:
mov ax,[EDI]
mov [EDX],ax
add EDI,2
add EDX,2
jmp TheJump
EndJump:
ret
Merge endp
;==================================================================
Display proc
mov ECX,lengthof a3 ;Set loop times
mov EDX,offset a3
DisplayLoop:
mov ax,[EDX]
add EDX,2
call writedec
call crlf
loop DisplayLoop
ret
Display endp
;===================================================================
end main
使用調試器單步執行代碼,看看它在哪裏做了一些意想不到的事情。啊沒關係,我看到這不是一個調試問題。儘管如此,我會把它留作一般性建議。 – Jester
我知道問題在於當第一個數組超出數組長度時執行比較時出現問題。我想知道如何設置循環以避免發生這種情況。 – codeslinger
什麼是「Irvine Assembly」? –