- 1、本文档共3页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
100学年度下学期 金门大学 资工系二年级 系统程式 期末考 出题者
100學年度下學期 金門大學 資工系二年級 系統程式 期末考 出題者 : 陳鍾誠
學號 : 姓名 : 分數 :
1. 說明題 (共20%)
請說明何謂堆疊機?何謂暫存器機?並比較兩者之不同點 (5%)
暫存器機將暫存器代號編入指令當中,以指定進行運算的暫存器。堆疊機則是利用將參數推入堆疊之後,再從堆疊中取出適當數量的元數進行運算,因此運算指令通常沒有參數。兩者的不同點在於暫存器機有明確數量的暫存器,而堆疊機則改用一個堆疊取代這些暫存器。
堆疊機程式
暫存器機
PUSH 3
PUSH 5
PUSH 6
ADD
SUB
LD R1, 3
LD R2, 5
LD R3, 6
ADD R4, R3, R2
SUB R5, R4, R1
請說明何謂專用輸出入指令?何謂記憶體映射輸出入 (Memory Mapped IO)?並比較兩者之不同點 (5%)
專用輸出入指令乃是專門設計用來進行輸出入的組合與言指令,像是 IN, OUT, TEST 等等。記憶體映射輸出入則是透過記憶體存取指令 (LD, ST, …) 進行輸出入的一種方法,輸出入裝置會解讀位址匯流排的內容,以做出對應的輸出入動作。 兩者的不同在於記憶體映射輸出入可以節省指令數量,而且可以直接用 C 語言撰寫輸出入程式。
請說明何謂輪詢?何謂中斷?兩者在輸出入系統中的運作原理有何不同? (10%)
輪詢是透過不斷輪流詢問周邊裝置的方式,達成監控輸出入裝置的目地。而中斷則需要硬體與 CPU 相互配合,在有輸出入事件發生時,透過中斷控制器通知 CPU,觸發中斷向量指令以處理輸出入。
輪詢方法較為簡單,但會耗費很多時間在詢問裝置的動作上。
2. 說明題 (共20%)
請說明何謂排程問題 ?(Scheduling Problem) (5%)
在多工作業系統中,當一個行程被中斷或因輸出入而暫停後,接下來應該安排哪個行程執行的問題,稱為排程問題。
常見的排程方法有:先到先做,循環分時排程等等。
請說明何謂基底界限暫存器? (Base-Limit Register) (5%)
基底界限暫存器是一種記憶體管理單元 (MMU),透過基底暫存器達到重定位功能,讓程式不需要在載入時進行重定位,而界限暫存器則可以用來限制記憶體存取的範圍,避免程式存取超過範圍的記憶空間,造成系統記憶體被破壞,以防止駭客程式的非法存取行為。
請說明編譯器可分為哪些階段?並解釋這些階段的功能各為何? (10%)
編譯器大致可分為「掃描、剖析、語意分析、中間碼產生、最佳化、目的碼產生」等六大階段。
掃描是將程式分解為一個一個的詞彙 (Token),而剖析則是將這些詞彙轉換為語法樹的結構,語意分析是為語法樹標記型態並檢查型態的相容性,中間碼產生則是將語法樹轉換為中間碼,最佳化會縮短程式碼並提升程式效能,而目的碼產生則會產生目標的組合語言或機器碼。 學號 : 姓名 :
BNF 語法 (共20%)
請根據下列 BNF語法畫出 3+((8*4)-2) 的剖析樹 (10%)
E = N | E [+-*/] E | (E [+-*/] E)
N = [0-9]+
請問上題 3 (a) 的語法有沒有歧義性,若有,請舉一範例並畫出兩棵具有歧義性的語法樹以說明歧義性之所在 (10%)
語法 3 (a) 有岐義性,例如 3-1-2 可能有下列兩種剖析方式,分別代表 (3-1)-2 = 0 與 3-(1-2) = 4。
4. 程式解讀 (共20%)
請說明下列堆疊機指令的執行過程與結果 (10%)
PUSH 8
PUSH 2
PUSH 3
ADD
SUB
請說明下列 C 語言程式的意義 (10%)(註:可參考第五題的圖形與表格解讀)
#define BYTE unsigned char // 定義 BYTE
#define UINT16 unsigned short //定義16bit無號整數
#define SEG7_REG (*(volatile BYTE*) 0xFFFFFF00)
// 定義七段顯示器的記憶體映設存取方法
// 說明:(volatile BYTE*) 0xFFFFFF00 代表將0xFFFFFF00 位址視為一 BYTE 指標,而外部的 * 則代表存取此指標所指的 BYTE 內容。
#define KEY (*(volatile UINT16*) 0xFFFFFF01)
// 定義鍵盤按鍵的記憶體映設存取方法
// 說明:(volatile BYTE*) 0
文档评论(0)