ch1-系統(tǒng)啟動(dòng)_第1頁(yè)
ch1-系統(tǒng)啟動(dòng)_第2頁(yè)
ch1-系統(tǒng)啟動(dòng)_第3頁(yè)
ch1-系統(tǒng)啟動(dòng)_第4頁(yè)
ch1-系統(tǒng)啟動(dòng)_第5頁(yè)
已閱讀5頁(yè),還剩18頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、哈工大計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院哈工大計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院軟件基礎(chǔ)教研室軟件基礎(chǔ)教研室操作系統(tǒng)操作系統(tǒng)Operating System第第1 1章章 系統(tǒng)啟動(dòng)系統(tǒng)啟動(dòng)Chapter 1: Power On- 2 -Operating System操作系統(tǒng)課,我們希望學(xué)會(huì)什么操作系統(tǒng)課,我們希望學(xué)會(huì)什么? ?- 3 -Operating System所有目標(biāo)都要從所有目標(biāo)都要從“明白操作系統(tǒng)明白操作系統(tǒng)”開(kāi)開(kāi)始始控制器控制器紙帶紙帶0111010n明白操作系統(tǒng)從明白操作系統(tǒng)從“明白系統(tǒng)啟動(dòng)明白系統(tǒng)啟動(dòng)”開(kāi)始開(kāi)始打開(kāi)電源開(kāi)關(guān)后發(fā)生了什么打開(kāi)電源開(kāi)關(guān)后發(fā)生了什么?打開(kāi)電源打開(kāi)電源計(jì)算機(jī)開(kāi)始工作計(jì)算機(jī)開(kāi)始工

2、作計(jì)算機(jī)怎么工作計(jì)算機(jī)怎么工作?又是誰(shuí)決定了計(jì)算機(jī)是那樣工作的又是誰(shuí)決定了計(jì)算機(jī)是那樣工作的?計(jì)算模型計(jì)算模型1936年,英國(guó)數(shù)年,英國(guó)數(shù)學(xué)家學(xué)家A.C.圖靈圖靈提提出了一種模型出了一種模型人人筆筆紙紙偉大的創(chuàng)舉往往都是從樸素的想法開(kāi)始的偉大的創(chuàng)舉往往都是從樸素的想法開(kāi)始的!- 4 -Operating System從圖靈機(jī)到通用圖靈機(jī)從圖靈機(jī)到通用圖靈機(jī)控制器控制器紙帶紙帶0111010圖靈機(jī)圖靈機(jī)通用圖通用圖靈機(jī)靈機(jī)一個(gè)會(huì)做一道菜的廚師一個(gè)會(huì)做一道菜的廚師舀舀2大碗面放入盆中大碗面放入盆中打打6個(gè)雞蛋放入盆中個(gè)雞蛋放入盆中盆中加入盆中加入500克水克水將盆中的物質(zhì)攪拌均勻?qū)⑴柚械奈镔|(zhì)攪拌均

3、勻做成等厚度的餅狀物做成等厚度的餅狀物大火蒸大火蒸15分鐘分鐘一個(gè)能看懂菜譜的廚師一個(gè)能看懂菜譜的廚師將這個(gè)過(guò)程將這個(gè)過(guò)程描述描述: 菜譜菜譜 廚師廚師菜譜菜譜1菜肴菜肴1菜肴菜肴2菜譜菜譜2這樣的廚師才具這樣的廚師才具有競(jìng)爭(zhēng)力有競(jìng)爭(zhēng)力 控制器控制器紙帶紙帶數(shù)據(jù)對(duì)象數(shù)據(jù)對(duì)象設(shè)置控制器動(dòng)作設(shè)置控制器動(dòng)作修改控制器修改控制器控制器狀態(tài)控制器狀態(tài)處理處理- 5 -Operating System從通用圖靈機(jī)到計(jì)算機(jī)從通用圖靈機(jī)到計(jì)算機(jī)n偉大想法的工程實(shí)現(xiàn)偉大想法的工程實(shí)現(xiàn)又一個(gè)偉大的發(fā)明又一個(gè)偉大的發(fā)明: 馮馮諾依曼諾依曼存儲(chǔ)程序思想存儲(chǔ)程序思想 mov ax, 100 100: 0 IPmov a

