콘솔화면에서

X 좌표값의 MAX치를 넘으면 커서는 다음행으로 이동한다


INCLUDE Irvine32.inc

.data
color	BYTE 255			;전경색
X		BYTE 0			;X좌표값

.code
main	PROC
	mov	ecx,256			;256가지 경우의 수만큼 반복
	L1:	
		mov	al,color		;전경색 대입
		call	SetTextColor	;전경색 세팅
		dec	color		;전경색값 변화
		
		mov	dl,X			;X좌표값 대입
		call	GotoXY		;커서 이동
						;콘솔화면의 X좌표값을 벗어나면 다음 행으로 자동이동
		inc	X			;X좌표값 증가
				
		pushad			;스택에 레지스터 저장
		mov	al,'A'		;AL 레지스터에 'A'문자 대입
		call	WriteChar		;화면에 'A'문자 출력
		popad			;스택에서 레지스터값 팝
			
	loop	L1
	ret
main	ENDP
END	main

간결한 코드는 삽질에서 비롯된다.

밑은 삽질의 흔적

커서의 행이동을 먼저 생각해서 복잡해진 사례

INCLUDE	Irvine32.inc

.data
color	BYTE	255
Y		BYTE 0
X		BYTE 0
str1		BYTE "공도리",0

.code
main		PROC
	mov	ecx,10				;L1 10번 반복
 L1:
	mov	dl,X					;X좌표값 대입
	mov	Y,0					;Y좌표값 0 대입, 첫째줄로 이동
	mov	dh,Y					;Y좌표값 대입, 첫째줄로 이동

	call	GotoXY				;DX에 해당하는 좌표로 이동
	pushad					;레지스터 푸시	- (1)

	mov	ecx,24				;L2 24번(Y좌표 행 row의 크기 만큼) 반복

	L2:	mov	al,color			;eax에 전경색 대입
		call	SetTextColor		;전경색 세팅
		mov	edx,OFFSET str1	;str1의 주소값 대입
		call	WriteString		;화면에 문자열 출력
		mov	dl,X				;X좌표값 세팅
		mov	dh,Y				;Y좌표 세팅
		call	GotoXY			;(X,Y)좌표로 이동
		inc	Y				;Y좌표값 증가
		dec	color			;전경색 값 변경
		
		pushad				;레지스터 푸시	- (2)
		mov	eax,25			;딜레이 시간 25ms세팅
		call	Delay			;딜레이 주기
		popad				;레지스터 팝	- (2)

		loop L2				;L2루프 반복

	popad					;레지스터 팝	- (1)
	add	X,6					;X좌표값 증가
	loop	L1					;L1루프 반복
	
	mov	ecx,16				;남은 반복수 16로 L3루프 반복
	
	add	X,6					;다음 X좌표로 이동
	mov	dl,X					;X좌표 대입
	mov	Y,0					;Y좌표값 0 대입, 첫째행으로 이동
 L3:	mov	al,color				;eax에 전경색 대입
	call	SetTextColor			;전경색 세팅
	mov	edx,OFFSET str1		;str1의 주소값 대입
	call	WriteString			;화면에 문자열 출력
	call	GotoXY				;커서 이동
	inc	Y					;Y좌표값 증가
	mov	dh,Y					;다음 행으로 이동
	mov	dl,X
	dec	color				;전경색 값 변경
	
	pushad				;레지스터 푸시	- (3)
	mov	eax,25			;딜레이 시간 25ms세팅
	call	Delay			;딜레이 주기
	popad				;레지스터 팝	- (3)
	
	loop	L3	
	ret
main		ENDP
END		main

'노트정리 > 어셈블리 책 스터디 공간' 카테고리의 다른 글

6.9.5. 6.9.6 대학등록(1)(2)  (0) 2010.07.12
6.9.4 시험성적계산2 (어셈블리어)  (0) 2010.06.30
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
간단한 덧셈2  (0) 2010.06.13
ch5 간단한 덧셈1  (0) 2010.06.13
Posted by 도전하는 공돌이pooh

댓글을 달아 주세요