[org 0]
			[bits 16]

			jmp		0x07c0:start					; far jump

start:
			mov		ax, cs							; cs에는 0x07c0이 들어있다.
			mov		ds, ax							; ds = cs

			mov		ax, 0xb800						; 비디오 메모리의 세그먼트를
			mov		es, ax							; es 레지스터에 넣는다.
			mov		di, 0							; 제일 윗줄 처음에 쓸 것이다.
			mov		ax, word [msgBack]				; 써야 할 데이터의 주소 값을 지정한다.
			mov		cx, 0x07ff						; 0x07ff (10진수 2047)개의
													; word가 필요하다.

paint:
			mov		word [es:di], ax				; 비디오 메모리에 쓴다.
			add		di, 2							; 한 word를 썼으므로 2를 더한다.
			dec		cx								; 한 word를 썼으므로 cx의 값을 하나 줄인다.
			jnz		paint							; cx가 0이 아니면 다시 나머지를 쓴다.

			mov		edi, 0							; 제일 윗줄의 처음에 쓸 것이다.
			mov		byte [es:edi], 'D'
			inc		edi
			mov		byte [es:edi], 0x16
			inc		edi
			mov		byte [es:edi], 'o'
			inc		edi
			mov		byte [es:edi], 0x16
			inc		edi
			mov		byte [es:edi], 'n'
			inc		edi
			mov		byte [es:edi], 0x16
			inc		edi
			mov		byte [es:edi], '1'
			inc		edi
			mov		byte [es:edi], 0x06
			inc		edi
			mov		byte [es:edi], '2'
			inc		edi
			mov		byte [es:edi], 0x06
			inc		edi
			mov		byte [es:edi], '3'
			inc		edi
			mov		byte [es:edi], 0x06
;			inc		edi

			jmp		$								; 이 번지에서 무한루프를 돈다.

msgBack		db		'.', 0x67

times 510-($-$$)	db		0						; 여기서부터 509번지까지 0으로 채운다.
			dw		0xaa55							; 510번지에 0x55를, 511번지에 0xaa를 넣어둔다.


실행 결과



Posted by 쿨한넘