- 30天自制操作系統(tǒng)
- (日)川合秀實(shí)
- 477字
- 2020-03-11 14:01:43
2 試錯(cuò)
軟盤這東西很不可靠,有時(shí)會(huì)發(fā)生不能讀數(shù)據(jù)的狀況,這時(shí)候重新再讀一次就行了。所以即使出那么一、兩次錯(cuò),也不要輕易放棄,應(yīng)該讓它再試幾次。當(dāng)然如果讓它一直重試下去的話,要是磁盤真的壞了,程序就會(huì)陷入死循環(huán),所以我們決定重試5次,再不行的話就真正放棄。改良后的程序就是projects/03_day下的harib00b。
本次添加的部分
;讀磁盤 MOV AX,0x0820 MOV ES, AX MOV CH,0 ; 柱面0 MOV DH,0 ; 磁頭0 MOV CL,2 ; 扇區(qū)2 MOV SI,0 ; 記錄失敗次數(shù)的寄存器 retry: MOV AH,0x02 ; AH=0x02 : 讀入磁盤 MOV AL,1 ; 1個(gè)扇區(qū) MOV BX,0 MOV DL,0x00 ; A驅(qū)動(dòng)器 INT 0x13 ; 調(diào)用磁盤BIOS JNC fin ; 沒出錯(cuò)的話跳轉(zhuǎn)到fin ADD SI,1 ; 往SI加1 CMP SI,5 ; 比較SI與5 JAE error ; SI >= 5時(shí),跳轉(zhuǎn)到error MOV AH,0x00 MOV DL,0x00 ; A驅(qū)動(dòng)器 INT 0x13 ; 重置驅(qū)動(dòng)器 JMP retry
還是從新出現(xiàn)的指令開始講吧。JNC是另一個(gè)條件跳轉(zhuǎn)指令,是“Jump if not carry”的縮寫。也就是說進(jìn)位標(biāo)志是0的話就跳轉(zhuǎn)。JAE也是條件跳轉(zhuǎn),是“Jump if above or equal”的縮寫,意思是大于或等于時(shí)跳轉(zhuǎn)。
現(xiàn)在說說出錯(cuò)時(shí)的處理。重新讀盤之前,我們做了以下的處理,AH=0x00, DL=0x00, INT 0x13。通過前面介紹的(AT)BIOS的網(wǎng)頁我們知道,這是“系統(tǒng)復(fù)位”。它的功能是復(fù)位軟盤狀態(tài),再讀一次。剩下的內(nèi)容都很簡(jiǎn)單,只要讀一讀程序就能懂。
嗯,今天進(jìn)展不錯(cuò),繼續(xù)努力吧。
推薦閱讀
- 混沌工程:復(fù)雜系統(tǒng)韌性實(shí)現(xiàn)之道
- Java EE 8 Design Patterns and Best Practices
- Linux就該這么學(xué)
- Learning Magento 2 Administration
- 一學(xué)就會(huì):Windows Vista應(yīng)用完全自學(xué)手冊(cè)
- Fedora 12 Linux應(yīng)用基礎(chǔ)
- AWS SysOps Cookbook
- Linux系統(tǒng)最佳實(shí)踐工具:命令行技術(shù)
- 大學(xué)計(jì)算機(jī)應(yīng)用基礎(chǔ)實(shí)踐教程(Windows 7+MS Office 2010)
- Docker容器技術(shù)與應(yīng)用
- 大規(guī)模Linux集群架構(gòu)最佳實(shí)踐:如何管理上千臺(tái)服務(wù)器
- Microsoft Azure Administrator:Exam Guide AZ-103
- Apache ShardingSphere權(quán)威指南
- Selenium Framework Design in Data-Driven Testing
- Linux內(nèi)核設(shè)計(jì)的藝術(shù):圖解Linux操作系統(tǒng)架構(gòu)設(shè)計(jì)與實(shí)現(xiàn)原理(第2版)