自制操作系統分享第四天

今天要做什么?

(1)分享

我們上面已經說過INT 0x13這種指令(調用BIOS的INT指令),我們知道這是調用BIOS的0x13函數,但還不明白它到底是干什么用的:

AH = 0x02;# 讀盤

AH = 0x03;# 寫盤

AH = 0x04 ;# 校驗

AH = 0x0c;# 尋道

AL = 處理對象的扇區數;(只能同時處理連續的扇區)

CH = 柱面號;&0xff;

CL = 扇區號(0-5)|(柱面號&0x300)》》2;

DH = 磁頭號;

DL = 驅動器號;

ES:BX = 緩沖地址;(校驗及尋道時不使用)

返回值:

FLASC.CF ==0: 沒有錯誤,AH==0

FLAGS.CF ==1:有錯誤,錯誤號碼存入AH內(與重置(reset)功能一樣)

我們這次用的是AH =0x02,是讀盤的意思。

返回值那一欄里的FLACS.CF 意識是進位標志,也就是說,調用這個函數后,如果沒錯,進位標志就是0,如果有錯,進位標志就是1.

進位標志是一個只能儲存1位信息的寄存器,除此之外,CPU還有其他幾個只有1位的寄存器,像這種1位寄存器我們稱之為標志(在英文中就是flag)。

如果有軟盤,希望大家能把他拆開看看,拆開后可以看到,中間有黑色圓盤(磁性膠片),環狀區域有80個柱面。我們有正面(磁頭0)和反面(磁頭1號)兩個磁頭。軟盤分為18份,每一份稱為一個扇區,一個圓環有18個扇區。

綜上所述。一個軟盤有80個柱面,2個磁頭,18個扇區,且一個扇區有512字節。

一張軟盤的容量是:80*2*512 = 1474560 Byte =1440KB

含有IPL的啟動區,位于C0-H0-S1(柱面0,磁頭0,扇區1的縮寫),寫一個扇區是C0-H0-S2,待會要對這個扇區進行操作。

緩沖區地址:這是個內存地址,表明我們要把從軟盤上讀出的數據裝載到內存的哪個位置。

如果能用一個寄存器來表示內存地址的話,會很方便,但是一個BX只能表示0-oxffff的值,也就是0-65535,最大才65536/1024=64k,64k內存太小了。

為了解決這個問題,新增了一個EBX的寄存器(最大4G)內存,在中間的過渡時期是設計了一個起輔助作用的段寄存器(segment register)用ES:BX(MOV AL,[ES,BX])這種方式來表示地址(理解:先用ES寄存器指定一個大致的地址,然后再用BX來指定其中一個具體地址)

16位實模式下的地址線通常是20位,也就是(最大尋址)oxfffff。當計算地址超過這個范圍時,會發生回繞(因處理器不同)
段位寄存器的計算需要先把值賦值給通用寄存器。

0xFFFF*16+oxffff = 1114095 =>0xffff0+0xffff = 0x10ffef

常用用法(DS可以省略,所以DS必須先指定為0,否則地址就要加上這個數的16倍)

MOV CX,[1234],其實是MOV CX,[DS:1234];

MOV AL,[SI] 也就是 MOV AL,[DS:SI]的意思

在正常程序中,要讀下一個扇區,只需要給CL+1,給ES 加上0x20(扇區大小512/16進制)就行了。CL是扇區號,ES指定讀入地址。

C0-H0-S18的下一扇區,是磁盤反面的C0-H1-SQ,從0xa400讀入吧

指令JB:條件跳轉指令(jump if below)意思差不多是 如果小于的話,就跳轉

指令EQU:相當于C語言的#define命令,用來聲明常量,用來聲明常數。

“CYLS EQU 10”意思是“CYLS = 10”.EQU是equal的縮寫

輔導資源 第三天的筆記,建議手打!!!
?

; haribote-ipl

; TAB =4

CYLS ? ?EQU ? ? 10 ? ? ? ? ? ? ? ?; 聲明CYLS=10

? ? ? ? ORG ? ? 0x7c00 ? ? ? ? ? ?; 指明程序裝載地址

; 標準FAT12 格式軟盤專用的代碼 Stand FAT12 format flppy code

? ? ? ? JMP ? ? entry

? ? ? ? DB ? ? ?0x90

? ? ? ? DB ? ? ?"HARIBOTE" ? ? ? ?;啟動扇區名稱(8字節)

? ? ? ? DW ? ? ?512 ? ? ? ? ? ? ? ;每個扇區(sector)大小(必須512字節)

? ? ? ? DB ? ? ?1 ? ? ? ? ? ? ? ? ; 簇(cluster)大小 必須為一個扇區

? ? ? ? DW ? ? ?1 ? ? ? ? ? ? ? ? ; FAT起始位置(一般為第一個扇區)

? ? ? ? DB ? ? ?2 ? ? ? ? ? ? ? ? ; FAT個數(必須為2)

? ? ? ? DW ? ? ?224 ? ? ? ? ? ? ? ; 根目錄大小(一般為224項)

? ? ? ? DW ? ? ?2880 ? ? ? ? ? ? ?; 該磁盤大小(必須為2880扇區1440*1024/512)

? ? ? ? DB ? ? ?0xf0 ? ? ? ? ? ? ?; 跳過引導扇區,必須為0xf0

? ? ? ? DW ? ? ?9 ? ? ? ? ? ? ? ? ; 跳過引導扇區后的第一個數據分區,必須為9?

? ? ? ? DW ? ? ?18 ? ? ? ? ? ? ? ?; 該磁盤的扇區數,必須為18

? ? ? ? DW ? ? ?2 ? ? ? ? ? ? ? ? ; 磁頭每個扇區扇區數,必須為2?

? ? ? ? DD ? ? ?0 ? ? ? ? ? ? ? ? ;不適用分區,必須為0

? ? ? ? DD ? ? ?2880 ? ? ? ? ? ? ?;重寫一次磁盤大小

? ? ? ? DB ? ? ?0,0,0x29 ? ? ? ? ?;磁盤號,卷標,磁盤長度??必須為0x29

? ? ? ? DD ? ? ?0xffffffff ? ? ? ?;磁盤序列號,必須為0xffffffff

? ? ? ? DB ? ? ?"HARIBOTEOS " ? ? ;磁盤名稱,必須為11字,不足填空格

? ? ? ? DB ? ? ?"FAT12 ? " ? ? ? ?;磁盤格式名稱(必須為8字?,不足填空格)

? ? ? ? RESB ? ?18 ? ? ? ? ? ? ? ?;先空出18字節

; 程序主體

entry:

? ? MOV AX,0 ? ? ? ? ? ? ? ? ? ? ? ;初始化寄存器

? ? MOV SS,AX

? ? MOV SP,0x7c00

? ? MOV DS,AX

;讀磁盤 讀入10個柱面

? ? MOV AX, 0x0820

? ? MOV es,AX

? ? MOV CH,0 ? ? ? ? ; 柱面0

? ? MOV DH,0 ? ? ? ? ; 磁頭

? ? MOV CL,2 ? ? ? ? ; 扇區2

readloop:

? ? MOV SI,0 ? ? ? ? ; 緩沖區偏移 記錄失敗次數

retry:

? ? MOV AH,0x02 ? ? ?; 讀入磁盤

? ? MOV AL,1 ? ? ? ? ; 1個扇區

? ? MOV bx,0 ? ? ? ? ;0

? ? MOV dl,0X00 ? ? ? ; A驅動器

? ? INT 0x13 ? ? ? ? ; 調用磁盤BIOS

? ? JNC next ? ? ? ?;沒出錯時跳轉到next

? ? ADD SI,1 ? ? ? ?;SI加1

