왜 제대로 실행결과가 나오지 않을까요 ..

Reper의 이미지

[org 0]
[bits 16]
 
start:
	mov ax, cs
	mov ds, ax
	xor ax, ax
	mov ss, ax
 
	mov ax, 0xB800
	mov es, ax
	xor edi, edi
	lea esi, [ds:msgRMode]
	call print
 
	cli
 
	lgdt[gdtr]
 
	mov eax, cr0
	or eax, 0x00000001
	mov cr0, eax
 
	jmp $+2
	nop
	nop
 
	;db 0x66
	;db 0x67
	;db 0xEA
	;dd pm_start
	;dw sys_code_selector
 
	JMP DWORD sys_code_selector:pm_start
 
; From now on, Protected Mode will be started.
 
[bits 32]
 
pm_start:
	mov bx, sys_data_selector
	mov ds, bx
	mov es, bx
	mov fs, bx
	mov gs, bx
	mov ss, bx
 
	xor eax, eax
	mov ax, video_selector
	mov es, ax
	mov edi, 80 * 2 * 10 + 2 * 10
	lea esi, [ds:msgPMode]
	call print
 
	jmp $
 
; Subroutines
 
print:
	push eax
 
print_loop:
	or al, al
	jz print_end
	mov al, byte [esi]
	mov byte [es:edi], al
	inc edi
	mov byte [es:edi], 0x07
	inc esi
	inc edi
	jmp print_loop
 
print_end:
	pop eax
	ret
 
msgPMode db "Protected Mode" , 0
msgRMode db "Real Mode" , 0
 
; GDT Table
 
gdtr:
	dw gdt_end - gdt - 1
	dd gdt + 0x10000
 
gdt:
	dw 0
	dw 0
	db 0
	db 0
	db 0
	db 0
 
; code segment descriptor
 
sys_code_selector equ 0x08
	dw 0xFFFF
	dw 0x0000
	db 0x01
	db 0x9A
	db 0xCF
	db 0x00
 
; data segment descriptor
 
sys_data_selector equ 0x10
	dw 0xFFFF
	dw 0x0000
	db 0x01
	db 0x92
	db 0xCF
	db 0x00
 
; video segment descriptor
 
video_selector equ 0x18
	dw 0xFFFF
	dw 0x8000
	db 0x0B
	db 0x92
	db 0x40
	db 0x00
 
gdt_end:

보호 모드로 진입하기 전 리얼 모드에서도 문자열을 출력하고자 합니다. 그런데 이미지를 만들고 나서 부팅시 문자열 출력이 두 부분 모두 되질 않네요...
리얼 모드에서 문자열을 출력하는 부분쪽을 지워버리면 보호 모드에서는 출력이 잘 됩니다. 왜 두 모드에서 같은 print 함수를 사용해서 문자열을 화면에
띄우려고 하면 안되는 걸까요 .... 제가 생각하기론 16비트와 32비트 명령어의 차이 때문에 발생하는 현상 같은데 .. 혹시 도움을 좀 주실 수 있는분 계신가요 ..

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.