4、x, 100IRax0存儲(chǔ)器存儲(chǔ)器運(yùn)算器、控制器運(yùn)算器、控制器就是那個(gè)就是那個(gè)讀寫指針讀寫指針1946年提出年提出存儲(chǔ)程序的主要思想:將程序和數(shù)據(jù)存放到計(jì)算機(jī)內(nèi)部的存儲(chǔ)存儲(chǔ)程序的主要思想:將程序和數(shù)據(jù)存放到計(jì)算機(jī)內(nèi)部的存儲(chǔ)器中,計(jì)算機(jī)在程序的控制下一步一步進(jìn)行處理器中,計(jì)算機(jī)在程序的控制下一步一步進(jìn)行處理計(jì)算機(jī)由五大部件組成計(jì)算機(jī)由五大部件組成:輸入設(shè)備、輸出設(shè)備、存儲(chǔ)器、運(yùn)算器、輸入設(shè)備、輸出設(shè)備、存儲(chǔ)器、運(yùn)算器、控制器控制器- 6 -Operating System打開(kāi)電源,計(jì)算機(jī)發(fā)生了什么打開(kāi)電源,計(jì)算機(jī)發(fā)生了什么? ?- 7 -Operating System可以打開(kāi)電源了可以打開(kāi)電源

5、了n計(jì)算模型計(jì)算模型我們要我們要關(guān)注關(guān)注指針指針I(yè)P及其及其指向的內(nèi)容指向的內(nèi)容計(jì)算機(jī)剛打開(kāi)電源時(shí),計(jì)算機(jī)剛打開(kāi)電源時(shí),IP=?由硬件設(shè)計(jì)者決定由硬件設(shè)計(jì)者決定!看看看看x86 PC(1)x86 PC剛開(kāi)機(jī)時(shí)剛開(kāi)機(jī)時(shí)CPU處于實(shí)模式處于實(shí)模式(2)開(kāi)機(jī)時(shí),開(kāi)機(jī)時(shí),CS=0 xFFFF; IP=0 x0000(3)尋址尋址0 xFFFF0(ROM BIOS映射區(qū)映射區(qū))(4)檢查檢查RAM,鍵盤,顯示器,軟硬磁盤,鍵盤,顯示器,軟硬磁盤 (5)將磁盤將磁盤0磁道磁道0扇區(qū)讀入扇區(qū)讀入0 x7c00處處(6)設(shè)置設(shè)置cs=0 x07c0,ip=0 x0000和保護(hù)模式對(duì)應(yīng),實(shí)模式和保護(hù)模式對(duì)應(yīng),實(shí)

6、模式的尋址的尋址CS:IP(CS左移左移4位位+IP),和保護(hù)模式不一樣,和保護(hù)模式不一樣!ROM BIOS0 x000000000 xFFFFFFFF0 xF00000 x100000ROM BIOS映射區(qū)映射區(qū)- 8 -Operating System0 x7c00處存放的代碼處存放的代碼n就是從磁盤引導(dǎo)扇區(qū)讀入的那就是從磁盤引導(dǎo)扇區(qū)讀入的那512個(gè)字節(jié)個(gè)字節(jié)引導(dǎo)扇區(qū)就是引導(dǎo)扇區(qū)就是啟動(dòng)設(shè)備的第一個(gè)扇區(qū)啟動(dòng)設(shè)備的第一個(gè)扇區(qū)啟動(dòng)設(shè)備信息被設(shè)置在啟動(dòng)設(shè)備信息被設(shè)置在CMOS中中 開(kāi)機(jī)時(shí)按住開(kāi)機(jī)時(shí)按住del鍵可進(jìn)入鍵可進(jìn)入啟動(dòng)設(shè)備設(shè)置界面,可啟動(dòng)設(shè)備設(shè)置界面,可以設(shè)置為光盤啟動(dòng)以設(shè)置為光盤啟動(dòng)!

