計算機系統(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頁,還剩38頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

計算機系統(tǒng)I第9章第一頁,共43頁。系統(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)用第二頁,共43頁。并不是每個程序員知道(或者想知道)這個層次的技術(shù)細(xì)節(jié)。解決方法:提供服務(wù)子程序或者系統(tǒng)調(diào)用(通常作為操作系統(tǒng)的一部分),用戶通過這些子程序或者系統(tǒng)調(diào)用來安全和方便的實現(xiàn)底層操作。第三頁,共43頁。用戶程序使用系統(tǒng)調(diào)用操作系統(tǒng)執(zhí)行調(diào)用操作結(jié)束后將控制權(quán)返回給用戶程序在LC-3里,通過TRAP機制來實現(xiàn)系統(tǒng)調(diào)用。系統(tǒng)調(diào)用第四頁,共43頁。包括一組服務(wù)子程序操作系統(tǒng)的一部分–服務(wù)程序起始固定的內(nèi)存地址LC-3中實現(xiàn)的服務(wù)子程序位于系統(tǒng)代碼區(qū)(belowx3000)最多支持256個服務(wù)子程序起始地址表存放在

x0000

x00FF

的內(nèi)存中(256x16bit)。每16位存放一個系統(tǒng)服務(wù)子程序的起始地址。在別的系統(tǒng)中可能稱為為“系統(tǒng)控制塊”,或“陷入矢量表”LC-3TRAP機制第五頁,共43頁。TRAP指令用戶程序通過TRAP指令來實現(xiàn)系統(tǒng)調(diào)用。操作系統(tǒng)將以用戶程序身份執(zhí)行某個特定的服務(wù)程序,并在執(zhí)行結(jié)束后將控制權(quán)返回LC-3:TRAP指令通過指令中8-bit的trapvector來指示調(diào)用256個服務(wù)子程序中的哪一個。鏈接回到用戶程序提供從服務(wù)程序返回到用戶程序的機制LC-3TRAP機制第六頁,共43頁。Trap向量指示調(diào)用哪個系統(tǒng)服務(wù)程序(x00-xff)通過8位trapvect8索引起始地址表,獲得對應(yīng)系統(tǒng)調(diào)用的入口地址LC-3實現(xiàn)的方法:

起始地址表存放在內(nèi)存的0x0000–0x00FF處,8-bittrapvector通過高位0擴展成16位的內(nèi)存地址,該內(nèi)存地址處存放的就是相應(yīng)調(diào)用的入口地址如何執(zhí)行從起始地址表查找服務(wù)程序地址,加載到PC中如何返回將下一條指令的地址(當(dāng)前的PC值)保存到R7TRAP指令第七頁,共43頁。TRAP注:PC在指令獲取階段已經(jīng)執(zhí)行加1操作指向了當(dāng)前指令的下一條指令第八頁,共43頁。如何返回用戶程序?即回到trap指令的下一條指令繼續(xù)運行執(zhí)行trap指令時將PC保存在R7服務(wù)程序使用JMPR7就可以返回到用戶程序LC-3匯編語言使用RET(return)助記符來取代“JMPR7”。因此:必須保證服務(wù)程序沒有改變R7,否則無法返回。RET(JMPR7)第九頁,共43頁。TRAP機制流程查找開始地址轉(zhuǎn)換到服務(wù)程序Ret(JMPR7)第十頁,共43頁。

.ORIGx3000 LD R2,TERM ;LoadnegativeASCII‘7’

LD R3,ASCII ;LoadASCIIdifference

AGAIN TRAP x23 ;inputcharacter

ADD R1,R2,R0 ;Testforterminate

BRz EXIT ;Exitifdone

ADD R0,R0,R3 ;Changetolowercase

TRAP x21 ;Outputtomonitor...

BRnzpAGAIN ;...againandagain...

TERM .FILL xFFC9 ;-‘7’

ASCII .FILL x0020 ;lowercasebit

EXIT TRAP x25 ;halt

.ENDExample:輸入大寫字母轉(zhuǎn)換為小寫字母,輸入’7’結(jié)束第十一頁,共43頁。 .ORIGx0430 ;syscalladdress

ST R7,SaveR7 ;saveR7&R1

ST R1,SaveR1

;-----Writecharacter

TryWrite LDI R1,CRTSR ;getstatus

BRzp TryWrite ;lookforbit15on

WriteIt STI R0,CRTDR ;writechar

;-----ReturnfromTRAP

Return LD R1,SaveR1 ;restoreR1&R7

LD R7,SaveR7

RET ;backtouser

CRTSR .FILL xF3FC

CRTDR .FILL xF3FF

SaveR1 .FILL 0

SaveR7 .FILL 0

.ENDExample:OutputServiceRoutinestoredintable,

locationx21第十二頁,共43頁。TRAPRoutinesandtheirAssemblerNamesvectorsymbolroutinex20GETCreadasinglecharacter(noecho)x21OUToutputacharactertothemonitorx22PUTSwriteastringtotheconsolex23INprintprompttoconsole,

readandechocharacterfromkeyboardx25HALThalttheprogram第十三頁,共43頁。在以下情況,必須要保存寄存器的內(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ù)第十四頁,共43頁。

LEA R3,Binary

LD R6,ASCII ;char->digittemplate LD R7,COUNT ;initializeto10

AGAIN TRAP x23 ;Getchar

ADD R0,R0,R6 ;converttonumber

STR R0,R3,#0 ;storenumber

ADD R3,R3,#1 ;incrpointer

ADD R7,R7,-1 ;decrcounter

BRp AGAIN ;more?

BRnzpNEXT

ASCII .FILL xFFD0

COUNT .FILL #10

Binary .BLKW#10ExampleWhat’swrongwiththisroutine?

WhathappenstoR7?第十五頁,共43頁。被調(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在TRAPx23(inputcharacter)之前保存R0或者避免使用那些寄存器保存在哪里:內(nèi)存寄存器內(nèi)容的保存和恢復(fù)第十六頁,共43頁。一個服務(wù)程序能否調(diào)用另一個服務(wù)程序?如果可以的話,調(diào)用程序需要做什么?Question第十七頁,共43頁。用戶代碼服務(wù)程序提供3個主要功能:程序員與系統(tǒng)相關(guān)的細(xì)節(jié)隔離頻繁使用的代碼只需要寫一次保護(hù)系統(tǒng)資源免受惡意/笨拙的程序員影響對用戶程序是否可以提供類似的功能?第十八頁,共43頁。子程序第十九頁,共43頁。一個子程序是一個滿足以下條件的程序片段:在用戶空間運行l(wèi)ivesinuserspace執(zhí)行一個預(yù)定義好的任務(wù),被另一個用戶程序調(diào)用執(zhí)行完畢后,將控制權(quán)返回給調(diào)用程序與服務(wù)程序類似,但不是操作系統(tǒng)的一部分不與受保護(hù)的硬件資源打交道,不需要特權(quán)為什么需要子程序?重用有用的(調(diào)試好的?。┐a在多個程序員之間劃分任務(wù)使用供應(yīng)商提供的代碼庫子程序第二十頁,共43頁。保存當(dāng)前的PC(下一條指令的地址)到R7,跳到一個指定的位置(PC相對尋址)。保存返回地址叫做“l(fā)inking”目標(biāo)地址是PC-relative(PC+Sext(IR[10:0]))-1024~+1023第11個bit位定義尋址模式:如果為1,PC相對尋址:目標(biāo)地址=PC+Sext(IR[10:0])如果為0,寄存器尋址:目標(biāo)地址=寄存器內(nèi)容IR[8:6]能用BRnzp指令取代嗎?JSR指令第二十一頁,共43頁。JSRNOTE:PChasalreadybeenincremented

duringinstructionfetchstage.第二十二頁,共43頁。和JSR相似,除了尋址模式不同目標(biāo)地址是寄存器基址第11個bit位定義了尋址模式思考:JSSR具備的什么特征是JSR指令沒有的?JSRRInstruction第二十三頁,共43頁。JSRRNOTE:PChasalreadybeenincremented

duringinstructionfetchstage.第二十四頁,共43頁。和系統(tǒng)調(diào)用類似RET(JMPR7)子程序返回第二十五頁,共43頁。2sComp NOT R0,R0 ;flipbits

ADD R0,R0,#1 ;addone

RET ;returntocallerTocallfromaprogram(within1024instructions):;needtocomputeR4=R1-R3

ADD R0,R3,#0 ;copyR3toR0

JSR 2sComp ;negate

ADD R4,R1,R0 ;addtoR1

...Note:R0是否需要保存?思考:子程序定義的位置?Example:對R0的數(shù)求反+1第二十六頁,共43頁。參數(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ù)及返回值第二十七頁,共43頁。為了使用子程序,程序員必須知道:子程序調(diào)用地址(子程序標(biāo)號:入口指令的標(biāo)號)功能(whatdoesitdo?)注:程序員不需要知道子程序如何工作,但需要知道子程序運行后機器的狀態(tài)會發(fā)生什么變化參數(shù)(怎么傳遞數(shù)據(jù)給子程序,如果需要)返回值(怎么獲取子程序的計算結(jié)果,如果有的話)如何使用子程序第二十八頁,共43頁。由于子程序和服務(wù)程序類似,如果有必要的話,也需要保存和恢復(fù)寄存器內(nèi)容一般情況使用“被調(diào)用者模式”,除了返回值保存任何子程序內(nèi)部將修改,但子程序返回時不應(yīng)該改變的值一般情況下,返回后恢復(fù)輸入的參數(shù)為初始值(除非被返回值修改)注意:如果調(diào)用任何子程序或服務(wù)程序,必須保存R7否則,將不能返回調(diào)用程序保存和恢復(fù)寄存器第二十九頁,共43頁。編寫一個子程序FirstChar,實現(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第三十頁,共43頁。CountCharAlgorithm(usingFirstChar)saveregscallFirstCharR3<-M(R2)R3=0R1<-R2+1restoreregsreturnnoyessaveR7,

sincewe’reusingJSR第三十一頁,共43頁。CountCharImplementation;CountChar:subroutinetocountoccurrencesofachar

CountChar

ST R3,CCR3 ;saveregisters

ST R4,CCR4

ST R7,CCR7 ;JSRaltersR7

ST R1,CCR1 ;saveoriginalstringptr

AND R4,R4,#0 ;initializecounttozero

CC1 JSR FirstChar ;findnextoccurrence(ptrinR2)

LDR R3,R2,#0 ;seeifcharornull

BRz CC2 ;ifnull,nomorechars

ADD R4,R4,#1 ;incrementcount

ADD R1,R2,#1 ;pointtonextcharinstring BRnzp CC1

CC2 ADD R2,R4,#0

;movereturnval(count)toR2

LD R3,CCR3 ;restoreregs

LD R4,CCR4

LD R1,CCR1

LD R7,CCR7

RET ;andreturn第三十二頁,共43頁。FirstCharAlgorithmsaveregsR2<-R1R3<-M(R2)R3=0R3=R0R2<-R2+1restoreregsreturnnonoyesyes第三十三頁,共43頁。FirstCharImplementation;FirstChar:subroutinetofindfirstoccurrenceofachar

FirstChar

ST R3,FCR3 ;saveregisters

ST R4,FCR4 ;saveoriginalchar

NOT R4,R0 ;negateR0forcomparisons

ADD R4,R4,#1

ADD R2,R1,#0 ;initializeptrtobeginningofstring

FC1 LDR R3,R2,#0 ;readcharacter

BRz FC2 ;ifnull,we’redone

ADD R3,R3,R4 ;seeifmatchesinputchar

BRz FC2 ;ifyes,we’redone

ADD R2,R2,#1 ;incrementpointer

BRnzp FC1

FC2 LD R3,FCR3 ;restoreregisters

LD R4,FCR4 ;

RET ;andreturn第三十四頁,共43頁。標(biāo)量積的定義:DP=sum(X[i]*Y[i])fori=0ton-1調(diào)用子程序PROD完成:MultiplyR4byR5andaddtheresulttoR0例子:計算標(biāo)量積數(shù)據(jù)區(qū)定義

COUNT .FILL#6X .FILL#31 ;X[0] .FILL#-12 ;X[1] .FILL#65 ;X[2] .FILL#27 ;X[3] .FILL#34 ;X[4] .FILL#-43 ;X[5]Y .FILL#22 ;Y[0] .FILL#-8 ;Y[1] .FILL#-57 ;Y[2] .FILL#33 ;Y[3] .FILL#70 ;Y[4] .FILL#-53 ;Y[5]DOTPROD .FILL#0第三十五頁,共43頁。 .ORIGx3000 ANDR0,R0,#0;Zerodotproduct LEAR2,X LEAR3,Y LDR1,COUNT ADDR1,R1,#-1;Startiatn-1 BRNDONE;Checkforn=0 ADDR2,R2,R1 ADDR3,R3,R1 LOOP LDRR4,R2,#0 LDRR5,R3,#0 JSRPROD ADDR2,R2,#-1 ADDR3,R3,#-1 ADDR1,R1,#-1 BRZPLOOPDONE STR0,DOTPROD HALTExamplecode:第三十六頁,共43頁。PROD STR7,PSAVER7 STR6,PSAVER6 ANDR6,R6,#0 ADDR6,R6,#1;R6ismaskregPLOOPANDR7,R6,R4 BRZPZERO ADDR0,R0,R5PZERO ADDR5,R5,R5;DoubleR5(shiftleft1) ADDR6,R6,R6;DoubleR6(shiftleft1) BRNPPLOOP LDR6,PSAVER6 LDR7,PSAVER7 RETPSAVER6 .FILL#0PSAVER7 .FILL#0課后研究以下乘法代碼,適合負(fù)數(shù)乘法嗎,自己仿真運行下第三十七頁,共43頁。 .origx3000 LEAR0,VECTOR LDR1,COUNT JSRSUMVEC LDR1,COUNT JSRDIVIDE STR4,AVG HALTCOUNT .FILL #14VECTOR .FILL #63 ;VEC[0] .FILL #21 ;VEC[1] .FILL #-90 ;VEC[2] .FILL #32 ;VEC[3] .FILL #312 ;VEC[4] .FILL #114 ;VEC[5] .FILL #20 ;VEC[6] .FILL #-3 ;VEC[7] .FILL #201 ;VEC[8] .FILL #34 ;VEC[9] .FILL #21 ;VEC[10] .FILL #111 ;VEC[11] .FILL #53 ;VEC[12] .FILL #601 ;VEC[13] AVG .FILL #0 .end求平均-

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論