1. 程式人生 > >《30天自制作業系統》學習筆記——第七天

《30天自制作業系統》學習筆記——第七天

         明天就要回學校了,收拾完東西,再在家裡寫下最後一篇筆記。

         今天終於迎來滑鼠的控制了!

                         

        作者一開始先拿鍵盤練手,給出了一個鍵盤的中斷處理程式。其中作者重點指出一句:

io_out8(PIC0_OCW2,0x61);

        這句的含義是告訴PIC“IRQ-01已經處理完畢”,這樣處理之後可以接收下一次中斷,相當於開中斷。

        我們在《組合語言》中學習到關於中斷處理程式時,一般是把所有步驟執行完了,再iret,cpu執行其原來的工作。本書一開始的時候也是這樣,但是這樣有一個缺陷,像是鍵盤的處理程式需要往視訊記憶體裡進行多次的讀寫操作,非常消耗時間,於是這裡進行了中斷處理程式的縮減。在中斷處理程式中,只是把按鍵的編碼儲存下來,並置標誌flag,然後顯示的工作交給HariMain來處理。在主函式中,使用for(;;)對緩衝區的flag進行不斷地查詢,只要是發現緩衝區中有編碼,就顯示,沒有則開中斷,進入hlt狀態。其實一開始我對這個程式有一點誤解,感覺怎麼中斷方式還倒退回程式查詢方式了?其實不然,只有發生中斷,cpu才會從hlt狀態中出來,才會再執行for(;;)迴圈,才會下一次查詢,這樣巧妙地利用了hlt指令對中斷的響應,使cpu能耗降低。

       接下來作者開始引入FIFO緩衝區。從這裡開始,到後面的記憶體分配那一章,看了之後,我終於大致瞭解了《資料結構》這本書的用處了。不過講FIFO的大篇幅基本無難點,作者就是把鍵盤接受的資料送去的位置,從一個位元組變成了一個迴圈佇列。

       滑鼠的控制電路包含在鍵盤的控制電路里面,因此如果鍵盤的控制電路初始化正常完成,滑鼠的電路控制器的啟用也就完成了。在初始化鍵盤控制電路的函式中,有這麼一個函式:wait_KBC_sendready。它用for迴圈迴圈查詢,直到接收到控制電路發來的做好準備的訊號。這裡是屬於程式查詢方式,屬於純序列(嘿嘿,計算機組成原理是不是學的還行?)。設定的原因就是因為控制電路的速度比cpu慢很多。而當其準備完之後傳送的就是滑鼠模式的模式號碼0x47。

       接下來,作者同樣為滑鼠做了一個迴圈佇列的緩衝區。而滑鼠的資料獲取方法,和鍵盤的是完全一樣的。而傳送的資料到底來自滑鼠還是鍵盤要靠中斷號來判斷。

       最後來點總結。我發現從第一個引入鍵盤中斷的程式開始,就有這樣的感覺,其實程式的主體,在主函式中,是for(;;)以後的內容。因為這是無限迴圈,沒有出去的時候,要是後面還有的話,有也沒用意義。所以後面當出現了滑鼠的時候,對滑鼠的操作和鍵盤的寫在一起,都在for迴圈體中。這一點在高手看起來應該很簡單,但是我實在還是覺得,都往一個for裡面擠,接下來的程式肯定會越來越複雜,因為它的邏輯關係變複雜了

       哦了,今天寫的有點囉嗦,期待明天的筆記!

相關推薦

30自制作業系統學習筆記——

         明天就要回學校了,收拾完東西,再在家裡寫下最後一篇筆記。          今天終於迎來滑鼠的控制了!                                   作者一開始先拿鍵盤練手,給出了一個鍵盤的中斷處理程式。其中作者重點指出一句: io

hibernate學習筆記

tca 新的 instance ati 數據傳遞 cas def mls conf 二級緩存配置 1.導入ehcache對應的三個jar包 ehcache/*.jar 2.配置hibernate使用二級緩存 2.1設置當前環境開始二級緩存的使用 <propert

C++學習筆記—— 陣列

目標 瞭解陣列的概念 熟練掌握一維和多維陣列的宣告與引用 掌握陣列的多種賦值方法 熟悉陣列在實際程式中的應用 宣告陣列 宣告一維陣列 <型別名><陣列名>[<下標表達式>]=[<初值表>] - 型

30自制作業系統學習-2

第二天主要學習組合語言與Makefile入門 1:繼續開發 在這裡先給出作者在第二天使用nask編寫程式碼中涉及到的暫存器概念:  AX--accumulator,累加暫存器  CX--counter,計數暫存器  DX--data,資料暫存器  BX--base

30自制作業系統學習-3

第三天的開發依舊基於彙編和分割槽方面的知識,以及呼叫BIOS中斷,寫入視訊記憶體部分內容。 asmhead.nas: ; haribote-os boot asm ; TAB=4 BOTPAK EQU 0x00280000 ; bootpackのロード先 DSKCA

30自制作業系統學習-4

1 用C語言寫入記憶體 前三天的學習我們順利讓一個大小1440kb的helloos.img映象檔案執行起來,顯示出hello world字樣,可是這樣的螢幕一片漆黑, 顯示更我們熟悉的windos,linux等系統相去甚遠,這次我們嘗試讓螢幕顯示出一點“顏色”出來,往na

30自制作業系統學習-7

1 獲取按鍵編碼 如何讓使用者輸入的鍵盤按鍵轉換為對於的字元,只需使用匯編呼叫bios中斷即可實現,我們在naskfuc.nas中編寫好的大量in out介面嘗試呼叫,修改後的int.c中inthandler函式: #define PORT_KEYDAT 0x0060

30自制作業系統學習-8

1 滑鼠解讀  我們昨天已經能通過滑鼠中斷取得資料了,但是遠遠有這些資料還不夠,我們希望我們能解讀這些資料,使之讓我們的滑鼠游標做出相應的動作,修改bootpack.c裡的HariMain主函式部分: for (;;) { io_cli(); if (fifo

自制PHP框架」:PHP實現的設計模式

爭論 框架 啟動 興趣 註意 end php imp close 往期回顧:「七天自制PHP框架」第二天:模型與數據庫,點擊此處 原文地址:http://www.cnblogs.com/sweng/p/6624845.html,歡迎關註:編程老頭 為什麽要使用設計模式?

學習筆記(5)

學習筆記(由老師筆記自己整理)第五天學習 ARP MAC :物理地址,全球範圍內,唯一的指定一個物理設備; 確定通信設備/終端, 一定要 IP 地址與 MAC 地址結合; 即,必須形成IP地址與MAC地址的對應關系,如下: IP --

Linux學習筆記周一次課(3月19日)

w vmstat top sar nload 10.1 使用w查看系統負載10.2 vmstat命令顯示狀態,每一秒一次,共5次,命令為#vmstat 1 5r,run表示運行;b,block表示阻塞,阻止;swpd,虛擬內存,若這個值大於0,表示內存不夠用;si磁盤輸入虛擬內存;so虛擬

Linux學習筆記周三次課(3月21日)

iptables netfilter INPUT OUTPUT ifconfig 10.11 Linux網絡相關ifconfig -a可以顯示禁止或down掉的網卡;啟動網卡#ifup ens33;禁掉網卡#ifdown ens33;網卡配置文件 /etc/sysconfig/networ

Linux學習筆記周五次課(3月23日)

iptables-save iptables-restore systemctl firewalld firewall-cmd 10.19 iptables規則備份和恢復備份保存,#iptables-save > ipt.txt恢復, #iptables-restore <

學習筆記節課

作業環境變量PATH which可以查看到命令所在的路徑,包括別名。 之前還有一個find命令(查找文件的起始目錄)可以把所有文件從頭到位變量了一遍。 但是which不會,它速度很快,實際是從以下目錄裏面去找的,命令如果在目錄裏,去敲命令時就不用去敲絕對路徑。 真正用一個命令,應該使用絕對路徑。命

python學習筆記

for map 編程 www com wiki ont 通過 進入 函數的參數 局部變量和全局變量 遞歸函數和匿名函數 高階函數 函數式編程了解 一、函數的各種參數 關鍵參數和位置參數:只要記住關鍵參數必須要放在位置參數後面就行了 #參數問題 def test(x,

Python 學習筆記

lis 不想 list [] 基本 基礎數據類型 第四天 列表 類型 學習的第四天,萬惡之根源----基本數據類型(list,tuple) 一、列表   列表是python的基礎數據類型之一,可以存放各種數據類型    1 lst = [] 難受,不想總結Python

hibernate學習筆記

order 執行 nat ron project 數據 不同 研究 對象 QBC查詢 1.簡單查詢 Criteria c = s.createCriteria(TeacherModel.class); 2.獲取查詢結果 多條:list 單挑:uniqueResult

hibernate學習筆記

delet unique lis 多少 update 從數據 將不 不同的 get方法 復習環境搭建配置->工廠->Session->事務Query list uniqueResultCriteria(QBC)配置---------------------

2018-10-20學習python

  又有幾天沒有寫 python 筆記了,忙成狗  1、變數進階(理解) 1.1  變數的引用 引用的概念 變數 和 資料 是分開儲存的 資料 儲存在記憶體中的一個位置 變數 中儲存著資料在記憶體中的地址 變數 

《機器學習》 周志華學習筆記章 貝葉斯分類器(課後習題)python 實現

課後習題答案 1.試用極大似然法估算西瓜集3.0中前3個屬性的類條件概率。 好瓜有8個,壞瓜有9個 屬性色澤,根蒂,敲聲,因為是離散屬性,根據公式(7.17) P(色澤=青綠|好瓜=是) = 3/8 P(色澤=烏黑|好瓜=是) = 4/8 P(色澤=淺白|好瓜=是) =