7、CMOS: 互補(bǔ)金屬氧化物半互補(bǔ)金屬氧化物半導(dǎo)體導(dǎo)體(64B-128B)。用來(lái)存儲(chǔ)。用來(lái)存儲(chǔ)實(shí)時(shí)鐘和硬件配置信息。實(shí)時(shí)鐘和硬件配置信息。因此,硬盤的第一個(gè)扇區(qū)上存放著開(kāi)機(jī)后執(zhí)行的第因此,硬盤的第一個(gè)扇區(qū)上存放著開(kāi)機(jī)后執(zhí)行的第一段我們可以控制的程序。一段我們可以控制的程序。操作系統(tǒng)的故事從這里開(kāi)始操作系統(tǒng)的故事從這里開(kāi)始- 9 -Operating System引導(dǎo)扇區(qū)代碼引導(dǎo)扇區(qū)代碼: bootsect.s .globl begtext,begdata,begbss,endtext,enddata,endbss.text /文本段文本段begtext:.data /數(shù)據(jù)段數(shù)據(jù)段begdata:

8、.bss /未初始化數(shù)據(jù)段未初始化數(shù)據(jù)段begbss:.textentry start /關(guān)鍵字關(guān)鍵字entry告訴鏈接器告訴鏈接器“程序入口程序入口”start: mov ax, #BOOTSEG mov ds, ax mov ax, #INITSEG mov es, ax mov cx, #256 sub si, si sub di,di rep movw jmpi go, INITSEG.text等是偽操作符,告訴編譯器產(chǎn)生等是偽操作符,告訴編譯器產(chǎn)生文本段,文本段,.text用于標(biāo)識(shí)文本段的開(kāi)始用于標(biāo)識(shí)文本段的開(kāi)始位置。位置。此處的此處的.text、.data、.bss表明這表明這3個(gè)

9、個(gè)段重疊,不分段段重疊,不分段!此條語(yǔ)句就是此條語(yǔ)句就是0 x7c00處存放的語(yǔ)句處存放的語(yǔ)句!BOOTSEG = 0 x07c0INITSEG = 0 x9000SETUPSEG = 0 x9020將將0 x07c0:0 x0000處的處的256個(gè)字個(gè)字移動(dòng)到移動(dòng)到0 x9000:0 x0000處處- 10 -Operating Systemjmpi go, INITSEG go: mov ax,cs /cs=0 x9000 mov ds,ax mov es,ax mov ss,ax mov sp,#0 xff00load_setup: /載入載入setup模塊模塊 mov dx,#0 x0

10、000 mov cx,#0 x0002 mov bx,#0 x0200 mov ax,#0 x0200+SETUPLEN int 0 x13 /BIOS中斷中斷 jnc ok_load_setup mov dx,#0 x0000 mov ax,#0 x0000 /復(fù)位復(fù)位 int 0 x13 j load_setup /重讀重讀jmpi (jump intersegment段間跳轉(zhuǎn)段間跳轉(zhuǎn)): cs=INITSEG, ip=go為為call做準(zhǔn)備做準(zhǔn)備!啟動(dòng)盤啟動(dòng)盤boot扇區(qū)扇區(qū)setup的的4個(gè)扇區(qū)個(gè)扇區(qū)system模塊模塊(OS代碼代碼)0 x13是是BIOS讀磁盤扇區(qū)的中斷讀磁盤扇區(qū)的