? ? CMP SI,5 ? ? ? ?;比較SI與5

? ? JAE error ? ? ? ?;SI>5時,跳轉到error

? ? MOV AH,0x00 ? ? ?

? ? MOV DL,0x00 ? ? ?;A驅動器

? ? INT 0x13 ? ? ? ?;重置驅動器

? ? JMP retry

next:

? ? MOV AX,ES ? ? ? ;把內存地址后移0x200

? ? ADD AX,0X0020 ? ;往CL里加1

? ? MOV ES,AX ? ? ? ;因為沒有ADD ES,0x020指令,所以這里稍微繞個彎

? ? ADD CL,1 ? ? ? ?;CL加1

? ? CMP CL,18 ? ? ? ;比較CL與18

? ? JBE readloop ? ?;如果CL<=18.則跳轉至readloo

? ? MOV CL,1

? ? ADD DH,1

? ? CMP DH,2

? ? JB readloop ? ? ; 如果DH<2,則跳轉到readloop

? ? MOV DH,0

? ? ADD CH,1

? ? CMP CH,cyls

? ? JB readloop ? ;如果CL <=18跳轉到readloop

; 讀取完畢,跳轉到haribote.sys執行!

? ? ? ? MOV ? ? [0x0ff0],CH ? ? ; IPLがどこまで読んだのかをメモ

? ? ? ? JMP ? ? 0xc200

error:

? ? ? ? MOV ? ? SI,msg

putloop:

? ? ? ? MOV ? ? AL,[SI]

? ? ? ? ADD ? ? SI,1 ? ? ? ? ? ?; 給SI加1

? ? ? ? CMP ? ? AL,0

? ? ? ? JE ? ? ?fin

? ? ? ? MOV ? ? AH,0x0e ? ? ? ? ; 顯示一個文字

? ? ? ? MOV ? ? BX,15 ? ? ? ? ? ; 指定字符顏色

? ? ? ? INT ? ? 0x10 ? ? ? ? ? ?; 調用顯卡BIOS

? ? ? ? JMP ? ? putloop

fin:

? ? ? ? HLT ? ? ? ? ? ? ? ? ? ? ; 讓CPU停止,等待指令

? ? ? ? JMP ? ? fin ? ? ? ? ? ? ; 無限循環

msg:

? ? ? ? DB ? ? ?0x0a, 0x0a ? ? ?; 換行兩次

? ? ? ? DB ? ? ?"load error"

? ? ? ? DB ? ? ?0x0a ? ? ? ? ? ?; 換行

? ? ? ? DB ? ? ?0

? ? ? ? RESB ? ?0x7dfe-$ ? ? ? ?; 填寫0x00直到0x001fe

? ? ? ? DB ? ? ?0x55, 0xaa



本人今天上班,所以分享較少,后面多多加油!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/70349.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/70349.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/70349.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

DeepSeek預測25考研分數線

25考研分數馬上要出了。 目前&#xff0c;多所大學已經陸續給出了分數查分時間&#xff0c;綜合往年情況來看&#xff0c;每年的查分時間一般集中在2月底。 等待出成績的日子&#xff0c;學子們的心情是萬分焦急&#xff0c;小編用最近爆火的“活人感”十足的DeepSeek幫大家預…

Android 動態加入Activity 時 manifest 注冊報錯解決。使用manifestPlaceholders 占位

需求如下&#xff1a; 項目 測試demo 有多個渠道&#xff0c;部分渠道包含支付功能&#xff0c;在主測試代碼外&#xff0c;需要一個單獨 Activity 調用測試代碼。 MainActivityPayActivity渠道A包含不包含渠道B包含包含 因為支付功能需要引入對應的 moudule&#xff0c;因此…

FRRouting配置與OSPF介紹,配置,命令,bfd算法:

