0

これまでのところ、値を DWORD で出力する方法をいくつか試しましたが、最初または最後の桁しか取得できず、5 桁すべてを逆順に出力する必要があります。

INCLUDE Irvine32.inc

.data

arr1 DWORD 2, 4, 6, 8, 10

.code
main PROC
    mov ecx,4
    mov esi,0
L1:
    mov eax,arr1[esi]

    push eax 
    sub esi,4
    loop L1
    mov ecx,4   
    mov esi,0
L2:     pop eax
    mov arr1[esi],eax
    add esi,4
    loop L2
    mov esi,OFFSET arr1
    mov ecx,4
L3:
    mov eax,[esi+ecx*4]

    call WriteDec
    sub ecx,4
    call EndLine
    loop L3
    call Crlf

    exit
main ENDP
END main
4

1 に答える 1

2

わかりました、これStackLIFOです。スタックに最後にプッシュした値が、最初にポップされた値ですよね?

もしあなたがそうするなら:

push    2
push    4
push    6
push    8
push    10

次に、スタックからポップされた最初の値は 10、次に 8、次に 6 などです。したがって、10 が最初に出力されます。

と逆の順序で値を出力したいだけなので、多くのコードを取り除くことができますpop

main PROC
    mov     ecx, 5
    mov     esi, 0
L1:
    push    arr1[esi]   
    add     esi, 4      ; add 4 to arr1 pointer
    loop    L1          ; loop until ecx == 0

    mov     ecx, 5      ; reset loop counter
L3:
    pop     eax
    call    WriteDec
    call    Crlf
    loop    L3

    call    Crlf
    call    WaitMsg
    exit
main ENDP

ここに画像の説明を入力

于 2013-10-27T06:20:13.780 に答える