計算機系統(tǒng)I-第9章課件_第1頁
計算機系統(tǒng)I-第9章課件_第2頁
計算機系統(tǒng)I-第9章課件_第3頁
計算機系統(tǒng)I-第9章課件_第4頁
計算機系統(tǒng)I-第9章課件_第5頁
已閱讀5頁,還剩37頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、計算機系統(tǒng) I,第九章:TRAP 程序和子程序,1,計算機系統(tǒng)I-第9章,系統(tǒng)調用于實現特定操作,這些操作需要程序員具備某些不熟悉專業(yè)領域的知識,或者為了安全性而需要保護的操作。 專業(yè)性:比如對外部設備操作時需要了解外部設備的工作原理,內部的I/O寄存器以及對它們的操作順序。這些都和具體硬件相關,不同的外部設備可能要求不一樣。 安全性:多個用戶程序可能共享某個外部設備資源,用戶編寫程序直接操作外部設備,一個小錯誤可能會影響到很多其它的用戶程序。,系統(tǒng)調用,2,計算機系統(tǒng)I-第9章,并不是每個程序員知道(或者想知道)這個層次的技術細節(jié)。 解決方法:提供服務子程序或者系統(tǒng)調用(通常作為操作系統(tǒng)的一

2、部分) ,用戶通過這些子程序或者系統(tǒng)調用來安全和方便的實現底層操作。,3,計算機系統(tǒng)I-第9章,用戶程序使用系統(tǒng)調用 操作系統(tǒng)執(zhí)行調用操作 結束后將控制權返回給用戶程序 在LC-3里,通過TRAP 機制來實現系統(tǒng)調用。,系統(tǒng)調用,4,計算機系統(tǒng)I-第9章,包括一組服務子程序 操作系統(tǒng)的一部分 服務程序起始固定的內存地址 LC-3中實現的服務子程序位于系統(tǒng)代碼區(qū)(below x3000) 最多支持 256個服務子程序 起始地址表 存放在 x0000 到 x00FF 的內存中(256x16bit) 。每16位存放一個系統(tǒng)服務子程序的起始地址。 在別的系統(tǒng)中可能稱為為“系統(tǒng)控制塊”,或 “陷入矢量表

3、”,LC-3 TRAP 機制,5,計算機系統(tǒng)I-第9章,TRAP 指令 用戶程序通過TRAP指令來實現系統(tǒng)調用。操作系統(tǒng)將以用戶程序身份執(zhí)行某個特定的服務程序,并在執(zhí)行結束后將控制權返回 LC-3: TRAP指令通過指令中8-bit的 trap vector來指示調用256個服務子程序中的哪一個。 鏈接回到用戶程序 提供從服務程序返回到用戶程序的機制,LC-3 TRAP 機制,6,計算機系統(tǒng)I-第9章,Trap 向量 指示調用哪個系統(tǒng)服務程序(x00-xff) 通過8位trapvect8索引起始地址表,獲得對應系統(tǒng)調用的入口地址 LC-3實現的方法:起始地址表存放在內存的 0 x0000 0

4、x00FF處,8-bit trap vector 通過高位0擴展成16位的內存地址,該內存地址處存放的就是相應調用的入口地址 如何執(zhí)行 從起始地址表查找服務程序地址,加載到PC中 如何返回 將下一條指令的地址(當前的PC值)保存到R7,TRAP指令,7,計算機系統(tǒng)I-第9章,TRAP,注: PC在指令獲取階段已經執(zhí)行加1操作指向了當前指令的下一條指令,8,計算機系統(tǒng)I-第9章,如何返回用戶程序?即回到trap指令的下一條指令繼續(xù)運行 執(zhí)行trap指令時將PC保存在R7 服務程序使用JMP R7就可以返回到用戶程序 LC-3 匯編語言使用RET (return) 助記符來取代 “JMP R7”。

