乙個簡單的作業系統

2021-06-06 03:47:59 字數 1630 閱讀 3239

電腦上電後,bios在自檢後會根據使用者指定的裝置啟動作業系統。假設我們指定軟盤為啟動盤,bios會把軟盤的第乙個扇區(512位元組)讀取到記憶體的0x7c00處,如果這個扇區的最後兩個位元組為0xaa55, bios會跳轉到0x7c00處開始執行。我們可以利用這樣乙個過程做乙個簡單的作業系統。

我們的開發環境是linux。需要的工具有:

下面就是我們的**。我們的作業系統很簡單,在螢幕的左上角列印hello後就一直死迴圈。

.code16

.text

mov %cs, %ax

mov %ax, %ds #資料段和**段是乙個段

mov $0xb800, %ax

mov %ax, %gs #從0xb8000處開始的記憶體為視訊記憶體,經典的80x25模式,每個字元兩個位元組,第乙個為顯示的字元,第二個為顯示屬性

xor %bx, %bx #bx指向視訊記憶體首位址

mov $str, %si #si指向字串首位址

mov $5, %cx #字元個數

again:

movb (%si), %al

movb %al, %gs:(%bx)

inc %si

add $2, %bx #跳過屬性位元組

loop again

jmp . #死迴圈

str: .ascii "hello"

.org 510 #結尾的兩個位元組為引導扇區的magic number

.word 0xaa55

將上面的**儲存為boot.s。然後在終端輸入以下命令

gcc -c -oboot.o boot.s #編譯源**

ld -ttext=0x7c00 --oformat binary -oboot.bin boot.o #生成二進位制核心,入口為0x7c00

dd if=/dev/zero of=floppy.img bs=1k count=1440 #軟盤映象

dd if=boot.bin of=floppy.img conv=notrunc #將核心寫入軟盤的第乙個扇區 conv選項指定如果boot.bin比floppy.img小,不會截斷floppy.img

這樣我們就得到了乙個帶有我們作業系統的軟盤映象。

下面我們要寫bochs的配置檔案

megs: 32  #虛擬機器記憶體

romimage: file=$bxshare/bios-bochs-latest

vgaromimage: file=$bxshare/vgabios-lgpl-latest

vga: extension=vbe

floppya: image=floppy.img, status=inserted #軟盤映象

boot: a #從floppya啟動

mouse: enabled=0

cpu: ips=15000000

vga_update_interval: 150000

最後啟動虛擬機器,我們的小小作業系統就啟動啦。這是我電腦上的截圖

乙個簡單的51作業系統

os cfg.h include reg51.h define time per sec 200 定義任務時鐘頻率,200hz define clock 22118400 定義時鐘晶振,單位hz define max task 4 定義任務數量 函式變數宣告,在需要用以下函式或變數的檔案中包含此檔案...

乙個小作業系統

1 1 chapter1 a boot.asm 乙個 作業系統 可以只有20行 把下面這段 用nasm編譯一下 nasm boot.asm o boot.bin org 07c00h 告訴編譯器程式載入到7c00處 mov ax,cs mov ds,ax mov es,ax call dispstr...

作業系統開發之 乙個簡單的Bootsect

先嚇唬一下讀者朋友呵呵,直接發 這是uos作業系統的bootsect 有興趣的朋友能夠增加我們,在最後 檔名稱 bootsect.asm 檔案建立者 imcjy 檔案編碼 utf 8 狀態 o build 3 檔案建立日期 2015年7月24日 檔案最後改動日期 2015年8月12日 備註 本檔案為...