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
'노트정리 > 어셈블리 책 스터디 공간' 카테고리의 다른 글
6.9.3 시험성적계산 (0) | 2010.06.30 |
---|---|
6.9.2 루프 구현 (0) | 2010.06.30 |
색상 행렬 (0) | 2010.06.14 |
무작위 화면 위치에 문자 출력 (0) | 2010.06.13 |
난수 정수 (0) | 2010.06.13 |
ch5 간단한 덧셈1 (0) | 2010.06.13 |
피보나치 수열 47항 까지 저장파일에 출력하기 (0) | 2010.06.13 |
컬러 텍스트 출력 - ch5. 텍스트 색상 그리기 (0) | 2010.06.12 |