[英]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
然后要么AddA1
或AddA2
,它是一個無限循環。 您需要在Loop TheLoop
和AddA1
之前添加一些AddA1
以退出proc。
您實際上並不需要調試器,只需打印將傳遞的值以進行調試的調試器即可。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.