程序控制指令

程序控制指令

程序控制指令也稱轉移指令。執行程序時,有時機器執行到某條指令時,出現了幾種不同結果,這時機器必須執行一條轉移指令,根據不同結果進行轉移,從而改變程序原來執行的順序。這種轉移指令稱為條件轉移指令。除各種條件轉移指令外,還有無條件轉移指令、轉子程序指令、返回主程序指令、中斷返回指令等。轉移指令的轉移地址一般採用直接定址和相對定址方式來確定。

主要分類


主要包括三類,轉移指令(包括無條件轉移和有條件轉移)、程序調用和返回指令,循環控制指令。其中,前兩類指令在一般計算機中是必備的。最後一類指令用於對循環程序進行優化。

轉移指令


中的無條件轉移指令通常有兩種:一種是局部無條件,採用相對定址方式,轉移範圍一般在+127到-128之間;另一種是全局無條件轉移,可以在整個定址空間內轉移。
條件轉移指令條件轉移指令所依據的轉移條件主要有:全零(Z)、正負號(N)、進位(C)、溢出(V)及它們的組合等。主要條件轉移指令有:
BEQ 等於零轉移
BNEQ 不等於零轉移
BLS 小於轉移
BGT 大於轉移
BLEQ 小於等於轉移,或不大於轉移
BGEQ 大於等於轉移,或不小於轉移
BLSU 不帶符號小於轉移
BGTU 不帶符號大於轉移
BLEQU 不帶符號小於等於轉移,或不帶符號不大於轉移
BGEQU 不帶符號大於等於轉移,或不帶符號不小於轉移
BCC 沒有進位轉移
BCS 有進位轉移
BVC 沒有溢出轉移
BVS 有溢出轉移

調用返回指令


第二類程序控制操作是程序調用和返回指令,主要有兩條:
CALL 轉入子程序
RETURN 從子程序返回
這兩條指令本身可以帶有條件,當測試條件滿足時轉入子程序或從子程序返回,也可以不帶條件。如果調用和返回指令本身不帶條件,則要與條件轉移指令聯合使用,如果本身帶有條件,目標程序就可以簡化
在執行調用指令,要保存硬體現場(主要指程序計數器和處理機狀態字)和軟體程序現場(指在子程序中要使用的通用寄存器等);當從子程序返回時,再恢復這些現場。在設置有系統棧的計算機中,硬體現場和程序現場可以壓入堆棧。如果沒有設置堆棧,則要在主存儲器中開闢出一塊專門的區域或指定專門的通用寄存器來保存硬體現場。而軟體程序現場的保存則由程序員自行決定。
另外中斷控制指令和自陷指令(或稱為過程調用指令)也屬於程序調用指令。中斷控制指令主要有:開中斷、關中斷、改變屏蔽狀態、從中斷程序返回等指令。自陷指令主要用來轉入例行子程序,或在程序調式過程中用來設置斷點。