操作系統一個簡單的匯編入門程序如下,代碼中注釋得已很詳細
;程序被加載到的內存地址,即寄存器IP的值
org 07c00h
;以下3句是設置ds、es段寄存器的值
mov ax,cs
mov ds,ax
mov es,ax
;將字符串的首地址賦給ax
mov ax,BootMsg
;將字符串第19個字符改寫
mov byte [BootMsg+18],0x07
;bp是傳給中斷的參數es:bp指向的是字符串
mov bp,ax
;字符串中字符的個數
mov cx,21
;表示的是寫字符串,並移動光標到結尾處
mov ax,01301h
;字符顯示屬性紅色,0頁
mov bx,000ch
mov dl,0
int 10h
jmp $
BootMsg: db "Loading system ...."
db 13,10
;$表示程序的當前地址,$$表示程序所在節的地址,在這裡只有一個節
times 510-($-$$) db 0
;軟盤第一扇區結束標志
dw 0xaa55
程序在Virtual Box下運行的截圖如下:
在Virtual PC下運行的截圖如下:
特別注解:
1:org 07c00h,用Bochs調試運行後會發現,ip=0x7c00h,cs=0x0000,所以從這裡可以得出的是四個段寄存器均是0
2:mov byte [BootMsg+18],0x07,這是為什麼會發出滴答聲的原因,查看ASCII碼可以發現的是這裡的0x07對應的實際上就是一個聲響的ASCII碼。
3:中斷int 10h的0x13功能,其中ah用來表示功能號,其參數如下:
功能號:13H
功能:在Teletype模式下顯示字符串
入口參數:AH=13H
BH=頁碼
BL=屬性(若AL=00H或01H)
CX=顯示字符串長度
(DH、DL)=坐標(行、列)
ES:BP=顯示字符串的地址 AL= 顯示輸出方式
0—字符串中只含顯示字符,其顯示屬性在BL中。顯示後,光標位置不變
1—字符串中只含顯示字符,其顯示屬性在BL中。顯示後,光標位置改變
2—字符串中含顯示字符和顯示屬性。顯示後,光標位置不變
3—字符串中含顯示字符和顯示屬性。顯示後,光標位置改變
工具軟件(nasm,bochs,程序源碼)
免費下載地址在 http://linux.linuxidc.com/
用戶名與密碼都是www.linuxidc.com
具體下載目錄在 /2013年資料/6月/9日/一個簡單的匯編入門程序