11、中斷: ah=0 x02-讀磁盤,讀磁盤,al=扇區(qū)數(shù)量扇區(qū)數(shù)量(SETUPLEN=4),ch=柱面號(hào),柱面號(hào),cl=開(kāi)始扇區(qū),開(kāi)始扇區(qū),dh=磁頭號(hào),磁頭號(hào),dl=驅(qū)動(dòng)器驅(qū)動(dòng)器號(hào),號(hào),es:bx=內(nèi)存地址內(nèi)存地址- 11 -Operating System讀入讀入setup模塊后模塊后: ok_load_setup Ok_load_setup: /載入載入setup模塊模塊 mov dl,#0 x00 mov ax,#0 x0800 /ah=8獲得磁盤參數(shù)獲得磁盤參數(shù) int 0 x13 mov ch,#0 x00 mov sectors,cx mov ah,#0 x03 xor bh,bh

12、 int 0 x10 /讀光標(biāo)讀光標(biāo) mov cx,#24 mov bx,#0 x0007 mov bp,#msg1 mov ax,#1301 int 0 x10 /顯示字符顯示字符 mov ax,#SYSSEG /SYSSEG=0 x1000 mov es,ax call read_it /讀入讀入system模塊模塊 jmpi 0,SETUPSEG7是顯示屬性是顯示屬性!bootsect.s中的數(shù)據(jù)中的數(shù)據(jù) /在文件末尾在文件末尾sectors: .word 0 /磁道扇區(qū)數(shù)磁道扇區(qū)數(shù)msg1: .byte 13,10 .ascii “Loading system.” .byte 13,1

13、0,13,10顯示這顯示這24個(gè)字符將是個(gè)字符將是大家的第一個(gè)大家的第一個(gè)“創(chuàng)創(chuàng)舉舉”!轉(zhuǎn)入轉(zhuǎn)入0 x9020:0 x0000執(zhí)行執(zhí)行setup.sboot的工作的工作:讀讀setup,讀讀system- 12 -Operating Systemread_it /讀入讀入system模塊模塊 read_it: mov ax,es cmp ax,#ENDSEG jb ok1_read retok1_read: mov ax,sectors sub ax,sread /sread是當(dāng)前磁道已讀扇區(qū)數(shù)是當(dāng)前磁道已讀扇區(qū)數(shù),ax未讀扇區(qū)數(shù)未讀扇區(qū)數(shù) call read_track /讀磁道讀磁道.sy

14、stem模塊可能很大,模塊可能很大,要跨越磁道要跨越磁道!為什么讀入為什么讀入system模塊還需要定義一個(gè)函數(shù)模塊還需要定義一個(gè)函數(shù)?ENDSEG=SYSSEG+SYSSIZESYSSIZE=0 x8000 /該變量可根據(jù)該變量可根據(jù)Image大小設(shè)定大小設(shè)定(編譯操作系統(tǒng)時(shí)編譯操作系統(tǒng)時(shí))引導(dǎo)扇區(qū)的末尾引導(dǎo)扇區(qū)的末尾 /BIOS用以識(shí)別引導(dǎo)扇區(qū)用以識(shí)別引導(dǎo)扇區(qū).org 510 .word 0 xAA55 /扇區(qū)的最后兩個(gè)字節(jié)扇區(qū)的最后兩個(gè)字節(jié)否則會(huì)打出非引導(dǎo)設(shè)備否則會(huì)打出非引導(dǎo)設(shè)備可以轉(zhuǎn)入可以轉(zhuǎn)入setup執(zhí)行了,執(zhí)行了,jmpi 0, SETUPSEG- 13 -Operating Sy

15、stemsetup模塊,即模塊,即setup.s 根據(jù)名字就可以想到根據(jù)名字就可以想到: setup將完成將完成OS啟動(dòng)前的設(shè)置啟動(dòng)前的設(shè)置start: mov ax,#INITSEG mov ds,ax mov ah,#0 x03 xor bh,bh int 0 x10/取光標(biāo)位置取光標(biāo)位置dx mov 0,dx mov ah,#0 x88 int 0 x15 mov 2,ax . cli /不允許中斷不允許中斷 mov ax,#0 x0000 clddo_move: mov es,ax add ax,#0 x1000 cmp ax,#0 x9000 jz end_move mov ds,a

