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

3.1 概述

計算機是高度自動化的機器,一旦程序設定之後,它無需入的直接幹預,自動進行運算和處理事務。通常,整個自動操作的過程是由控製器來控製的,那麼,控製器根據什麼來執行呢?是根據事先存放在存儲器內部的指令。每一條指令規定算機完成某種操作。例如,命令計算機將中的累加器內容存入存儲器某個單元:或從存儲器某指定單元取出數據送入中的寄存器;或將寄存器內容加到累加器等等。目前計算機能直接識別的指令,是由0和1編碼(二進製碼)的指令。這種編碼稱為機器碼。這種指令稱為機器碼指令,由機器碼指令編排的程序稱為目的程序。

機器碼指令一般由兩部分組成:

操作碼是規定機器完成某種操作的代碼。例如命令機器進行“加”、“減”、“傳送”等等操作。每一種編碼代表某一種操作。為提高機器的效率,操作碼通常占據指令的頭一字節。傳統的計算機操作碼隻規定機器完成某種操作,但微型計算機中,操作碼除規定某種操作外,還包括指定參加操作的數據所在的寄存器編號。

操作數:操作數(操作元)指明操作碼所要運算的元索。它可以是參加操作的數據,或操作數據所在的地址編號。

因為8位二進製數碼(一字節)隻能有256種編碼組合,如果基本操作超過256種,就必須用兩字節來表示操作碼。如果指令直接帶操作數,操作數有一字節的,有兩個字節的。若指令是給出參加操作數的地址,操作數可以在寄存器內。如果有8個寄存器,用來指明寄存器編號的代碼有三位就夠了。如果參加操作的數據來自存儲器,8位微型機存儲器單元一般是64,這樣,用來指明存儲器的地址碼就要二字節,若參加操作的數據來自外部設備,外部設備的口地址一般是256個。所以用來指明地址的地址碼就要一個字節。操作碼段和指定操作的操作數段加起來,一條指令的長度可能是一字節、二字節、三字節或四字節等不同的長度。指令越短.執行速度越快。指令長不僅占更多的存儲單元,而且執行指令時,要花費更多的時間。入們想利用計算機來為自己服務,必須要用計算機能識別的指令來編製程序。所謂編製程序,就是根據任務要求,決定選用什麼指令和指令的組合順序,然後通過輸入詔備將稈序按順序存入存儲器。計算機啟動後,以就從存儲器逐條取出指令,並將指令中的操作碼段存入的指令寄存器,再經過指令譯碼器翻譯,發出操作控製信號,完成所規定的操作。例如指令要完成將8寄存器的內容加到入累加器。這條指令經譯後,就會發出控製信號,將入累加器內容和8寄存器內容送到的輸入端,再將八輸出送入累加器。一台計算機所能識別的全部指令,稱為這台計算機的指令係統。每台計算機都有自己的固有指令係統。編製程序時,隻能用這台計算機的指令係統中的指令來編製,而不能隨心所欲。這是因為計算機的設計者,在設計時,是根據指令編碼來決定中控製器的結構的。控製器結構定了,指令編碼的含意就定了。即同一種編碼,對於不同型號的口含意是不同的。例如代碼,對於是完成將八累加器的內容傳送給寄存器;而對於卻是完成將八累加器清“0”的操作。即指令編碼的含意是設計者設計時賦予的。雖然各種機器的指令係統各不相同,但它們指令的類型,要執行嘟些庫本操作,尋址方式的含意等卻具有共同性,Z80-0微型機中指令功能較強的一種,在8位微型機中有代表性。

計算機隻能識別機器指令。但機器指令對入類卻太不方便了。它不容易讀,不容易記。如果直接用它來編製程序,很容易出錯。如果用有明確意義的簡單英文縮寫字來代表每一條指令,這比機器指令掌握起來就容易得多。用英文縮寫字代表指令,稱為彙編指令或符號指令。基本上是一條彙編指令對應於一條機器指令。也就是說,它和機器指令很接近。所以學習彙編指令必須先了解機器的結構。例如了解機器的寄存器、尋址方式等。用彙編指令來編程序,比用機器碼指令方便得多了。但機器不能直接識別彙編指令,必須通過彙編程序(彙編器),來將彙編指令翻譯成機器指令。如果沒有彙編器,編製程序時,也還可用彙編指令書寫,但必須再用入工查表的方法,逐條翻譯成機器指令。這種翻譯過程,稱為手工彙編。

3.2 Z80-CPU 指令係統的分類、格式和尋址方式

3.2-1指令分類

Z80共有150條彙編指令,其中有78條機器碼和150條是指歸類的指令。例如:口寄存器之間數據的傳送,我們將七個寄存器,即用一條指令來表示。如果考慮到具體寄存器,例如寄存器有七個,則這樣組成的指令就有400多條,如果從操作碼編碼來劃分指令則有數百種編碼。介紹指令時,不是列敏一條一條指令,更不用去記機器指令,而是把指令歸納分類,了解它們的功能和應用。

下麵先對Z80的指令係統作一分類,使讀者先有一概括的了解。讀者一時還不易完全理解,待將指令係統全部介紹完,讀者就會了解指令係統分類的全部意義,指令係統按功能可分成以下八類:

1.數據傳送與交換

數據傳送指令用於內部寄存器之間或寄存器和存儲器之間傳送數據。指令規定取出數據的源地址和存放數據的目標地址,傳送指令不改變源地址單元內容,隻是將源的數據傳送到目的地址單元去。

交換指令是交換兩對寄存器的內容,或成組交換寄存器對的內容。

2.數據塊傳送與檢索

獨特的一組指令。它用一條指令就能把多達64字節的一組數據從存儲器的一處送到另一處。當有一大串數據需要處理時,這種傳送的優越性尤為突出。數據塊檢索指令還可以從多達64字節長的一塊存儲區中找出一個關鍵字。

3.算術和邏輯運算

這類指令是對累加器和其它;通用寄存器或存儲單元的內容進行運算,運算結果放甶累加器中,並使標誌寄存器中相應的標誌置位或複位。循環和移位這類指令可使寄存器或存儲單元的內容作各種循環和移位(算術或邏輯的、帶進位或不帶進位的、向左或向右的)。累加器也可以和任意存儲單元一起循環左移或右移位。

操作位操作指令可以對累加器、通用寄存器或存儲單試。這類Z80獨特指令在自動控製係統中特別有用。

4.跳移、調用和返回

這一類指令用於控製程序的執行順序。用不同的方法,從指定的存儲單元中取得下二步程序的地址用以更新程序計數器的內容。其中重新起動指令是一條獨特的調用指令,它的單字節指令中包含了0頁內八個存儲單元地址中的一個地址,這是程序下一步將要轉向的地址。