分支轉移程序的特點是程序中含有轉移指令,轉移指令又分為無條件轉移和有條件轉移,因此分支程序也可分為無條件分支轉移程序和有條件分支轉移程序。無條件分支轉移程序很簡單,這里不再討論。有條件分支轉移程序按結構類型來分,又分為單分支選擇結構和多分支選擇結構。
1.單分支選擇結構
程序的判別僅有兩個出口,兩者選一,稱為單分支選擇結構,它在程序設計中的應用極為普遍。單分支轉移程序設計一般根據(jù)運算結果的狀態(tài)標志,用條件判跳指令來選擇并轉移。
求單字節(jié)有符號數(shù)的二進制補碼。
正數(shù)補碼是其本身,負數(shù)補碼是其反碼加1。因此,程序應首先判斷被轉換數(shù)的符號,負數(shù)進行轉換,正數(shù)本身即為補碼。
設二進制數(shù)放在累加器A中,其補碼放回到A中,程序框圖如圖4-3所示。參考程序如下:
此外,單分支選擇結構還有如圖4-4、圖4-5等所示的幾種形式。
2.多分支選擇結構
當程序的判別部分有兩個以上的出口流向時,為多分支選擇結構。它常有兩種形式,如圖4-6和圖4-7所示。
指令系統(tǒng)提供了非常有用的兩種多分支選擇指令:
它們?yōu)榉种мD移結構程序的編寫提供了方便。
間接轉移指令“JMP @A+DPTR”由數(shù)據(jù)指針DPTR決定多分支轉移程序的首地址,由累加器A的內容動態(tài)地選擇對應的分支程序。
4條比較轉移指令CJNE能對兩個欲比較的單元內容進行比較。當不相等時,程序實現(xiàn)相對轉移,并能指出其大小,以備進行第二次判斷;若兩者相等,則程序按順序往下執(zhí)行。
最簡單的分支轉移程序的設計一般常采用逐次比較法,就是把所有不同的情況一個一個地進行比較,發(fā)現(xiàn)符合就轉向對應的處理程序。這種方法的缺點是程序太長,有n種可能的情況,就需有n個判斷和轉移。
求符號函數(shù)的值。符號函數(shù)定義如下:
X存放在40H單元,y存放在41H單元,程序框圖如圖4-6所示。
程序如下:
在實際應用中,經常遇到圖4-7所示結構形式的分支轉移程序設計,即在不少應用場合,需根據(jù)某一單元的內容是0,1,…,n分別轉向處理程序0,處理程序1,…,處理程序n。一個典型的例子就是當單片機系統(tǒng)中的鍵盤按下時,會得到一個鍵值,根據(jù)不同的鍵值,跳向不同的鍵處理程序入口。此時,可用直接轉移指令(LJMP或AJMP指令)組成一個轉移表,然后把該單元的內容讀入累加器A,轉移表首地址放人DPTR中,再利用間接轉移指令實現(xiàn)分支轉移。
根據(jù)寄存器R2的內容,轉向各個處理程序PRGX(X=O~72)。
程序如下:
R2中的分支轉移參量乘3是由于長跳轉指令LJMP要占3個單元。本例程序可位于64 KB程序存儲器空間的任何區(qū)域。





