LC-3指令集 字符的輸入與輸出

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讀取字符,否則死循環等着

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章