資源描述:
《過程調(diào)用、中斷及異?!酚蓵T上傳分享,免費在線閱讀,更多相關內(nèi)容在行業(yè)資料-天天文庫。
1、過程調(diào)用類型處理器支持兩種類型的過程調(diào)用:[1]CALL與RET指令[2]ENTER與LEAVE指令,配合CALL與RET指令這兩種過程調(diào)用機制都使用了程序棧(通常簡稱為“棧”)保存調(diào)用過程的狀態(tài)、傳遞參數(shù)到被調(diào)過程,并為當前執(zhí)行的過程存儲局部變量。棧棧是一組連續(xù)的內(nèi)存單元(見圖6-1),它位于SS寄存器指定的段中,最長可達4GBytes(即段的最大長度)。。。PUSH指令將數(shù)據(jù)壓入棧中,ESP寄存器遞減,寫入項位于棧頂。。。POP指令讀取棧頂?shù)臄?shù)據(jù),ESP寄存器遞增。程序或操作系統(tǒng)可以設置多個棧,棧的最大數(shù)量取決于段和可用的物理內(nèi)存。當設置了多
2、個棧時,同一時間只有一個?!斍皸!强捎玫?,當前棧所在的段由SS寄存器指定。所有的棧操作都是在當前棧進行的,比如,將ESP寄存器中的值作為內(nèi)存地址時,它指向的是當前棧的一個地址。圖6-1棧結(jié)構(gòu)[1]設定一個棧。。設定一個棧段。。將此棧段的段選擇器載入SS寄存器(使用MOV、POP或LSS指令)。。載入棧指針到ESP寄存器(使用MOV、POP或LSS指令)。[2]棧對齊棧指針可以是16位(字)或32位(雙字)邊界,這取決于棧段的寬度,而棧段的寬度取決于段描述符中的D標志。處理器并不會檢查棧指針是否對齊,這是運行在處理器上的程序和任務的職責,未
3、對齊的棧指針會極大地降低性能,有時候還會導致程序故障。[3]棧訪問的地址大小屬性隱性地使用棧的指令(比如PUSH和POP)有兩種地址大小屬性,16位或32位。顯性地址的屬性取決于當前代碼段的D標志和是否有67H地址大小前綴。棧頂?shù)牡刂反笮傩詻Q定了在棧訪問中使用SP還是ESP。[4]過程鏈接信息處理器為過程鏈接提供了兩種指針:棧幀基址指針和返回指令指針。。。棧被分為多個幀,每一個棧幀都可以有局部變量、過程鏈接信息和傳遞到其它過程的參數(shù)。棧幀基址指針(包含在EBP寄存器中)是棧幀內(nèi)部固定的參考點。。。在轉(zhuǎn)移到被調(diào)過程的第一條指令之前,CALL指令會
4、把EIP寄存器中的地址push到當前棧,這一地址稱為返回指令指針。處理器并不會跟蹤返回指令指針的位置,程序員必須在執(zhí)行RET指令之前確保棧指針指向返回指令指針。使用CALL與RET調(diào)用過程CALL指令可以跳轉(zhuǎn)到當前代碼段(近調(diào)用)或其它代碼段(遠調(diào)用)的過程。近調(diào)用通常用于訪問當前運行的程序或任務的本地過程,遠調(diào)用通常用于訪問操作系統(tǒng)過程或不同任務中的程序。RET指令與CALL指令匹配。[1]近調(diào)用與返回操作CALL:。。將EIP寄存器的當前值入棧。。載入被調(diào)過程的偏移到EIP寄存器。。開始執(zhí)行被調(diào)過程RET:。。pop棧頂值(返回指令指針)到E
5、IP寄存器。。如果RET指令有可選的n參數(shù),遞增棧指針(由n參數(shù)指定的字節(jié)數(shù))。?;謴驼{(diào)用過程的運行[2]遠調(diào)用與返回操作CALL:。。將CS寄存器的當前值入棧。。將EIP寄存器的當前值入棧。。載入被調(diào)過程的段選擇器到CS寄存器。。載入被調(diào)過程的偏移到EIP寄存器RET:。。pop棧頂值(返回指令指針)到EIP寄存器。。pop棧頂值(返回的代碼段的段選擇器)到CS寄存器。。如果RET指令有可選的n參數(shù),遞增棧指針(由n參數(shù)指定的字節(jié)數(shù))。?;謴驼{(diào)用過程的運行[3]參數(shù)傳遞在過程之間傳遞參數(shù)有三種方式:通用寄存器、參數(shù)表或者棧。[4]保存過程狀態(tài)信
6、息處理器不會在調(diào)用過程時保存通用寄存器、段寄存器或EFLAGS寄存器的內(nèi)容,所以必須顯性地保存需要的值。PUSHA與POPA指令能幫助保存和恢復通用寄存器的內(nèi)容。PUSHA按照以下順序?qū)⑼ㄓ眉拇嫫鞯闹等霔#篍AX,ECX,EDX,EBX,ESP(執(zhí)行PUSHA指令之前的值),EBP,ESI和EDI。POPA指令恢復PUSHA指令保存的值(除了ESP值)。PUSHF指令將EFLAGS寄存器的低字入棧,而PUSHFD指令將整個EFLAGS寄存器入棧。[5]調(diào)用到其它權(quán)級IA-32架構(gòu)的保護機制提供四種權(quán)限等級,編號0到3,數(shù)字越大,權(quán)限越小。圖6-3
7、.保護等級中斷與異常處理器提供兩種機制中斷程序運行:。。中斷是由I/O設備觸發(fā)的異步事件。。異常是當處理器檢查到一個或多個預定義條件成立時觸發(fā)的同步事件。IA-32架構(gòu)定義了三種異常類型:故障、陷阱與終止。分程序結(jié)構(gòu)語言的過程調(diào)用關于ENTER與LEAVE指令,略。