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

三、通用算術指令組

這組指令的操作對象是累加器和標誌寄存器中的進位。在某些算術運算程序中,它們起重要的輔助作用。下麵分別介紹這組指令。

對累加器進行十進製調整指令。其功能是將二進製加法運算自動調整成(二一十進製)碼加法運算。它完成如下操作,測試累加器八的低4位及半進位標誌位,若低4位值大於9(即二進製),或9標誌為1,則將累加器加6。

例如:兩個數之和為10或為15或在它們之間,這種情況必須對結果進行“十進製調整”,也就是說運算結果必須加6,才能得到正確的800碼。

要注意,如運算的結果是存入變址寄存器IX或IV以及寄存器對的任何16位算術運算指令後麵,均不能使用指令,否則將得不到正確的結果。對於指令,由於它們不影響進位,所以使用時也隻能在結果的碼等於或小於99時才正確。

3.5-4循環移位和移位指令組

一、指令組介紹

這類指令多用於實現乘、除法程序中;使數據在串行和並行兩種形式之間進行轉換多實現數據的規格化或實現對數據的拚裝和分離等等。

Z80設有六種基本類型的九組移位和循環移位指令。被操作的對象是累加器、通用寄存器和存儲器單元。若是存儲器單元,尋址方式隻有寄存器間接尋址,和IX、IV變址尋址,下麵分別介紹各條指令。

1.寄存器、累加器或存儲器單元向左循環移位。這條指令因源操作數地址

2.不同而具有下列形式:寄存器、累加器或存儲器單元向右循環移位。第7位移入第6位,原來的第6位移入第5位,並依次類推,第0位移入進行標誌位和第7位。

3.寄存器、累加器或存儲器單元帶進位標誌位向左循環移位

一字節指令:第0位左移入第1位,原第1位移入第2位,並依次類推,而第7位移入進位標誌位的原內容則移入第0位。

4.寄存器、累加器或存儲器單元帶口向右循環移位。

5.寄存器、累加器或存儲器單元向右邏輯移位。

6.寄存器、累加器或存儲器單元向左算術移位。可見這實質上是一條向左邏輯移位指令。

7.寄存器、累加器或存儲單元向右算術移位。此指令的操作數與指令相同:在移位時,保留數據最高位(符號位),並將它依次傳送到下一位,這種操作也叫做符號延伸。

一個二十進製數字在累加器入和以寄存器對為指針的存儲申-元之間向左循環移位。即存儲單元的低4位內容移入同一單元的高4位,該高4位原先的內容移入累加器的低4位、累加器低4位原先的內容移入的低4位、累加器的高4位不受影響。

一個二十進製數字在累加器和以指針的存儲單元之間向右循環移位。存儲單元的高4位移入同一單元的低4位,而存儲器單元的低4位原先的內容移入累加器低4位,累加器低4位原先的內容移入的高4位。

二、循環移位指令舉例

【例1】將存儲單元的高4位和低4位交換,然後存入單元。

【例2】將存儲單元的內容拆成兩段,每段4位,並將它們分別存入存儲單元中,高4位存入存儲單元的低4位,存儲單元的低4位存入存儲單元的低4位。

實現將高4位移到低4位,也可以用指令,直接進行邏輯移位,移位後,不再需要清除高4位。因為指令高位補0,但指令是兩字節的,而是一字節指令,所以從節省存儲器單元或縮短操作時間來看,用X實現移位,並不比用。

【例3】將存儲單元204011內容擴大10倍,結果存入單元(假設不考慮進位)。

【例4】將內存單元2040時的內容除以,將結果的整數部分存入單元,小數部分存入20421單元。

3.3-5 位操作指令

這類指令使我們能對寄存器或存儲單元中指定的位進行測試、置位或複位操作。在信號處理的應用中,一個單獨信號往往是一位二進製,這時位操作就具有特別重要的息義。

Z80的位操作指令有以下幾組:

1.位測試

它所執行的操作是:測試寄存器或以為指針的存儲單元的一位,並將測試的結果放在標誌寄存器的標誌位中。若被測的第6位為0,則將2置1,被測位為1,則將2置0。

2.置位

可見置位指令是,完成將寄存器或存儲單元中指定的第6位置1的操作;

3.複位

複位指令是,完成將寄存器或存儲單元中指定的第位複位(置0)的操作。

3.3-6 跳轉、調用和返回指令

這類指令用來控製程序的執行進程,所以又稱過程控製指令。這類指令包括:

1.無條件跳轉指令該指令通過更改程序計數器的內容,改變正在執行的指令次序轉向新的地址繼續執行下去。

2.條件跳轉指令

這類指令對指定的標誌位進行測試。符合設定的條件發生跳轉。