LC-3是一個簡單的指令集,字符的輸入輸出,也比較簡單,即通過中斷的方式,鍵盤輸入產生中斷,有一些標誌位,標誌着鍵盤是否可用,顯示器是否可用,下面介紹LC-3中的輸入輸出
4個寄存器
要想異步的執行輸入輸出指令,那就離不開約定,即約定的標誌位爲特定狀態,執行特定操作,下面介紹LC-3中爲了輸入輸出而準備的4個寄存器
值得注意的是,這些寄存器都是模擬寄存器,即用內存來代替的
下面給出這些模擬寄存器的地址及功能
地址 | 映射的寄存器 | 解釋 |
---|---|---|
0xFE00 | 鍵盤狀態寄存器KBSR | 最高位爲1表示從鍵盤接收到新字符 |
0xFE02 | 鍵盤數據寄存器KBDR | 鍵盤輸入數據ASCII碼值存在其低八位 |
0xFE04 | 顯示輸出狀態寄存器DSR | 最高位爲1表示可以向屏幕輸出一個字符 |
0xFE06 | 顯示輸出數據寄存器DDR | 向屏幕輸出的字符的ASCII碼存在其低八位 |
字符的輸入
字符的輸入又分爲兩個部分,一部分是鍵盤的輸入,另一部分是數據的讀取
鍵盤輸入
鍵盤輸入數據較爲簡單,值得注意的是數據的阻塞,即之後的輸入都無效
- 從鍵盤輸入一個字符,系統觸發中斷
- 將輸入的字符放到KBDR寄存器中,然後將KBSR寄存器最高位置1表示有新數據讀進了,待取
- 將鍵盤禁用,阻塞之後所有字符的輸入
數據讀取
鍵盤數據的讀取,其實就是讀取KBDR寄存器,然後解除鍵盤的鎖定,可以開始接收新數據,分爲以下幾個步驟:
- 檢測KBSR最高位是否爲1,即是否有輸入待取
- 讀取KBDR中的輸入數據
- 將KBSR最高位置0,即重置標誌位
- 使能鍵盤中斷,即解除鍵盤的鎖定
字符的輸出
設備準備
如果顯示器準備好輸出一個字符,那麼DSR寄存器最高位置1,表示:可以輸出字符啦
輸出數據
當顯示器準備好輸出了,即DSR寄存器最高位爲1,這時候輸出數據,系統操作分爲以下幾個步驟:
- 系統將首先將DSR置0,因爲現在要輸出了,不是就緒狀態
- 系統將DDR寄存器裏保存的數據以ASCII碼輸出到屏幕
- 顯示完成,將DSR重新置1,表示可以輸出
值得注意的是,在DSR置0時,任何新寫入DDR寄存器的字符將被忽略,因爲現在顯示器忙,不能輸出
LC-3輸入的讀取思路
死循環一直輪詢KBSR寄存器,如果高位爲1(可以用BRzp判斷),跳出死循環並且從KBDR讀取字符,否則死循環等着