程序的基本結構是順序結構,分支結構,循環結構和子程序結構。
4.2-2 彙編語言基本程序設計
一、順序程序
順序程序在第三章指令係統舉例中已經見到一些,這裏舉一個例子,說明完整的彙編語言程序的格式。
二、分支程序
在程序設計中,程序始終是順序執行的情況不多。大多數程序都有條件判斷的分支結構,即在程序中會遇到各種判斷和比較。例如,比較兩數“相等”或“不相等”、“正”或“負”;“大於”或“小於”等等。一次判斷就形成兩個分支,連續判斷形成多個分支。一般情況下,對每一個分支都單獨編寫一段程序,其開始地址賦予一個標號,以便條件成熟時轉向它。分支程序比順序程序複雜些,往往在編製程序前先畫出流程框圖。
下麵舉幾個分支程序的例子:
①找出兩個無符號數中的大數假定存儲單元和中存放兩個不帶符號的二進製數,試把其中大數找出來並存入單元中。
這個程序隻有一次判斷,所以是單分支程序。由組成一個判跳環節,無借位條件成立,即跳轉到六單元地址,往下執行程序;條件不成立,則順序執行。
②編製計算下麵函數的程序
假定自變量X已存入標號為4110的單元存入標號為的存儲單元。
比較兩個帶符號的數和的大小先將取入累加器。然後用8指令。但運為是帶符號數,判斷標誌是不行的,因為在帶符號的數中負數最高位是1,正數的最高位是0,如果判斷標誌,結果會得出負數比正數大的錯誤結論。所以,要先判斷2標誌來比較兩數是否相等,接著用3和V標誌來比較兩數的大小。
三、循環程序
前麵介紹的順序程序,每條指令隻執行一次,而分支程序則拫據條件不同,會跳過一些指令,執行另一些指令。這二種程序的特點是,每一條指令至多隻執行一次。在處理實際事務時,有時要求多次重複處理的問題,用循環程序來解決就很合適。循環程序中某些指令可以反複執行多次。一般情況下,處理的問題具有重複的性質時,應盡量采用循環程序,這樣可以使程序縮短,占用內存減少。重複的次數越多,循環程序越顯優越,當然執行時間並不省,由於要有循環準備、結束判斷等指令,執行速度比順序結構程序還會稍慢一些。
循環程序一般由五部分組成:
初始化部分:它為循環做必要的準備工作。例如,設置循環次數計數器,設置地址指針和為其他變量賦初值等。
處理部分:這部分進行實際數據處理,這是要反複執行的部分,又稱為循環體,修改部分:每執行一次循環體後,通過修改部分,使指針指向下一個數據所在的位置,為下一輪處理做準備。
控製部分:它用來控製循環次數,檢查循環的條件是否符合,符合的繼續循環,不符合的就跳出循環。
結束部分:它分析和存放結果。當然對於具體程序,這五部分有時能明顯分開,有時不一定能明顯分開,可能有互相包含的關係,這五部分的順序有兩種結構,是先處理後判斷,即處理部分至少要執行—次。是先判斷後處理,即處理部分有時根本不執行。
循環結構的關鍵是循環次數的控製。根據實際問題,對循環次數的控製有多衝:循環次數已知的循環,用計數器來控製循環;循環次數未知的循環,按問題的條件來控製循環;還可以用開關量來控製循環,用邏輯尺來控製循環,
循環程序又分單重循環和多重循環下麵對各種循環結構分別用實例來說明。
1.單重循環程序循環次數已知的循環程序
例如:8位二進製數求和,和數是16位二進製數。設和的低位存放於20409單元,高位存放於單元,數組的個數存放於2042隻單元,數據從2043隻開始存放。這個問題用循環結構,循環次數是數組的個數,(以下數據均以十六進製表示)數據。
2.循環次數未知的循環程序
有些循環程序其循環次數是未知的,這就不能用計數器來控製循環次數,而要按問趄的殺件來控製循環。
這裏移動次數是未知的,因此,循環次數也是未知的。當最高位就停止循環。所以,是屬於按問題的條件來控製循環的循環程序。
用開關變量控製循環本例程序是一循環程序。循環是由寄存器指定的位的邏輯狀態決定。
3.存結果存移位次數
開關的初始狀態是由1/0口輸入命令字決定。在執行某一處理子程序時,把開關位置順序往下搬動一次,也允許在子程序內對開關位置作修正,這根據使用者的需要,而在子程序內安排。
用邏輯尺控製循環在實際事務處理上,有時並不要求象上例那樣,按一定的固有的順序循環處理,而要求處理事務過程是不規則的循環過程。如已知調用處理事務子程序1.001、11000共8次(更多也可以),調用的順序是:第1、2、5、7次是調用98001,其餘次是調用1.0。為了完成這個任務,程序的設計除了要知道總的調用次數(循環次數)以外,還得設置一個標誌,用來識別調用哪一個子程序。
這裏,總共隻有二個子程序,可以用0和1兩種邏輯狀態來識別,如用0狀態表示調用,用1表示調用8001的標誌。可見,得要有一串標誌位,總共8次,得有8個標誌位。我們假定選用寄存器作為程序標誌寄存器,把要求調用子程序的順序,以0和1不同位置安放在0寄存器內。根據要求,內容應是10100110。然後在執行程序時,由的0位起逐位測試,由該位的狀態決定調用哪種子程序。這樣的內容就好象一把“尺子”的“刻度”,作為識別調用子程序的標誌,我們稱它為“邏輯尺”,當然,“尺子”是可長可短的,一個字節不夠用,可以把鄰的字節串聯起來,就成為一把“大尺子”了。