正文 第三章 Z80-CPU 指令係統(二)(2 / 3)

即用方向地址來更改程序計數器的內容,使指令序列轉向新地址繼續執行下去。若測試的結果和設定條件不符合,則順序執行程序,也就是不跳轉。這類指令能重複執行一個指令序列(循環程序),測試字符,識別錯誤,檢查外部設備的狀態等。條件跳轉指令是使能夠進行判定的主要手段,智能化很大程度依賴這類指令。

3.調用指令

調用指令又稱轉子程序指令。它的實質也是實現程序轉移。但它與普通跳轉指令的區別在於執行所跳轉的程序後,它需從原來的斷點返回原程序流程。也有無條件調用和條件調用兩種。

4.返回指令

這類指令的功能是將原先存於堆棧的斷點退回程序計數器。這種指令放在子程序的最後。它也分無條件返回和條件返回兩類。下麵介紹這類指令。

一、跳轉指令

這類指令分以下四組:

1.直接尋址的跳轉指令

指令中的值,占兩個字節,其值可以是0到65535中任一個值。這是三字節的指令,機器碼,第一字節是操作碼,第二、三字節是地址。這裏特別要注意的是,第二字節是地址低8位,第三字節是地址高8位,這條指令所執行的操作。

2.利用寄存器對間接尋址的跳轉指令

這類指令和指令配合,可以實現可變跳轉地址,因此,它們比指令較為靈活。注意,這類指令隻有無條件跳轉。

3.相對尋址的跳轉指令

直接尋址的跳轉指令是三字節的指令。這指令多用於“遠距離”跳轉,如果跳轉的目標就在現行指令附近,一般都采用相對尋址的二字節跳轉指令。這不僅節省一字節存儲串元,而且將來程序存儲區域改變了,機器碼程序也不必隨之改動,它包恬無條件跳轉和有條件跳轉兩類。

4.控製循環次數的跳轉指令

在處理實際問題中,往往會碰到需要多次重複執行某一程序段,這時采用循環結構程序是很合適的。為控製循環次數,一般選用寄存器或寄存器對作為控製循環次數的計數器。將循環次數預先置入該計數器。每循環一次,計數器減1,並判斷(測試)此計數器是否為0。

就結束循環,否則繼續循環,直至循環計數器。為了便於實現這類操作,Z80-指令係統中設置一條專用的控製循環次數的跳轉指令。

二、子程序調用和返回指令

調用指令主要用於主程序調用子程序的主程序段中,一般情況下,調用和返回指令是成對安排使用的。當執行調用指令時,先將的內容(斷點)壓進棧保存起來,再將子程序入口地址置入,使轉去執行子程序。返回指令一般安排在子程序結尾,它用來將原來保護壓進桟裏的斷點彈回使回到原來主程序流程中去執行。所以一般情況下,調用指令和返回指令是成對安排的。當然也有例外,例如在子程序中執行一條指令,它就相當於不返回主程序的跳轉指令了。調用和返回指令有無條件調用、無條件返回指令和條件調用、條件返回指令兩類。下麵分別介紹。

1.無條件調用指令

執行此指令時,會將的當前內容斷點壓入堆棧。先壓入的高位字節,再壓入的低位字,然後將指令的操作數所給出的子程序入口地址、置入,轉去執行子程序。

設執行指令前,當程序執行指令後,先將下一條指令的單元地址壓入堆棧,再跳到入口地址為的子程序去執行。子程序執行到指令時,即將堆棧中的斷點地址彈出,返回主程序,去執行指令的下一條指令。

2.條件調用指令

如果調用的條件成立,則調用子程序;若條件不成立,則順序執行後繼指令條件同轉移指令中所述一樣。

當執行主程序中200111單元,如果運算結果,將使標誌寄存器的標誌位置。因此,當接著執行指令時,因測試到此時的2=1,所以調用的條件成立。

當執行子程序中的指令,就返回到主程序中去執行位於20059單元的指令。

指令一般情況下是將原先進棧的斷點彈回,使返問主程序去。但也可不返回原先斷點,而轉移到另一程序段中去,如下麵子程序中,是轉移到所指向的程序段中去。

3.無條件返回指令

如果返回的條件得到滿是,則返回,否則順序執行。

4.中斷返回指令

(1)屏蔽中斷返回指令

此指令一般設置在處理屏蔽中斷服務程序的最後一條指令。當口執行這條指令時,它除具備指令的功能外,還送控製信號給請求中斷服務的設備,告知中斷服務程序已執行完畢。

(2)非屏蔽中斷返回指令。

此指令功能與指令大致相同,但還執行的操作,這條指令一般設置在處理非屏蔽中斷服務程序的結尾。

假設在執行單元的指令時,外界向發來非屏蔽中斷請求信號。注意:要接受中斷申請,一定要等正在執行的指令執行完畢。如本例中,隻有在執行完單元的指令後,才可能跳轉到中斷服務程序中去。在跳到中斷服務程序之前,先將下一條指令地址壓入堆棧,非屏蔽中斷服務程序的入口地址。