OS 커널의 구조와 원리에서 문자열이 깨져요...

kimmch696의 이미지

코드 내용은 아래와 같고 kernel 이라는 문자열을 출력하는 것입니다 근데 문자열은 출력이 안되고 배경은 찍히는데 않되네요... 컴파일러 버전을 바꿔 보라고해서 바꿔도 봤는데 안되고... 소스에 문제는 없어 보이는거 같은데 아시는 분 해결책 좀 알려주세요...ㅠ

[org 0]				;컴파일러에 실행을 위한 주소를 알려주고 offset을 계산할 때 지정된 값만큼 더해준다.
 
[bits 16]			;16bit로 이루어진 code이다.
 
start:
	mov ax, cs		;CS에서는 0x1000이 들어 있다.
	mov ds, ax		;
	xor ax, ax
	mov ss, ax
 
	lea esi, [msgKernel]	;문자열이 있는 곳의 주소를 구함
	mov ax, 0xB800		;
	mov es, ax		;es에 0xB800을 넣는다.
	mov edi, 0		;화면의 제일 처음 부분부터 시작할 것이다.
	call printf		;
 
	jmp $			;현재 주소를 나타내므로 무한 loop에 빠진다
 
printf:
	push eax		;먼저 있던 eax 값을 스택에 보존해 놓는다.
 
printf_loop:
	mov al, byte [esi]	;esi가 가리키는 주소에서 문자를 하나 가져온다.
	or al, al		;문자를 화면에 나타낸다.
	jz printf_end		;0이라면 print_end로 점프한다.
	inc edi			;0이 아니라면 edi를 1증가시켜 
	mov byte [es:edi], 0x06	;문자색과 배경색의 값을 넣는다.
	inc esi			;다음 문자를 꺼내기 위해 esi를 ㅎㅏ나 증가시킨다.
	jmp printf_loop		;루프를 돈다.
 
printf_end:
	pop eax			;스택에 보존했던 eax를 다시 꺼낸다.
	ret			;호출한 부분으로 돌아간다.
 
msgKernel db"kernel", 0
grassman의 이미지

소스 코드를 보면 0xb800:0001 부터 0x06만 줄기차게 입력하는 코드가 되는군요.
2 byte 단위로 색과 문자를 쓰도록 되어 있는 곳이니 0x06의 색상으로 아스키
코드 0x06만 문자열 길이의 반 정도 출력되겠지요.

소스에 빠진 한 줄을 찾아서 채워 넣어보시기 바랍니다.

댓글 달기

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 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • 사용할 수 있는 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>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • You can use Textile markup to format text.
  • 사용할 수 있는 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>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 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>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.