簡體   English   中英

爾灣大會:合並兩個不同大小的數組

[英]Irvine Assembly: merging two different sized arrays

我試圖將這兩個排序數組合並在一起。 我知道問題是程序在達到其大小限制后嘗試比較第一個數組時,但是在弄清楚如何克服這個問題時我迷失了。 任何幫助將非常感激。

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

您應該為每個數組中處理了多少個元素維護單獨的計數器。 一旦到達其中任何一個的末尾,只需復制另一個中的其余元素即可。 還要注意,如果元素相等,則不要復制,但應該復制。

i = j = k = 0;
while(i < length1 && j < length2)
{
    switch(compare(src1[i], src2[j]))
    {
        case -1: // src1 is less, copy it
            dst[k++] = src1[i++];
            break;
        case 0:  // equal, copy src2 but also increment i
            i++;
            // fall-through
        case 1:  // src2 is less, copy it
            dst[k++] = src2[j++];
    }
}
// at this point we have reached the end of one of the arrays
// just copy remaining elements
// note only one of these loops will do anything
while(i < length1)
{
    dst[k++] = src1[i++];
}
while(j < length2)
{
    dst[k++] = src2[j++];
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM