到目前为止,我尝试了几种方法在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
答案 0 :(得分:1)
好的,Stack
是LIFO,这意味着您推入堆栈的最后一个值是弹出的第一个值,对吗?
如果你这样做:
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