




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、計算機(jī)系統(tǒng) I,第九章:TRAP 程序和子程序,1,計算機(jī)系統(tǒng)I-第9章,系統(tǒng)調(diào)用于實現(xiàn)特定操作,這些操作需要程序員具備某些不熟悉專業(yè)領(lǐng)域的知識,或者為了安全性而需要保護(hù)的操作。 專業(yè)性:比如對外部設(shè)備操作時需要了解外部設(shè)備的工作原理,內(nèi)部的I/O寄存器以及對它們的操作順序。這些都和具體硬件相關(guān),不同的外部設(shè)備可能要求不一樣。 安全性:多個用戶程序可能共享某個外部設(shè)備資源,用戶編寫程序直接操作外部設(shè)備,一個小錯誤可能會影響到很多其它的用戶程序。,系統(tǒng)調(diào)用,2,計算機(jī)系統(tǒng)I-第9章,并不是每個程序員知道(或者想知道)這個層次的技術(shù)細(xì)節(jié)。 解決方法:提供服務(wù)子程序或者系統(tǒng)調(diào)用(通常作為操作系統(tǒng)的一
2、部分) ,用戶通過這些子程序或者系統(tǒng)調(diào)用來安全和方便的實現(xiàn)底層操作。,3,計算機(jī)系統(tǒng)I-第9章,用戶程序使用系統(tǒng)調(diào)用 操作系統(tǒng)執(zhí)行調(diào)用操作 結(jié)束后將控制權(quán)返回給用戶程序 在LC-3里,通過TRAP 機(jī)制來實現(xiàn)系統(tǒng)調(diào)用。,系統(tǒng)調(diào)用,4,計算機(jī)系統(tǒng)I-第9章,包括一組服務(wù)子程序 操作系統(tǒng)的一部分 服務(wù)程序起始固定的內(nèi)存地址 LC-3中實現(xiàn)的服務(wù)子程序位于系統(tǒng)代碼區(qū)(below x3000) 最多支持 256個服務(wù)子程序 起始地址表 存放在 x0000 到 x00FF 的內(nèi)存中(256x16bit) 。每16位存放一個系統(tǒng)服務(wù)子程序的起始地址。 在別的系統(tǒng)中可能稱為為“系統(tǒng)控制塊”,或 “陷入矢量表
3、”,LC-3 TRAP 機(jī)制,5,計算機(jī)系統(tǒng)I-第9章,TRAP 指令 用戶程序通過TRAP指令來實現(xiàn)系統(tǒng)調(diào)用。操作系統(tǒng)將以用戶程序身份執(zhí)行某個特定的服務(wù)程序,并在執(zhí)行結(jié)束后將控制權(quán)返回 LC-3: TRAP指令通過指令中8-bit的 trap vector來指示調(diào)用256個服務(wù)子程序中的哪一個。 鏈接回到用戶程序 提供從服務(wù)程序返回到用戶程序的機(jī)制,LC-3 TRAP 機(jī)制,6,計算機(jī)系統(tǒng)I-第9章,Trap 向量 指示調(diào)用哪個系統(tǒng)服務(wù)程序(x00-xff) 通過8位trapvect8索引起始地址表,獲得對應(yīng)系統(tǒng)調(diào)用的入口地址 LC-3實現(xiàn)的方法:起始地址表存放在內(nèi)存的 0 x0000 0
4、x00FF處,8-bit trap vector 通過高位0擴(kuò)展成16位的內(nèi)存地址,該內(nèi)存地址處存放的就是相應(yīng)調(diào)用的入口地址 如何執(zhí)行 從起始地址表查找服務(wù)程序地址,加載到PC中 如何返回 將下一條指令的地址(當(dāng)前的PC值)保存到R7,TRAP指令,7,計算機(jī)系統(tǒng)I-第9章,TRAP,注: PC在指令獲取階段已經(jīng)執(zhí)行加1操作指向了當(dāng)前指令的下一條指令,8,計算機(jī)系統(tǒng)I-第9章,如何返回用戶程序?即回到trap指令的下一條指令繼續(xù)運行 執(zhí)行trap指令時將PC保存在R7 服務(wù)程序使用JMP R7就可以返回到用戶程序 LC-3 匯編語言使用RET (return) 助記符來取代 “JMP R7”。
5、 因此:必須保證服務(wù)程序沒有改變R7,否則無法返回。,RET (JMP R7),9,計算機(jī)系統(tǒng)I-第9章,TRAP 機(jī)制流程,查找開始地址 轉(zhuǎn)換到服務(wù)程序 Ret (JMP R7),10,計算機(jī)系統(tǒng)I-第9章,.ORIG x3000 LDR2, TERM ; Load negative ASCII 7LDR3, ASCII ; Load ASCII differenceAGAINTRAP x23 ; input characterADDR1, R2, R0 ; Test for terminateBRzEXIT ; Exit if doneADDR0, R0, R3 ; Change to l
6、owercaseTRAP x21 ; Output to monitor.BRnzp AGAIN ; . again and again.TERM.FILL xFFC9 ; -7ASCII.FILL x0020 ; lowercase bitEXITTRAP x25 ; halt.END,Example: 輸入大寫字母轉(zhuǎn)換為小寫字母,輸入7結(jié)束,11,計算機(jī)系統(tǒng)I-第9章,.ORIG x0430; syscall addressSTR7, SaveR7; save R7 back to userCRTSR.FILLxF3FCCRTDR.FILLxF3FFSaveR1.FILL0SaveR7.F
7、ILL0.END,Example: Output Service Routine,12,計算機(jī)系統(tǒng)I-第9章,TRAP Routines and their Assembler Names,13,計算機(jī)系統(tǒng)I-第9章,在以下情況,必須要保存寄存器的內(nèi)容: 如果該寄存器的內(nèi)容會被系統(tǒng)調(diào)用使用 并在后續(xù)操作中將修改該寄存器. 誰保存? 調(diào)用服務(wù)程序的程序(調(diào)用者保存)? 需要知道系統(tǒng)調(diào)用會修改或使用那些寄存器什么,但實際可能不知道服務(wù)程序會使用和修改哪些寄存器 被調(diào)用的服務(wù)程序(被調(diào)用者保存)? 知道自己修改的內(nèi)容,但不知道調(diào)用程序后面需要什么,寄存器內(nèi)容的保存和恢復(fù),14,計算機(jī)系統(tǒng)I-第9章,
8、LEAR3, BinaryLDR6, ASCII ; char-digit templateLDR7, COUNT ; initialize to 10AGAINTRAPx23 ; Get charADDR0, R0, R6 ; convert to numberSTRR0, R3, #0 ; store numberADDR3, R3, #1 ; incr pointerADDR7, R7, -1 ; decr counterBRpAGAIN ; more?BRnzp NEXTASCII.FILL xFFD0COUNT.FILL #10Binary.BLKW #10,Example,What
9、s wrong with this routine?What happens to R7?,15,計算機(jī)系統(tǒng)I-第9章,被調(diào)用者保存- “callee-save” 在開始之前,保存可能被修改的寄存器內(nèi)容(除非調(diào)用程序預(yù)先知道修改值) 在返回前,恢復(fù)這些寄存器內(nèi)容 調(diào)用者保存- “caller-save” 針對將被調(diào)用程序或被調(diào)用程序(如果知道的話)修改的寄存器,如果其內(nèi)容后面需要,將其內(nèi)容保存下來 在TRAP之前保存R7 在TRAP x23 (input character) 之前保存R0 或者避免使用那些寄存器 保存在哪里:內(nèi)存,寄存器內(nèi)容的保存和恢復(fù),16,計算機(jī)系統(tǒng)I-第9章,一個服務(wù)程
10、序能否調(diào)用另一個服務(wù)程序? 如果可以的話,調(diào)用程序需要做什么?,Question,17,計算機(jī)系統(tǒng)I-第9章,用戶代碼,服務(wù)程序提供3個主要功能: 程序員與系統(tǒng)相關(guān)的細(xì)節(jié)隔離 頻繁使用的代碼只需要寫一次 保護(hù)系統(tǒng)資源免受惡意/笨拙的程序員影響 對用戶程序是否可以提供類似的功能?,18,計算機(jī)系統(tǒng)I-第9章,子程序,19,計算機(jī)系統(tǒng)I-第9章,一個子程序是一個滿足以下條件的程序片段: 在用戶空間運行 lives in user space 執(zhí)行一個預(yù)定義好的任務(wù),被另一個用戶程序調(diào)用 執(zhí)行完畢后,將控制權(quán)返回給調(diào)用程序 與服務(wù)程序類似,但不是操作系統(tǒng)的一部分 不與受保護(hù)的硬件資源打交道,不需要特
11、權(quán) 為什么需要子程序? 重用有用的(調(diào)試好的!)代碼 在多個程序員之間劃分任務(wù) 使用供應(yīng)商提供的代碼庫,子程序,20,計算機(jī)系統(tǒng)I-第9章,保存當(dāng)前的PC(下一條指令的地址)到R7,跳到一個指定的位置(PC相對尋址)。 保存返回地址叫做 “l(fā)inking” 目標(biāo)地址是 PC-relative (PC + Sext(IR10:0) -1024+1023 第11個bit位定義尋址模式: 如果為1,PC相對尋址:目標(biāo)地址 = PC + Sext(IR10:0) 如果為0,寄存器尋址: 目標(biāo)地址 = 寄存器內(nèi)容IR8:6 能用BRnzp 指令取代嗎?,JSR指令,21,計算機(jī)系統(tǒng)I-第9章,JSR,N
12、OTE: PC has already been incrementedduring instruction fetch stage.,22,計算機(jī)系統(tǒng)I-第9章,和JSR相似,除了尋址模式不同 目標(biāo)地址是寄存器基址 第11個bit位定義了尋址模式 思考:JSSR具備的什么特征是JSR指令沒有的?,JSRR Instruction,23,計算機(jī)系統(tǒng)I-第9章,JSRR,NOTE: PC has already been incrementedduring instruction fetch stage.,24,計算機(jī)系統(tǒng)I-第9章,和系統(tǒng)調(diào)用類似 RET (JMP R7),子程序返回,25,計
13、算機(jī)系統(tǒng)I-第9章,2sCompNOTR0, R0 ; flip bitsADDR0, R0, #1 ; add oneRET ; return to caller To call from a program (within 1024 instructions): ; need to compute R4 = R1 - R3ADDR0, R3, #0 ; copy R3 to R0JSR2sComp ; negateADDR4, R1, R0 ; add to R1. Note: R0是否需要保存? 思考:子程序定義的位置?,Example: 對R0的數(shù)求反+1,26,計算機(jī)系統(tǒng)I-第9章,
14、參數(shù) 傳遞給子程序的值,稱為參數(shù) 子程序需要利用該值來完成任務(wù) Examples: 在 2sComp 程序中, R0存放需要取負(fù)+1的數(shù) 在輸出服務(wù)程序中,R0存放需要被打印的字符 在 PUTS服務(wù)程序中, R0存放打印字符串的起始地址 返回值 由子程序輸出的值,稱為子程序的返回值, 是子程序的計算結(jié)果 Examples: 在2sComp程序中,取負(fù)+1的結(jié)果保存在 R0 在GETC服務(wù)程序中,由鍵盤輸入的字符保存在 R0,子程序的參數(shù)及返回值,27,計算機(jī)系統(tǒng)I-第9章,為了使用子程序,程序員必須知道: 子程序調(diào)用地址(子程序標(biāo)號:入口指令的標(biāo)號) 功能(what does it do?)
15、注:程序員不需要知道子程序如何工作,但需要知道子程序運行后機(jī)器的狀態(tài)會發(fā)生什么變化 參數(shù)(怎么傳遞數(shù)據(jù)給子程序,如果需要) 返回值 (怎么獲取子程序的計算結(jié)果,如果有的話),如何使用子程序,28,計算機(jī)系統(tǒng)I-第9章,由于子程序和服務(wù)程序類似,如果有必要的話,也需要保存和恢復(fù)寄存器內(nèi)容 一般情況使用“被調(diào)用者模式”,除了返回值 保存任何子程序內(nèi)部將修改,但子程序返回時不應(yīng)該改變的值 一般情況下,返回后恢復(fù)輸入的參數(shù)為初始值(除非被返回值修改) 注意: 如果調(diào)用任何子程序或服務(wù)程序,必須保存R7 否則,將不能返回調(diào)用程序,保存和恢復(fù)寄存器,29,計算機(jī)系統(tǒng)I-第9章,編寫一個子程序 FirstC
16、har ,實現(xiàn)以下功能: 找到一個給定字符(字符ASCII碼保存在R0 )在一個字符串( R1 指向字符串首地址)中第一次出現(xiàn)的位置;返回所在內(nèi)存地址信息在R2 (內(nèi)存位置如果指向NULL表示沒有該字符出現(xiàn))。 使用FirstChar來實現(xiàn)算法CountChar,實現(xiàn)以下功能: 計算一個給定字符(保存在R0 )在一個字符串( R1 指向)中的出現(xiàn)次數(shù);結(jié)果保存在在R2。 可以在不知道FirstChar實現(xiàn)的情況下寫CountChar算法。,Example,30,計算機(jī)系統(tǒng)I-第9章,CountChar Algorithm (using FirstChar),31,計算機(jī)系統(tǒng)I-第9章,Coun
17、tChar Implementation,; CountChar: subroutine to count occurrences of a charCountCharSTR3, CCR3; save registersSTR4, CCR4STR7, CCR7; JSR alters R7STR1, CCR1; save original string ptrANDR4, R4, #0; initialize count to zeroCC1JSRFirstChar; find next occurrence (ptr in R2)LDRR3, R2, #0; see if char or n
18、ullBRzCC2; if null, no more charsADDR4, R4, #1; increment countADDR1, R2, #1; point to next char in stringBRnzpCC1CC2ADDR2, R4, #0; move return val (count) to R2LDR3, CCR3; restore regsLDR4, CCR4LDR1, CCR1LDR7, CCR7RET; and return,32,計算機(jī)系統(tǒng)I-第9章,FirstChar Algorithm,33,計算機(jī)系統(tǒng)I-第9章,FirstChar Implementat
19、ion,; FirstChar: subroutine to find first occurrence of a charFirstCharSTR3, FCR3; save registersSTR4, FCR4; save original charNOTR4, R0; negate R0 for comparisonsADDR4, R4, #1ADDR2, R1, #0; initialize ptr to beginning of stringFC1LDRR3, R2, #0; read characterBRzFC2; if null, were doneADDR3, R3, R4;
20、 see if matches input charBRzFC2; if yes, were doneADDR2, R2, #1; increment pointerBRnzpFC1FC2LDR3, FCR3; restore registersLDR4, FCR4; RET; and return,34,計算機(jī)系統(tǒng)I-第9章,標(biāo)量積的定義:DP=sum (Xi * Yi) for i=0 to n-1 調(diào)用子程序PROD完成:Multiply R4 by R5 and add the result to R0,例子:計算標(biāo)量積,數(shù)據(jù)區(qū)定義 COUNT.FILL #6 X.FILL #31 ;
21、 X0 .FILL #-12; X1 .FILL #65; X2 .FILL #27; X3 .FILL #34; X4 .FILL #-43; X5 Y.FILL #22; Y0 .FILL #-8; Y1 .FILL #-57; Y2 .FILL #33; Y3 .FILL #70; Y4 .FILL #-53; Y5 DOTPROD.FILL #0,35,計算機(jī)系統(tǒng)I-第9章,.ORIG x3000 AND R0,R0,#0 ; Zero dot product LEA R2,X LEA R3,Y LD R1,COUNT ADD R1,R1, #-1 ; Start i at n-1 B
22、RN DONE ; Check for n=0 ADD R2,R2,R1 ADD R3,R3,R1 LOOPLDR R4,R2, #0 LDR R5,R3, #0 JSR PROD ADD R2,R2, #-1 ADD R3,R3, #-1 ADD R1,R1, #-1 BRZP LOOP DONEST R0,DOTPROD HALT,Example code:,36,計算機(jī)系統(tǒng)I-第9章,PRODST R7,PSAVER7 ST R6,PSAVER6 AND R6,R6, #0 ADD R6,R6, #1 ; R6 is mask reg PLOOP AND R7,R6,R4 BRZ PZE
23、RO ADD R0,R0,R5 PZEROADD R5,R5,R5 ; Double R5 (shift left 1) ADD R6,R6,R6 ; Double R6 (shift left 1) BRNP PLOOP LD R6,PSAVER6 LD R7,PSAVER7 RET PSAVER6.FILL #0 PSAVER7.FILL #0,課后研究以下乘法代碼,適合負(fù)數(shù)乘法嗎,自己仿真運行下,37,計算機(jī)系統(tǒng)I-第9章,.orig x3000 LEA R0,VECTOR LD R1,COUNT JSR SUMVEC LD R1,COUNT JSR DIVIDE ST R4,AVG HALT COUNT.FILL#14 VECTOR.FILL#63; VEC0 .FILL#21; VEC1 .FILL#-90; VEC2 .FILL#32; VEC3 .FILL#312; VEC4 .FILL#114; VEC5 .FILL#20; VEC6 .FILL#-3; VEC7 .FILL#201; VEC8 .FILL#34; VEC9 .FILL#21; VEC10 .FILL#111; VEC11 .FILL#53; VEC12 .FILL#601
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 投工投勞安全協(xié)議書范本
- 項目供貨措施方案(3篇)
- 門衛(wèi)室移開協(xié)議書范本
- 農(nóng)藥經(jīng)營協(xié)議書模板范本
- 泵房自控方案模板
- 海建筑拆除方案
- 防爆接線維修方案
- 煉鐵廠實習(xí)報告范文-1
- 鋁箔項目設(shè)計方案
- 個人土地出售協(xié)議書范本
- 2025春季學(xué)期國開電大本科《管理英語4》一平臺機(jī)考真題及答案(第四套)
- 2025上海紡織工業(yè)職工大學(xué)教師招聘考試試題
- DB13T 2770-2018 焊接熔深檢測方法
- 電力現(xiàn)貨市場基礎(chǔ)知識
- 網(wǎng)絡(luò)題庫財務(wù)會計知識競賽1000題(僅供自行學(xué)習(xí)使用)
- 員工轉(zhuǎn)崗培訓(xùn)管理制度
- 放電纜勞務(wù)協(xié)議書
- 2023-2024學(xué)年江蘇省蘇州市姑蘇區(qū)初一(上)道法期末試題及答案
- 新《職業(yè)病危害工程防護(hù)》考試復(fù)習(xí)題庫(濃縮500題)
- 倉儲管理剖析
- JJF(遼) 556-2024 轉(zhuǎn)速試驗機(jī)校準(zhǔn)規(guī)范
評論
0/150
提交評論