16、x sub di,di sub si,si mov cx,#0 x8000 rep movsw jmp do_move 取出光標(biāo)位置取出光標(biāo)位置(包包括其他硬件參數(shù)括其他硬件參數(shù))到到0 x90000處處擴(kuò)展內(nèi)存大小擴(kuò)展內(nèi)存大小內(nèi)存地址內(nèi)存地址長(zhǎng)度長(zhǎng)度名稱名稱0 x900002光標(biāo)位置光標(biāo)位置0 x900022擴(kuò)展內(nèi)存數(shù)擴(kuò)展內(nèi)存數(shù)0 x901FC2根設(shè)備號(hào)根設(shè)備號(hào)0 x9000C2顯卡參數(shù)顯卡參數(shù)SYSSEG = 0 x1000將將system模塊模塊移到移到0地址地址- 14 -Operating System將將setup移到移到0地址處地址處.但但0地址處是有重要內(nèi)容的地址處是有重要內(nèi)容

17、的end_move: mov ax,#SETUPSEG mov ds,ax lidt idt_48 lgdt gdt_48/設(shè)置保護(hù)模式下的中斷和尋址設(shè)置保護(hù)模式下的中斷和尋址 進(jìn)入保護(hù)模式的命令進(jìn)入保護(hù)模式的命令.idt_48:.word 0 .word 0,0 /保護(hù)模式的中斷處理函數(shù)表保護(hù)模式的中斷處理函數(shù)表gdt_48:.word 0 x800 .word 512+gdt,0 x9 gdt: .word 0,0,0,0 .word 0 x07FF, 0 x0000, 0 x9A00, 0 x00C0 .word 0 x07FF, 0 x0000, 0 x9200, 0 x00C0 RO

18、M BIOS0 x000000000 xFFFFFFFF0 xF00000 x100000ROM BIOS映射區(qū)映射區(qū)中斷向量表中斷向量表前面的前面的int指令指令才可以使用才可以使用!以后不調(diào)用以后不調(diào)用int指令了嗎指令了嗎?因?yàn)椴僮飨到y(tǒng)要讓硬件進(jìn)入保護(hù)模式了因?yàn)椴僮飨到y(tǒng)要讓硬件進(jìn)入保護(hù)模式了保護(hù)模式下保護(hù)模式下int n和和cs:ip解釋不再和實(shí)模式一樣解釋不再和實(shí)模式一樣又一個(gè)函數(shù)表又一個(gè)函數(shù)表將將cs:ip變成物變成物理地址理地址- 15 -Operating System保護(hù)模式下的地址翻譯和中斷處理保護(hù)模式下的地址翻譯和中斷處理保護(hù)模式下的地址翻譯保護(hù)模式下的地址翻譯保護(hù)模式下中

19、斷處理函數(shù)入口保護(hù)模式下中斷處理函數(shù)入口即即gdt的作用的作用 t是是table,所以實(shí)模式,所以實(shí)模式下下:cs左移左移4+ip。保護(hù)模。保護(hù)模式下式下:根據(jù)根據(jù)cs查表查表+ipt仍是仍是table,仿照,仿照gdt,通過(guò)通過(guò)int n的的n進(jìn)行查表進(jìn)行查表GDTcs:ip物理內(nèi)存地址物理內(nèi)存地址IDTint n中斷處理函數(shù)入口中斷處理函數(shù)入口即即idt的作用的作用 - 16 -Operating System進(jìn)入保護(hù)模式進(jìn)入保護(hù)模式call empty_8042 mov al,#0 xD1 out #0 x64,al /8042是鍵盤控制器,其輸出端口是鍵盤控制器,其輸出端口P2用來(lái)控制