文章目錄 1、frrouting的配置&#xff1a;2、ospf2.1、檢測和維護鄰居關系2.2、ospfDR和BDR2.3、odpf鄰居表2.4、ospf常用命令2.5、bfd配置 1、frrouting的配置&#xff1a; sudo service zebra start sudo service ospfd start telnet localhost 2604 en configure termina…

Perplexity 開源DeepSeek-R1 模型新版本 R1-1776

引言 在人工智能領域&#xff0c;模型的更新迭代如同科技界的時尚潮流&#xff0c;不斷推陳出新。今天&#xff0c;我們要介紹的是Perplexity AI開源的新版推理模型——DeepSeek-R1 1776。這個版本不僅繼承了前代的強大性能&#xff0c;還在公正性和準確性上進行了顯著提升。那…

關系中出現這10個信號,離分手就不遠了(愛情友情都適用)

親密關系的隱形裂痕 在一個陽光明媚卻略顯蕭瑟的午后&#xff0c;咖啡杯里的咖啡已經涼透。小李盯著手機屏幕&#xff0c;那些曾經熱烈的對話記錄現在看起來如此陌生&#xff0c;仿佛隔著一層薄薄的霧。她終于意識到&#xff0c;這段關系已經悄然走向盡頭。 親密關系是一場精心…

馬斯克Grok3使用入口和訂閱教程(白嫖150刀API額度)

文章目錄 馬斯克Grok3使用入口和訂閱教程(白嫖150刀API額度)前言介紹如何訂閱X上Premium服務國內訂閱X的Premium教程 白嫖教程小結 馬斯克Grok3使用入口和訂閱教程(白嫖150刀API額度) 前言介紹 重點&#xff1a;Grok 3僅對X上的Premium用戶開放。你需要訂閱X的Premium服務才能…

相機開發調中廣角和焦距有什么不一樣

在相機中,調整廣角和調整焦距是兩個不同的概念,它們的作用和實現方式也不同。以下是兩者的詳細對比和解釋: 1. 調整廣角 定義 廣角是指相機的視野范圍(Field of View, FOV)。調整廣角實際上是調整相機的視野范圍。更廣的視野意味著可以捕捉到更多的場景內容(更寬的畫面)…

讓大模型幫我設計crnn網絡及可運行demo,gpt4o豆包qwendeepseek-r1

prompt 使用 crnn 提取圖像特征&#xff0c;給出圖像好壞的二分類結果&#xff0c;寫清楚代碼備注&#xff0c;注釋清楚向量維度大小&#xff0c;并給出一個可運行的 demo1、GPT-4o 以下是一個使用 CRNN&#xff08;Convolutional Recurrent Neural Network&#xff09;提取圖…

DeepBI助力跨境電商打破流量壟斷:AI驅動的亞馬遜廣告投放新打法

#亞馬遜廣告優化# 親愛的亞馬遜跨境電商賣家們&#xff0c;是否曾因亞馬遜的廣告打法不清晰&#xff0c;或是糾結于亞馬遜廣告費用過高&#xff0c;或是為亞馬遜電商廣告怎么投放合適的問題而苦惱&#xff1f;在競爭激烈的亞馬遜市場中&#xff0c;廣告投放效果平平&#xff0…

前端基礎入門:HTML、CSS 和 JavaScript

