正文 第八章 簡單監控程序的剖析(1 / 3)

8.1 概述

單板微型計算機一般都有一個固化在0/1中的監控程序,這個監控程序負責管理鍵盤、顯示器等輸入/輸出口,並有若幹可供用戶調用的實用子程序。有了它,一般我們可以利用鍵盤輸入機器語言級程序和數據,並能運行和調試用戶程序,實現入機對話。微型機的功能強弱,很大程度上取決於監控程序的功能強弱。了解監控程序能使我們對鍵盤命令的功能有更深入的了解,不僅能知其然也能知其所以然。並能更深入地了解單板微型機係統的工作過程。

單板機的監控程序稱,它靈活地運用了Z80豐富的指令係統和中斷技術以及可編程序接口等。並采用軟件和硬件結合的辦法來實現的功能,例如,財編程功能,單步執行程序功能等,均巧妙地采用軟硬件結合的辦法,這些技巧對初學者都是很值得借鑒的。此外,在程序中還運用了找和表的數據結構技術,在程序設計中有對表的檢查,對棧的使用,和分支跳轉表的使用等基本程序設計方法。所以在我們學完了前麵各章內容並很熟悉鍵盤操作後,來剖折是很有益的。可以加深對Z80指令係統、中斷技術和可編程序接口技術的理解,提高程序設計能力和編程技巧。當然並不是最優化的程序。

監控程序是微型機中最簡單的係統軟件,掌握它也為進一步學習微型機的操作係統打下基礎。由如下六個模塊組成:

1.重新啟動指令處理程序

它包括功條重新啟動指令的服務程序。其中用於係統初始化,即程序;

用於斷點處理程序,即程序;其它指令都起到在中分配服務程序入口地址的目的,即在相應的單元中存入一條轉移指令,以便轉移到存儲在存儲器另一區域的服務程序。例如,用戶使用指令,當執行此指令後,就會引導口去執行存在三個單元中的跳轉到指令,用戶可以在起的二個存儲單元中存放一條轉移到服務程序的轉移指令。凡是要調用此服務序,隻要用單字節的調用指令,或用中斷方式由外設提供了隱指令就可以。

2.顯示更新程序

它將六個顯示緩衝單元的內容依次輪流取出,送往七段顯示器去顯示,每位字符保持顯示一毫秒。六位顯示完畢,然後轉入鍵盤分析程序。

3.鍵盤分析程序

它等待並搜索鍵盤的輸入,若沒有按鍵壓下,就循環回到顯示程序;若有按鍵壓下,則對所壓下的鍵進行分折。如果是數字鍵,就送入相應的顯示單元如果是命令鍵,就轉入該鍵的動作程序。

4.鍵盤動作程序

每一個命令鍵都有一個相應的鍵動作程序,這些動作程序完成的功能將在下一節介紹。

5.實用子程序

這些子程序都是供中上述程序段調用的,也可以供用戶調用,下節將介紹其中一些子程序的入口地址和所完成的功能。

這個存儲區域存放以下四個表格:

①七段顯示字形表;

②查找鍵值表;

③寄存器表;

④中斷矢量表。

它們是一些係統標誌存儲單元和工作單元。是係統各個標誌存儲單元和斷點地址及斷點第一字節操作碼存放單元;是存放轉儲入磁帶的數據塊的首末地址單元;指令的跳轉表,用戶可以填入轉移到相應服務程序的轉移指令。用戶可以填入轉移到相應服務程序的轉移指令。

8.2 TP-BUG 功能介紹

主要管理鍵盤和顯示器。為了剖析程序,我們必須了解它的各個程序模塊的功能。中絕大部分程序是實現鍵功能的程序。所以,我們首先得熟悉各個鍵的功能。

1.初始引導

隻要使口複位,就能引導口去執行了初始化程序段。實現複位有兩種辦法:

複位的作用之一是使程序計數器指向單元。引導單元開始執行總初始化程序。若、開關處於從位置,此時,顯示器的最左端就顯示提示符“?”,即進入掃描鏈盤和顯示器的循環,等待輸入數據或命令。

2.數字輸入鍵

單板機的鍵盤中有16個十六進製的數字鍵,用來向計算機輸入十六進製數字。這些數字可以是存儲單元的地址、1/0口地址、寄存器標號、指令機器碼,也可以是一些數據。每壓下一個數字鍵,此數字立即存入相應的顯示緩衝單元。

