我需要将已经排序的两个数组合并到另一个更大的数组中,也按顺序合并。我不能使用排序。它组装好但不会显示任何内容。
这是我到目前为止所拥有的。我是新手,所以如果它不是最好的那么容易。
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
答案 0 :(得分:-1)
当TheLoop
降至零时会发生什么? ecx
变为否定,退出循环然后 KEEPS 转到恰好是AddA1
的下一条指令,然后返回TheJump
然后再转移到AddA1
}或AddA2
,它是一个无限循环。您需要在Loop TheLoop
之后和AddA1
之前添加一些内容以退出proc。
你真的不需要调试器,只需打印传递的值进行调试。