在現代網頁開發中,前端技術扮演著至關重要的角色。無論是個人網站、企業官網,還是復雜的 Web 應用程序,前端開發的基礎技術 HTML、CSS 和 JavaScript 都是每個開發者必須掌握的核心技能。本文將詳細介紹這三者的基本概念及其應用 一、HTML——網頁的骨架 HTML(HyperText …

單元測試junit5

一、idea 安裝自動化生成插件jcode5 安裝可能不成功&#xff0c;嘗試多次安裝&#xff1b; 安裝成功后&#xff0c;重啟idea&#xff0c;再次確認安裝是否成功&#xff1b; 二、在需要生成單元測試代碼的模塊的pom中引入依賴 ......<parent><groupId>org.springf…

windows系統本地部署DeepSeek-R1全流程指南:Ollama+Docker+OpenWebUI

本文將手把手教您使用OllamaDockerOpenWebUI三件套在本地部署DeepSeek-R1大語言模型&#xff0c;實現私有化AI服務搭建。 一、環境準備 1.1 硬件要求 CPU&#xff1a;推薦Intel i7及以上&#xff08;需支持AVX2指令集&#xff09; 內存&#xff1a;最低16GB&#xff0c;推薦…

Windows Server 任務計劃

背景&#xff1a;QMT服務只能在windows服務器上面運行 直接在控制面板里面搜索"任務計劃"點進去 需要注意的是&#xff1a; 1.創建任務計劃選擇”不管用戶是否登錄都運行“&#xff0c;是否需要最高權限執行看你的需求 2.操作程序或腳本&#xff0c;選擇bat腳本就…

makefile+LSF

LSF LSF&#xff08;Load Sharing Facility&#xff09;是一種常用的集群作業調度系統&#xff0c;bsub 命令用于提交作業到 LSF 集群&#xff0c;而若要關閉&#xff08;終止&#xff09;一個正在運行的作業&#xff0c;需要使用 bkill 命令&#xff0c;下面為你詳細介紹相關…

spring boot知識點3

1.spring boot能否使用xml配置 可以&#xff0c;但是很繁瑣&#xff0c;現在都建議走JavaConfig 2.spring boot的核心配置文件 application.properties application.yml 3.bootstrap.properties和application.properties的區別 b&#xff1a;用于遠程配置 a&#xff1a;…

人工智能學習環境配置

文章目錄 Python、CUDA、cuDNN、PyTorch 和 Anaconda 的介紹PythonCUDAcuDNNPyTorchAnaconda聯系 安裝n卡驅動更新安裝 AnacondaAnaconda配置鏡像源CUDA安裝Cudnn安裝Anaconda初始化創建虛擬環境安裝 PyTorch驗證安裝 可能的錯誤SSL錯誤 Python、CUDA、cuDNN、PyTorch 和 Anaco…

【C語言】C語言 食堂自動化管理系統(源碼+數據文件)【獨一無二】

&#x1f449;博__主&#x1f448;&#xff1a;米碼收割機 &#x1f449;技__能&#x1f448;&#xff1a;C/Python語言 &#x1f449;專__注&#x1f448;&#xff1a;專注主流機器人、人工智能等相關領域的開發、測試技術。 【C語言】C語言 食堂自動化管理系統&#xff08;源…

DeepSeek是什么?兩種模型的對比?

最近DeepSeek的風也是很大&#xff0c;它也是很火&#xff0c;那么DeepSeek是什么呢&#xff1f; 什么是DeepSeek&#xff1f; DeepSeek是一家專注通用人工智能&#xff08;AGI&#xff09;的中國科技公司&#xff0c;主攻大模型研發與應用。DeepSeek-R1是其開源的推理模型&a…

【架構】分層架構 (Layered Architecture)

一、分層模型基礎理論 ![在這里插入圖片描述](https://i-blog.csdnimg.cn/direct/0365cf0bfa754229bdedca6b472bffc7.png 1. 核心定義 分層架構(Layered Architecture)模型是一種常見的軟件設計架構,它將軟件系統按照功能劃分為不同的層次,每個層次都有特定的職責和功能…

基于MATLAB的均勻面陣MUSIC算法DOA估計仿真

基于MATLAB的均勻面陣MUSIC算法DOA估計仿真 文章目錄 前言一、二維MUSIC算法原理二、二維MUSIC算法MATLAB仿真三、MATLAB源代碼總結 前言 \;\;\;\;\; 在波達角估計算法中&#xff0c;MUSIC 算法與ESPRIT算法屬于特征結構子空間算法&#xff0c;是波達角估計算法中的基石。在前面…