- 論壇徽章:
- 0
|
接自 linux下bochs創(chuàng)建最簡單的OS 一篇
作者:帥得不敢出門 C++愛好者灌水天堂群 3503799 轉(zhuǎn)載請保留此信息
org 07c00h
LABEL_START:
mov ax,cs
mov ds,ax
mov es,ax
mov ax,0b800h
mov gs,ax
mov ah,0ch
mov al,'H'
mov [gs:0],ax
jmp $
times 510-($-$$) db 0
dw 0xaa55
這個代碼是直接操作視頻緩沖區(qū)顯示字符的,只能顯示單個H
我們要讓他顯示Hello World OS
org 07c00h
LABEL_START:
mov ax,cs
mov ds,ax
mov es,ax
mov ax,0b800h
mov gs,ax
mov si,HelloWorld
xor di,di
PutStr:
mov ah,0ch ;黑底紅字 注:顏色代碼見下對照表
lodsb ;Loads [SI] into AL and increases SI by one
or al,al
jz ToEnd
mov [gs:di],ax
add di,2
jmp PutStr
ToEnd:
jmp $
HelloWorld db 'Hello World OS',0
times 510-($-$$) db 0
dw 0xaa55
這樣便可滿足需求了。
顏色代碼對照表
1 2 3 4 5 6 7 8
BL R G B I R G B
閃爍 字符底色 加亮 字符顏色
再進(jìn)一步,我們現(xiàn)在只是在右上角顯示,如果要在當(dāng)前光標(biāo)位置顯示呢,我們現(xiàn)在修改第一個代碼來實(shí)現(xiàn)
第二個代碼(注釋請看linux下bochs創(chuàng)建最簡單的OS一篇)是:
org 07c00h
mov ax, cs
mov ds, ax
mov es, ax
call DispStr
jmp $ ;
DispStr:
mov ax, BootMessage
mov bp, ax
mov cx, 15
mov ax, 01301h
mov bx, 000ch
int 10h
ret
BootMessage: db "Hello,World OS!"
times 510-($-$$) db 0
dw 0xaa55
我們只要調(diào)用int 10h中斷,獲取當(dāng)前的光標(biāo)位置就行了。
org 07c00h
mov ax, cs
mov ds, ax
mov es, ax
mov ah,03h
xor bh,bh
int 10h
call DispStr
jmp $
DispStr:
mov ax, BootMessage
mov bp, ax
mov cx, 15
mov ax, 01301h
mov bx, 000ch
int 10h
ret
BootMessage: db "Hello,World OS!"
times 510-($-$$) db 0
dw 0xaa55
匯編,寫入img,bochs加載執(zhí)行,OK
當(dāng)然其他的功能只要想的到,都可以自行添加它,希望大家有一個愉快的學(xué)習(xí)過程。
本文來自ChinaUnix博客,如果查看原文請點(diǎn):http://blog.chinaunix.net/u2/64540/showart_1934577.html |
|