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 回答