[英]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.