20、用來(lái)控制A20地址線地址線call empty_8042 mov al,#0 xDF out #0 x60,al /選通選通A20地址線地址線 call empty_8042初始化初始化8259(中斷控制中斷控制) /一段非常機(jī)械化的程序一段非常機(jī)械化的程序mov ax,#0 x0001 mov cr0,axjmpi 0,8 empty_8042: .word 0 x00eb,0 x00eb in al,#0 x64 test al,#2 jnz empty_8042 ret 跳到下一句指跳到下一句指令的機(jī)器碼令的機(jī)器碼!位位1=0,輸入緩存,輸入緩存器為空,不空說(shuō)器為空,不空說(shuō)明明PC機(jī)有問(wèn)

21、題機(jī)有問(wèn)題D1表示寫數(shù)據(jù)到表示寫數(shù)據(jù)到8042的的P2端口端口cr0一個(gè)非??岬募拇嫫饕粋€(gè)非??岬募拇嫫鱌GPE031PE=1啟動(dòng)保護(hù)模式,啟動(dòng)保護(hù)模式,PG=1啟動(dòng)分頁(yè)啟動(dòng)分頁(yè)jmpi 0,8 /cs=8用來(lái)查用來(lái)查gdt- 17 -Operating Systemjmpi 0,8 /gdt中的中的8gdt: .word 0,0,0,0 .word 0 x07FF, 0 x0000, 0 x9A00, 0 x00C0 .word 0 x07FF, 0 x0000, 0 x9200, 0 x00C0 ?GDTcs:ip0816段基址段基址15.0段限長(zhǎng)段限長(zhǎng)15.004段基址段基址31.24段

22、基址段基址23.16段限長(zhǎng)段限長(zhǎng)19.16P DPLGGDT表項(xiàng)表項(xiàng)0310 x00C09A00000007FFFjmp到內(nèi)存到內(nèi)存0 x0000處處是是system模塊模塊!兩個(gè)兩個(gè)gdt表項(xiàng),都是表項(xiàng),都是0 x0000,一個(gè)只讀,一個(gè)只讀(代代碼碼),一個(gè)讀寫,一個(gè)讀寫(數(shù)據(jù)數(shù)據(jù))- 18 -Operating System跳到跳到system模塊執(zhí)行模塊執(zhí)行.system模塊模塊(目標(biāo)代碼目標(biāo)代碼)中的第一部分代碼中的第一部分代碼? head.sdisk: Image dd bs=8192 if=Image of=/dev/PS0 Image: boot/bootsect boot/s

23、etup tools/system tools/build tools/build boot/bootsect boot/setup tools/system Imagetools/system: boot/head.o init/main.o $(DRIVERS) $(LD) boot/head.o init/main.o $(DRIVERS) -o tools/systemsystem由許多文件編譯而成,為什么是由許多文件編譯而成,為什么是head.s?linux/Makefileif=input file/dev/PS0是軟驅(qū)是軟驅(qū)A明白為什么明白為什么head.s就這樣一個(gè)名字了吧就這

24、樣一個(gè)名字了吧?- 19 -Operating Systemhead.s /一段在保護(hù)模式下運(yùn)行的代碼一段在保護(hù)模式下運(yùn)行的代碼setup是進(jìn)入保護(hù)模式,是進(jìn)入保護(hù)模式,head是進(jìn)入之后的初始化是進(jìn)入之后的初始化stratup_32: movl $0 x10,%eax mov %ax,%ds mov %ax,%es mov %as,%fs mov %as,%gs /指向指向gdt的的0 x10項(xiàng)項(xiàng)(數(shù)據(jù)段數(shù)據(jù)段) lss _stack_start,%esp /設(shè)置棧設(shè)置棧(系統(tǒng)棧系統(tǒng)棧) call setup_idt call setup_gdt xorl %eax,%eax1:incl %

