《30天自製作業系統》 第三天

2021-07-23 05:04:58 字數 1735 閱讀 2363

程式:本次的程式,組合語言:

; haribote-os

; tab=4

org 0xc200 ; 這個程式將要被裝載到記憶體的什麼地方呢?

mov al,0x13 ; vga顯示卡,320x200x8位彩色

mov ah,0x00

int 0x10

fin:

hlt ; 讓cpu停止,等待指令

jmp fin ; 無限迴圈

說明:設定ah=0x00後,呼叫顯示卡bios的函式,這樣就可以切換顯示模式了。我們還可以在支援

網頁(at)bios裡看看。

設定顯示卡模式(video mode)

ah=0x00;

al=模式:(省略了一些不重要的畫面模式)

0x03:16色字元模式,80 × 25

0x12:vga 圖形模式,640 × 480 × 4位彩色模式,獨特的4面儲存模式

0x13:vga 圖形模式,320 × 200 × 8位彩色模式,調色盤模式

0x6a:擴充套件vga 圖形模式,800 × 600 × 4位彩色模式,獨特的4面儲存模式

(有的顯示卡不支援這個模式)

返回值:無

參照以上說明,我們暫且選擇0x13畫面模式,因為8位彩色模式可以使用256種顏色,這一點

看來不錯。

如果畫面模式切換正常,畫面應該會變為一片漆黑。也就是說,因為可以看到畫面的變化,

所以能判斷程式是否執行正常。由於變成了圖形模式,因此游標會消失。

指令:int軟體中斷指令。這裡面可以先把它看作乙個函式呼叫。這次呼叫的是0x10(即16)號函式,它的功能是控制顯示卡。

注:cpu中的16位暫存器

ax——accumulator,累加暫存器

cx——counter,計數暫存器

dx——data,資料暫存器

bx——base,基址暫存器

sp——stack pointer,棧指標暫存器

bp——base pointer,基址指標暫存器

si——source index,源變址暫存器

di——destination index,目的變址暫存器

cpu中有8個8位暫存器。

al——累加暫存器低位(accumulator low)

cl——計數暫存器低位(counter low)

dl——資料暫存器低位(data low)

bl——基址暫存器低位(base low)

ah——累加暫存器高位(accumulator high)

ch——計數暫存器高位(counter high)

dh——資料暫存器高位(data high)

bh——基址暫存器高位(base high)

cpu中段暫存器,16位暫存器

es——附加段暫存器(extra segment)

cs——**段暫存器(code segment)

ss——棧段暫存器(stack segment)

ds——資料段暫存器(data segment)

fs——沒有名稱(segment part 2)

gs——沒有名稱(segment part 3)

cpu中32位暫存器,16位暫存器的名字前面加上乙個e就是32位暫存器的名字了

eax, ecx, edx, ebx, esp, ebp, esi, edi

30天自製作業系統

第一天的內容很少,是一些簡單的基礎知識,在這裡我就沒有必要寫出來了,只說出大概的輪廓了,然後我會對其中的幾點進行詳細的解釋。文章的第一天的輪廓大概是這樣的,作者首先用二進位制編輯器做了乙個顯示二進位制的程式,然後用彙編完全db的形式,後又進行改善,最後以比較標準的組合語言編寫,但程式主體部分還沒有翻...

30天自製作業系統 導讀

說明 這是8月15日即將上市的一本新書,本文的摘選也可以命名為 30天自製作業系統 上市之前必讀。本書幽默,有趣,可以說是技術書裡的幽默書,讓您讀起來絕對不會感到乏味。在本書上市之前,您一定先要讀下此篇文章,可以避免在學習中走更多的閱讀彎路,因為更多的讀者會問,七百多頁,30天?是的,看完此篇內容,...

30天自製作業系統 startHaribote

haribote os tab 4 org 0x8400 mov si,msg call putloop mov al,0x13 mov ah,0x00 int 0x10 fin hltjmp fin msg db 0x0a db test db 0 putloop mov al,si add si...