3.監控鍵

有兩種功能;

其一是,中止現行用戶程序的執行,當執行用戶程序時(用戶使用鍵執行程序),壓下鍵,通過單穩電路向通道的引腳輸入一個計數脈衝,由於在8X80鍵的動作程序(起始地址為02301.中,將信道設定為計數器方式,時間常數為1。

當從引腳獲得一個計數脈衝時,會導致引腳上產生一個正脈衝。這個脈衝通過送入的目引腳,從而產生非屏蔽中斷申請。口響應中斷後,由入口轉到的非屏蔽中斷服務程序。執行中斷服務程序保護口寄存器,然後返回掃描鍵盤和顯示器的循環程序,使跳出死循環而返回監控,等待接受新的命令。

其二是,中止或退出當前的命令或輸入數據,使返回到初始化程序段等待新的鍵盤命令。這是對站鍵進行鍵分析後,通過鍵轉移表找到鍵處理程序而實現的。

通常要進行一種新操作之前,都必須按壓鍵,使顯示器上出現提示符“?”後,才能按壓新的命令或數字鍵。因為隻有按下鍵才能將引導去執行查鍵顯示程序段。

4.顯示或更改存儲器內容鍵的作用

當顯示器上出現提示符“?”,通過數字鍵輸入要顯示的存儲單元地址(4位16進製數),先送高位後送低位。每送入一個數字就立即顯示在顯示器上,最高位顯示在最左端。然後按壓從鍵,在最右邊的兩個顯示器上顯示該存儲單元的內容。若要改變該存儲單元的內容,隻要再輸入兩個數字,這兩個數字即被寫入該存儲單元,並被顯示出來。隻有送完兩個數字後,顯示才會更新。因為如果隻輸入一個數字,則這個數字隻暫存在單元中,在第二個數字輸入後,才會將這兩個數字寫入該存儲單元中,再從此存儲單元中讀出送至單元中去,然後被顯示出來。如果由於疏忽,用戶企圖更改非區單元的內容,雖然單元會保存新輸入的數字,但它無法寫入存儲單元,也就無法進入單元,因此,不會使顯示器內容更改。

如果連續壓下鍵,隻是重複讀出並顯示出該存儲單元的地址和內容。如果按壓142X7鍵,則顯示下一個單元的地址和內容。

5.顯示或更新寄存器內容鍵的作用

先按壓寄存器號中任一個隻即數字鍵,在顯示器最左邊一個顯示器上顯示出寄存器號,再按壓鍵,則在顯示器的最右邊兩位顯示出相應寄存器的內容。

若按壓鍵(它們都是以相應的數字顯示),再按1120鍵,則在顯示器的右四位顯示出16位寄存器的內容。

若要改變內容,則再輸入兩位(或四位)數字即可。注意,內容不能被更改。顯示或更新輔助寄存器的內容

6.顯示或更新外設口的內容鍵的作用

若某端口能被訪問讀出,先送入兩位16進製數表示口的地址,然後按壓口鍵,相當於對該口執行一條指令,在最右邊兩個顯示器上將出現該口的內容。若再送入兩位數字,就相當於向該口執行一條指令。

7.且對該口執行一條指令,設置斷點一鍵的作用

為了調試程序方便,常希望程序運行到指定點處停下來,以便檢查程序執行的情況。這可以用設置斷點的辦法來實現。此鍵可以用來在用戶程序中設置1個斷點。設置斷點的操作是:先輸入希望在某處停下來的地址(4位16進製數),但要注意,此處一定是指令的第一個操作碼所在地址單元,然後再按鍵,就是設置一個斷點了。每當設置一個斷點後,“斷點標誌”出的內容增1,斷點地址被送往起始地址。該表共有15個單元,每個斷點占用三個存儲單元,其中兩個單元存放斷點地址,另一個單元存放用戶程序斷點處指令操作碼的第一個字節。在輸入斷點地址後,按壓鍵,顯示的地址應暗後複明,表示斷點已被接受。如果輸入的斷點數多於五個,則多設的斷點無效。此時顯示器上出現提示符“?”。最初輸入的五個斷點仍然保持不變。