5、 因此:必須保證服務程序沒有改變R7,否則無法返回。,RET (JMP R7),9,計算機系統(tǒng)I-第9章,TRAP 機制流程,查找開始地址 轉換到服務程序 Ret (JMP R7),10,計算機系統(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: 輸入大寫字母轉換為小寫字母,輸入7結束,11,計算機系統(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,計算機系統(tǒng)I-第9章,TRAP Routines and their Assembler Names,13,計算機系統(tǒng)I-第9章,在以下情況,必須要保存寄存器的內容: 如果該寄存器的內容會被系統(tǒng)調用使用 并在后續(xù)操作中將修改該寄存器. 誰保存? 調用服務程序的程序(調用者保存)? 需要知道系統(tǒng)調用會修改或使用那些寄存器什么,但實際可能不知道服務程序會使用和修改哪些寄存器 被調用的服務程序(被調用者保存)? 知道自己修改的內容,但不知道調用程序后面需要什么,寄存器內容的保存和恢復,14,計算機系統(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,計算機系統(tǒng)I-第9章,被調用者保存- “callee-save” 在開始之前,保存可能被修改的寄存器內容(除非調用程序預先知道修改值) 在返回前,恢復這些寄存器內容 調用者保存- “caller-save” 針對將被調用程序或被調用程序(如果知道的話)修改的寄存器,如果其內容后面需要,將其內容保存下來 在TRAP之前保存R7 在TRAP x23 (input character) 之前保存R0 或者避免使用那些寄存器 保存在哪里:內存,寄存器內容的保存和恢復,16,計算機系統(tǒng)I-第9章,一個服務程

10、序能否調用另一個服務程序? 如果可以的話,調用程序需要做什么?,Question,17,計算機系統(tǒng)I-第9章,用戶代碼,服務程序提供3個主要功能: 程序員與系統(tǒng)相關的細節(jié)隔離 頻繁使用的代碼只需要寫一次 保護系統(tǒng)資源免受惡意/笨拙的程序員影響 對用戶程序是否可以提供類似的功能?,18,計算機系統(tǒng)I-第9章,子程序,19,計算機系統(tǒng)I-第9章,一個子程序是一個滿足以下條件的程序片段: 在用戶空間運行 lives in user space 執(zhí)行一個預定義好的任務,被另一個用戶程序調用 執(zhí)行完畢后,將控制權返回給調用程序 與服務程序類似,但不是操作系統(tǒng)的一部分 不與受保護的硬件資源打交道,不需要特

11、權 為什么需要子程序? 重用有用的(調試好的?。┐a 在多個程序員之間劃分任務 使用供應商提供的代碼庫,子程序,20,計算機系統(tǒng)I-第9章,保存當前的PC(下一條指令的地址)到R7,跳到一個指定的位置(PC相對尋址)。 保存返回地址叫做 “l(fā)inking” 目標地址是 PC-relative (PC + Sext(IR10:0) -1024+1023 第11個bit位定義尋址模式: 如果為1,PC相對尋址:目標地址 = PC + Sext(IR10:0) 如果為0,寄存器尋址: 目標地址 = 寄存器內容IR8:6 能用BRnzp 指令取代嗎?,JSR指令,21,計算機系統(tǒng)I-第9章,JSR,N

12、OTE: PC has already been incrementedduring instruction fetch stage.,22,計算機系統(tǒng)I-第9章,和JSR相似,除了尋址模式不同 目標地址是寄存器基址 第11個bit位定義了尋址模式 思考:JSSR具備的什么特征是JSR指令沒有的?,JSRR Instruction,23,計算機系統(tǒng)I-第9章,JSRR,NOTE: PC has already been incrementedduring instruction fetch stage.,24,計算機系統(tǒng)I-第9章,和系統(tǒng)調用類似 RET (JMP R7),子程序返回,25,計

13、算機系統(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的數求反+1,26,計算機系統(tǒng)I-第9章,

14、參數 傳遞給子程序的值,稱為參數 子程序需要利用該值來完成任務 Examples: 在 2sComp 程序中, R0存放需要取負+1的數 在輸出服務程序中,R0存放需要被打印的字符 在 PUTS服務程序中, R0存放打印字符串的起始地址 返回值 由子程序輸出的值,稱為子程序的返回值, 是子程序的計算結果 Examples: 在2sComp程序中,取負+1的結果保存在 R0 在GETC服務程序中,由鍵盤輸入的字符保存在 R0,子程序的參數及返回值,27,計算機系統(tǒng)I-第9章,為了使用子程序,程序員必須知道: 子程序調用地址(子程序標號:入口指令的標號) 功能(what does it do?)

15、注:程序員不需要知道子程序如何工作,但需要知道子程序運行后機器的狀態(tài)會發(fā)生什么變化 參數(怎么傳遞數據給子程序,如果需要) 返回值 (怎么獲取子程序的計算結果,如果有的話),如何使用子程序,28,計算機系統(tǒng)I-第9章,由于子程序和服務程序類似,如果有必要的話,也需要保存和恢復寄存器內容 一般情況使用“被調用者模式”,除了返回值 保存任何子程序內部將修改,但子程序返回時不應該改變的值 一般情況下,返回后恢復輸入的參數為初始值(除非被返回值修改) 注意: 如果調用任何子程序或服務程序,必須保存R7 否則,將不能返回調用程序,保存和恢復寄存器,29,計算機系統(tǒng)I-第9章,編寫一個子程序 FirstC

16、har ,實現以下功能: 找到一個給定字符(字符ASCII碼保存在R0 )在一個字符串( R1 指向字符串首地址)中第一次出現的位置;返回所在內存地址信息在R2 (內存位置如果指向NULL表示沒有該字符出現)。 使用FirstChar來實現算法CountChar,實現以下功能: 計算一個給定字符(保存在R0 )在一個字符串( R1 指向)中的出現次數;結果保存在在R2。 可以在不知道FirstChar實現的情況下寫CountChar算法。,Example,30,計算機系統(tǒng)I-第9章,CountChar Algorithm (using FirstChar),31,計算機系統(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,計算機系統(tǒng)I-第9章,FirstChar Algorithm,33,計算機系統(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,計算機系統(tǒng)I-第9章,標量積的定義:DP=sum (Xi * Yi) for i=0 to n-1 調用子程序PROD完成:Multiply R4 by R5 and add the result to R0,例子:計算標量積,數據區(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,計算機系統(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,計算機系統(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,課后研究以下乘法代碼,適合負數乘法嗎,自己仿真運行下,37,計算機系統(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)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論