從頭開始操作系統系列】環境搭建以及第一個Hello World

      網友投稿 903 2022-05-28

      寫在最前

      筆者在動手寫此操作系統時是一名大學本科大二的學生,可能文章中會有好多地方我沒有解釋清楚,可能也會有許多地方出現錯誤,我懇請各位讀者能提出質疑和糾正我的錯誤,謝謝!

      參考書籍:

      《30天自制操作系統》川合秀實

      《ORANGE’S:一個操作系統的實現》

      開發環境

      筆者采用以下開發環境

      Apple Macbook Air

      Ubuntu 12.04 LTS(32 bit)

      讀者準備

      畢竟是動手寫一個操作系統,對讀者的要求也會相應要求高一些,對計算機編程0基礎的讀者還是不建議直接看這個系列的文章。希望讀者能有 匯編語言、C 語言的基礎,對操作系統最好有了解(推薦書籍《操作系統概念》),另外由于開發是在 Ubuntu 的環境中進行的,讀者最好對 Linux 的命令、操作等比較熟悉。

      環境搭建

      安裝Bochs 等

      Bochs是一個x86硬件平臺的開源模擬器。它可以模擬各種硬件的配置。Bochs模擬的是整個PC平臺,包括I/O設備、內存和BIOS。更為有趣的是,甚至可以不使用PC硬件來運行Bochs。事實上,它可以在任何編譯運行Bochs的平臺上模擬x86硬件。通過改變配置,可以指定使用的CPU(386、486或者586),以及內存大小等。一句話,Bochs是電腦里的“PC”。根據需要,Bochs還可以模擬多臺PC,此外,它甚至還有自己的電源按鈕。

      我們所寫的操作系統就是模擬在 Bochs 來運行和調試的。

      我們使用以下的命令來安裝 bochs 等一些工具

      sudo apt-get install vgabios bochs bochs-x bximage bochs-sdl

      第一個 Hello World

      創建軟盤鏡像

      使用bximage 命令

      按照以下來進行配置

      ======================================================================== bximage Disk Image Creation Tool for Bochs $Id: bximage.c,v 1.34 2009/04/14 09:45:22 sshwarts Exp $ ======================================================================== Do you want to create a floppy disk image or a hard disk image? Please type hd or fd. [hd] fd Choose the size of floppy disk image to create, in megabytes. Please type 0.16, 0.18, 0.32, 0.36, 0.72, 1.2, 1.44, 1.68, 1.72, or 2.88. [1.44] 1.44 I will create a floppy image with cyl=80 heads=2 sectors per track=18 total sectors=2880 total bytes=1474560 What should I name the image? [a.img] helloworld.img Writing: [] Done. I wrote 1474560 bytes to helloworld.img. The following line should appear in your bochsrc: floppya: image="helloworld.img", status=inserted

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      20

      21

      22

      23

      24

      25

      26

      27

      28

      29

      30

      最終我們得到了一個名叫『helloworld.img』的文件,它就是我們創建的軟盤鏡像

      操作系統源碼

      hello.asm

      org 07c00h mov ax, cs mov ds, ax mov es, ax call DispStr jmp $ DispStr: mov ax, Str mov bp, ax mov cx, 13 mov ax, 01301h mov bx, 000ch mov dl, 0 int 10h ret Str: db "Hello, world!" times 510-($-$$) db 0 dw 0xaa55

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      下面我們來逐行分析這段匯編代碼

      org 07c00h 指定程序的起始地址,告訴編譯器程序從這里開始

      org是Origin的縮寫:起始地址源。在匯編語言源程序的開始通常都用一條org偽指令來實現規定程序的起始地址。

      mov ax, cs 將 cs(代碼段寄存器)中的值賦值給 ax 寄存器

      mov ds, ax 將 ax 中的值賦值給 ds( 一個段寄存器)

      mov es, ax 將 ax 中的值賦值給 es()

      call DispStr 跳轉執行到 DispStr

      jump $ 死循環

      mov ax, Str 將 Str 的首地址放入 ax

      mov bp, ax 將 ax 的值賦給 bp(棧底指針)

      mov cx, 13 將13放入 ax 寄存器

      mov ax, 01301h ax 寄存器高位AH=13,低位 AL=01h

      mov bx, 000ch 將000ch 放入 bx 寄存器

      mov dl, 0 將光標設置為0行0列

      int 10h 調用10h 中斷

      int 10h 中斷功能介紹

      times 510-($-$$) db 0 將剩余的位置都填充為0

      dw 0xaa55 結束標志

      制作操作系統鏡像

      編譯源碼

      nasm hello.asm -o hello.bin

      寫入軟盤鏡像扇區

      dd if=hello.bin of=helloworld.img bs=512 count=1 conv=notrunc

      運行 HelloWorld

      【從頭開始寫操作系統系列】環境搭建以及第一個Hello World

      編寫 bochs 配置文件 - bochsrc

      ############################################################### # Configuration file for Bochs ############################################################### # how much memory the emulated machine will have megs: 32 # filename of ROM images romimage: file=/usr/share/bochs/BIOS-bochs-latest vgaromimage: file=/usr/share/vgabios/vgabios.bin # what disk images will be used floppya: 1_44=helloworld.img, status=inserted # choose the boot disk. boot: floppy # where do we send log messages? # log: bochsout.txt # disable the mouse mouse: enabled=0 # enable key mapping, using US layout as default. keyboard_mapping: enabled=1, map=/usr/share/bochs/keymaps/x11-pc-us.map display_library: sdl

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      20

      21

      22

      23

      24

      25

      26

      27

      28

      29

      運行bochs

      bochs -f bochsrc

      運行結果如下圖:

      單片機 匯編語言

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:Java基礎 第四節 第八課
      下一篇:Kubernetes 集群監控 ETCD 組件
      相關文章
      国产精品久久久久久亚洲小说| 蜜芽亚洲av无码精品色午夜| 97久久精品亚洲中文字幕无码| 亚洲av午夜福利精品一区人妖| AV在线亚洲男人的天堂| 国产综合成人亚洲区| 亚洲欧美成人一区二区三区| 一本色道久久88—综合亚洲精品 | 亚洲成a人片在线观看日本麻豆 | 亚洲AV电影天堂男人的天堂| 亚洲国产成人无码AV在线| 中文有码亚洲制服av片| 亚洲一本到无码av中文字幕| 亚洲依依成人亚洲社区| 一区二区亚洲精品精华液| 亚洲人成人伊人成综合网无码 | 亚洲精品自在在线观看| 久久久久久久综合日本亚洲| 亚洲av无码成人黄网站在线观看| 亚洲va久久久噜噜噜久久狠狠| 久久国产亚洲电影天堂| 亚洲精品天天影视综合网| 亚洲日韩国产精品无码av| ASS亚洲熟妇毛茸茸PICS| 亚洲熟女综合色一区二区三区| 亚洲国产欧美国产综合一区 | 亚洲电影国产一区| 亚洲综合国产精品| 亚洲午夜电影一区二区三区| 亚洲最大天堂无码精品区| 国产亚洲高清在线精品不卡| 亚洲成a人片在线观看老师| 亚洲综合图色40p| 亚洲中文字幕无码久久精品1| 亚洲一区日韩高清中文字幕亚洲 | 日韩va亚洲va欧洲va国产| 337p欧洲亚洲大胆艺术| 亚洲午夜精品一区二区公牛电影院| 在线亚洲高清揄拍自拍一品区| 亚洲A∨精品一区二区三区下载 | 色噜噜亚洲男人的天堂|