xxxx18一60岁hd中国/日韩女同互慰一区二区/西西人体扒开双腿无遮挡/日韩欧美黄色一级片 - 色护士精品影院www

資源簡介



實例一

由于想學習保護模式編程和linux0.01,遇到不少問題。有的保護模式編程實例全是匯編語言。linux0.01在高版本GCC又編譯不能通過,即使編譯通過也不能正常運行。能正常運行的linux0.01的信息也是很少。況且文件也比較多,代碼也是很多,不怎么好學習掌握。于是就刪除了linux0.01很多文件,只留下boot/boot.s,boot/head.s,init/mian.c和makefile等幾個源程序文件和tools目錄下的幾個文件。并且修改了makefile,使之能編譯通過,運行。這個例子用sudo make disk寫進軟驅扇區之后能在Bochs和Vbox能模擬器上運行。運行過程就是boot.s->head.s->main.c,跳進main函數后執行一個寫字符的循環,之后死循環。

 

下圖是實例一運行效果:




實例二
實例二在實例一上面添加了PS2鍵盤中斷,時鐘中斷,一個輸出字符的0x80軟中斷。實例用到了linux0.01中的system.h中定義的兩個函數set_intr_gate,set_trap_gate可以比較方便設置IDT。只有兩個參數,第一個是中斷號,第二個是中斷處理函數的地址。實例還用到了linux0.01中的io.h中的兩個函數outb(value,port)和inb(port)用與讀寫IO端口。程序也是比較簡單,跳進main函數后用set_intr_gate,set_trap_gate設置時鐘,PS2鍵盤,和0x80的IDT。之后用asm("sti");開中斷,就死循環,留下中斷處理程序在執行了。中斷處理函數可以是匯編的子程序或者是C語言函數。其中時鐘中斷處理程序在interrupt.s中用的是匯編,是通過寫彩色字符模式顯存空間0xb8000-xB8FA0輸出幾個變動的字符。PS2鍵盤中斷key_interruptc,在main.c里面用的是C語言。中斷時讀鍵盤端口0x60獲取按鍵的掃描碼,再判斷掃描碼,執行清屏,寫屏,軟中斷的代碼。按鍵1掃描碼為2執行清屏,按鍵2掃描碼為3執行寫屏,按鍵3掃描碼為4執行軟中斷輸出字符A。注意掃描碼根據鍵盤不同可能會不一樣。


下面兩張圖是實例二運行效果:





 

實例三
實例三在程序中添加了三個任務,任務是參照Linux0.00添加的,一個任務有一個TSS和LDT。任務入口同樣的可以是C語言函數或者匯編過程。三個任務都是往屏幕各自位置輸出字符,背景不斷循環閃爍。程序首先設置三個任務在GDT中的TSS和LDT,再把三個任務的TSS選擇子存放到任務數組中。接著設置中斷,打開中斷,并通過iret跳到第一個任務中。之后時鐘中斷中,調用timeret,不斷循環切換三個任務。切換任務用jmpl 任務選擇子 偏移地址0 直接跳到任務中切換任務。其中0xea是jmpl機器碼,task_sel是任務選擇子。


下圖是實例三運行效果:

 


以上三個例子都在VBOX Ubuntu16.04 x64 LTS GCC5.4.0,中編譯通過可以用Bochs,VBOX,DOSBox SVN-Daum等模擬器運行。在linuxmint 18.04 gcc 7.3.0中也可以編譯通過,生成的image也可以用Bochs,VBOX,DOSBox SVN-Daum等模擬器運行。
 在VBOX Veket GCC4.64編譯中會有undefined reference to "asm"的錯誤,把asm該成__asm即可,還有一個不能再for循環中聲明變量的錯誤,需要在makefile中的GCC編譯行加一個-std=c99的參數。

資源截圖

代碼片段和文件信息

?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----

?????文件??????50447??2020-09-29?15:38??2.zip

?????文件??????45462??2020-09-29?15:38??1.zip

?????文件??????61181??2020-09-29?15:38??3.zip

-----------?---------??----------?-----??----

???????????????157090????????????????????3


評論

共有 條評論