loop 속의 loop 문제 : 스택에 레지스터의 푸시와 팝을 이용합니다.
주의할 점 : 32비트용 범용 레지스터의 push와 pop은 pushad, popad 명령어를 이용한다는 점이고
일반 push, pop 명령어와는 다르게 레지스터를 적어놓지 않아도 통째로 스택에 들어간다는 점입니다.

INCLUDE Irvine32.inc

INTEGER_COUNT = 2

.data
str1		BYTE "Enter a signed integer : ",0
str2		BYTE "The sum of the integer is: ",0
array	DWORD INTEGER_COUNT DUP(?)
rowval	BYTE 12	;//커서의 행 값을 저장하기 위한 변수

.code
main	PROC
	mov	ecx,3
	pushad
 L1:
	call	Clrscr
	mov	esi,OFFSET array
	mov	ecx,INTEGER_COUNT	
	call	PromptForIntegers
	call	ArraySum
	call	DisplaySum
	call	WaitMsg
	popad
	mov	rowval,12
	loop	L1
	exit
main	ENDP

PromptForIntegers	PROC USES ecx edx esi
	mov	edx,OFFSET str1	
 L1:	
	call	GoToCenter
 	call	WriteString
	call	ReadInt
	call	Crlf
	mov	[esi],eax
	add	esi,TYPE DWORD
	loop	L1
	ret
PromptForIntegers	ENDP

ArraySum	PROC USES esi ecx
	mov	eax,0
 L1:	add	eax,[esi]
	add	esi,TYPE DWORD
	loop	L1
	ret
ArraySum	ENDP

DisplaySum	PROC USES edx
	mov	edx,OFFSET str2
	call	GoToCenter
	call	WriteString
	call	WriteInt
	call	Crlf
	ret
DisplaySum	ENDP

GoToCenter	PROC	USES edx	;//커서를 화면의 중간쯤으로 보내는 프로시저
	pushad
	mov	dl,30
	mov	dh,rowval
	call	GotoXY
	inc	dh
	mov	rowval,dh
	popad
	ret
GoToCenter	ENDP

END	main

Posted by 공돌이pooh
,