25、eax movl %eax,0 x000000 cmpl %eax,0 x100000 je 1b /0地址處和地址處和1M地址處相同地址處相同(A20沒(méi)開(kāi)啟沒(méi)開(kāi)啟),就死循環(huán),就死循環(huán) jmp after_page_tables /頁(yè)表,什么東東頁(yè)表,什么東東?setup_idt: lea ignore_int,%edx movl $0 x00080000,%eax movw %dx,%ax lea _idt,%edi movl %eax,(%edi) 和前面的代碼不和前面的代碼不一樣了一樣了?因?yàn)槭且驗(yàn)槭?2位匯編代碼位匯編代碼!structlong *a; short b;stack_s

26、tart=&user_stackPAGE_SIZE2,0 x10; idt_48:.word 0 word 0,0_idt: .fill 256,8,0現(xiàn)在忽略中斷現(xiàn)在忽略中斷- 20 -Operating System關(guān)于匯編關(guān)于匯編head.s的匯編和前面不一樣的匯編和前面不一樣?mov ax, cs /csax, 目標(biāo)操作數(shù)在前目標(biāo)操作數(shù)在前 (1) as86匯編:能產(chǎn)生匯編:能產(chǎn)生16位代碼的位代碼的Intel 8086(386)匯編匯編(2) GNU as匯編:產(chǎn)生匯編:產(chǎn)生32位代碼,使用位代碼,使用AT&T系統(tǒng)系統(tǒng)V語(yǔ)法語(yǔ)法AT&T美國(guó)電話電報(bào)公司,美國(guó)電

27、話電報(bào)公司,包含貝爾實(shí)驗(yàn)室等,包含貝爾實(shí)驗(yàn)室等,1983年年AT&T UNIX支持支持組發(fā)布了系統(tǒng)組發(fā)布了系統(tǒng)Vmovl var, %eax/(var)%eaxmovb -4(%ebp), %al /取出一字節(jié)取出一字節(jié)(3) 內(nèi)嵌匯編,內(nèi)嵌匯編,gcc編譯編譯x.c會(huì)產(chǎn)生中間會(huì)產(chǎn)生中間 結(jié)果結(jié)果as匯編文件匯編文件x.s_asm_(“匯編語(yǔ)句匯編語(yǔ)句”: 輸出輸出: 輸入輸入: 破壞部分描述破壞部分描述); _asm_(“movb %fs:%2, %al”:”=a”(_res):”0”(seg),”m”(*(addr);a表示使用表示使用eax,并編號(hào)并編號(hào)%0%2表示表示addr,

28、m表示使用內(nèi)存表示使用內(nèi)存0或空表示使用與或空表示使用與相應(yīng)輸出一樣的相應(yīng)輸出一樣的寄存器寄存器- 21 -Operating Systemafter_page_tables /設(shè)置了頁(yè)表之后設(shè)置了頁(yè)表之后setup是進(jìn)入保護(hù)模式,是進(jìn)入保護(hù)模式,head是進(jìn)入之后的初始化是進(jìn)入之后的初始化after_page_tables: pushl $0 pushl $0 pushl $0 pushl $L6 pushl $_main jmp set_paging L6: jmp L6setup_paging: 設(shè)置頁(yè)表設(shè)置頁(yè)表 ret將來(lái)學(xué)到將來(lái)學(xué)到!簡(jiǎn)單的幾句程序,控制流卻很復(fù)雜簡(jiǎn)單的幾句程序,控制流卻很復(fù)雜setup_paging執(zhí)行執(zhí)行ret后后? 會(huì)執(zhí)行函數(shù)會(huì)執(zhí)行函數(shù)main() p3p2p1返回地址返回地址C執(zhí)行執(zhí)行func(p1,p2,p3)進(jìn)入進(jìn)入main()后的棧為后的棧為0,0,0,L6 main()函數(shù)的三個(gè)參數(shù)是函數(shù)的三

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論