ورود

View Full Version : سوال: چاپ یک متن در کرنل



ahmadreza72
جمعه 27 دی 1392, 09:08 صبح
سلام. من یک بوت لودر نوشتم که switch to protected mode رو انجام میده و کد کرنل رو لود میکنه. حالا میخوام توی کرنل با استفاده از ادرس 0xb8000 یه متنی چاپ کنم ولی نمیشه. اگه کسی این کارو کرده یه توضیح بذاره. خیلی لازمه!:افسرده::افسرده:

r00tkit
جمعه 27 دی 1392, 14:59 عصر
http://wiki.osdev.org/Printing_To_Screen

pswin.pooya
جمعه 27 دی 1392, 20:45 عصر
سلام
باید برای حافظه identity maping انجام بدی. یعنی آدرسها رو دقیقا به همون آدرسهای قبلی مپ کنی. ( اگر صفحه بندی رو فعال کردی ).

ahmadreza72
یک شنبه 29 دی 1392, 07:40 صبح
سلام
من در سطح مبتدی هستم. میشه بگین چطوری باید این کار رو کنم؟:متفکر:
اگه کد خاصی داره برام بذارین .

m.j_banitaba
یک شنبه 29 دی 1392, 10:36 صبح
نکته اصلی همانطور که دوستان گفتن جداولی است که باید به درستی بارگذاری بشه . اگه نمونه کد خودت رو بذاری بهتر می شود کمک کرد. کد پایین رو بخشی رو خودم نوشتم بخشی هم کپی کردم.


macro m_proc proc_name
{
proc_name:
push ebp
mov ebp,esp
pushad

}
macro m_ret
{
popad
mov esp,ebp
pop ebp
ret
}

m_proc putc
mov ebx,0xb8000
mov ecx,[char_ptr]
mov [ebx+ecx],al
call inccursor
m_ret

m_proc inccursor

call getcursor
inc bx
call setcursor
inc [char_ptr]
inc [char_ptr]
m_ret


;-------------------------------;
; get the cursor pos ;
; out: bx = offset ;
;-------------------------------;
getcursor:
push ax
push dx

mov dx, 0x3D4
mov al, 0x0E
out dx, al
inc dx
in al, dx
mov bh, al
mov al, 0x0F
dec dx
out dx, al
inc dx
in al, dx
mov bl, al

pop dx
pop ax
ret


;--------------------------;
; set the cursor to: ;
; bx = offset ;
;--------------------------;
setcursor:
push ax
push bx
push dx

mov al, 0x0E
mov ah, bh
mov dx, 0x3D4
out dx, ax
inc ax
mov ah, bl
out dx, ax

pop dx
pop bx
pop ax
ret

ahmadreza72
یک شنبه 06 بهمن 1392, 20:00 عصر
با سلام. مشکل چاپ متن حل شد. الان میخوام اخر کد بوت لودرم جامپ کنم یه جای دیگه از حافظه ولی جواب نمیده؟

prpe26
یک شنبه 06 بهمن 1392, 21:32 عصر
دوست عزیز، تا کدت رو نزاری نمیتونی راهنمایی درستی دریافت کنی :چشمک: