操作系統製作(1)nasm編寫boot.s

環境:
virtual-box:版本 6.0.10 r132072 (Qt5.6.2)運行的的ubuntu18.04系統。
nasm彙編器:NASM version 2.13.02

講述bochs運行一個簡單的引導程序並顯示“Loading system”例子,運行效果如下:
在這裏插入圖片描述
注意:運行bochs後,需要輸入c,才能進入運行狀態。

1)boot.s代碼如下:(nasm語法格式)
沒有自己定義中斷描述表的話,使用BIOS提供的中斷。

BOOTSEG equ 0x07c0              ; BIOS 加載 bootsect 代碼的原始段地址;

start:
        jmp BOOTSEG:go          ; 段間跳轉。 INITSEG 指出跳轉段地址, 標號 go 是偏移地址。
go:
        mov ax,cs               ; 段寄存器 cs 值-->ax,用於初始化數據段寄存器 ds 和 es。
        mov ds,ax
        mov es,ax
        mov [msg1+17],ah        ; 0x07-->替換字符串中 1 個點符號,喇叭將會鳴一聲。
        mov cx,29               ; 共顯示 29 個字符,包括回車換行符。
        mov dx,0x1004           ; 字符串將顯示在屏幕第 17 行、第 5 列處。
        mov bx,0x000c           ; 字符顯示屬性(紅色)。
        mov bp,msg1             ; 指向要顯示的字符串(中斷調用要求)。
        mov ax,0x1301           ; 寫字符串並移動光標到串結尾處。
        int 0x10                ; BIOS 中斷調用 0x10,功能 0x13,子功能 01。
loop1:  jmp loop1               ; 死循環。
msg1:
        db "Loading Shuaihao system ..."        ; 調用 BIOS 中斷顯示的信息。共 29 個 ASCII 碼字符。
        db 13,10

        times 510-($-$$) db 0   ; 表示以後語句從地址 510(0x1FE)開始存放。
        dw 0xAA55               ; 有效引導扇區標誌, 供 BIOS 加載引導扇區使用。

2)Makefile文件如下:

all:
        nasm -f bin boot.s -o boot
        dd if=boot of=boot.img


另外提供一下另外一種彙編器as86編寫boot.s文件
boot.s代碼如下:(as86語法格式)

!
.globl begtext, begdata, begbss, endtext, enddata, endbss ! 全局標識符,供 ld86 鏈接使用;
.text		! 正文段;
begtext:
.data		! 數據段;
begdata:
.bss		! 未初始化數據段;
begbss:
.text		! 正文段;
BOOTSEG = 0x07c0 		! BIOS 加載 bootsect 代碼的原始段地址;

entry start 			! 告知鏈接程序,程序從 start 標號處開始執行。
start:
jmpi go,BOOTSEG 		! 段間跳轉。 INITSEG 指出跳轉段地址, 標號 go 是偏移地址。
go: 
	mov ax,cs 			! 段寄存器 cs 值-->ax,用於初始化數據段寄存器 ds 和 es。
	mov ds,ax
	mov es,ax
	mov [msg1+17],ah 		! 0x07-->替換字符串中 1 個點符號,喇叭將會鳴一聲。
	mov cx,#29 				! 共顯示 29 個字符,包括回車換行符。
	mov dx,#0x1004 			! 字符串將顯示在屏幕第 17 行、第 5 列處。
	mov bx,#0x000c 			! 字符顯示屬性(紅色)。
	mov bp,#msg1 			! 指向要顯示的字符串(中斷調用要求)。
	mov ax,#0x1301 			! 寫字符串並移動光標到串結尾處。
	int 0x10 				! BIOS 中斷調用 0x10,功能 0x13,子功能 01。
loop1: jmp loop1 		! 死循環。
msg1: 
	.ascii "Loading Shuaihao system ..."! 調用 BIOS 中斷顯示的信息。共 29 個 ASCII 碼字符。
.byte 13,10
.org 510 				! 表示以後語句從地址 510(0x1FE)開始存放。
.word 0xAA55 			! 有效引導扇區標誌, 供 BIOS 加載引導扇區使用。
.text
endtext:
.data
enddata:
.bss
endbss:
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章