1999-07-09 單晶片8085與8051的比較

建立於 2010-12-06, 週一

單晶片8085與8051的比較

 

許泰欣

ISUAL 計畫團隊國立成功大學物理系

(June 2,1999;1st version)

內容綱目:

前言

一般硬體結構

軟體指令方面

太空級晶片與一般級晶片的差異

程式比較

結論

參考文獻


一 前言

在高空大氣閃電影像儀上的目前預定之主要中心處理單元素(CPU)是 8085。前回已介紹8051(見上次報告)。由於8051與8085的指令動作很類似,而現行市面上比較容易取得的資訊是8051,在經過8051的練 習實作之後,我們將8085與8051做一比較整理,期望已經對8051了解的人,能夠藉由此報告很快的對8085有所了解。


二 一般硬體結構

Intel公司於1976年首先發展出MCS-48,它是一個八位元CPU,內部配有最多4K bytes的程式記憶體(即ROM或EPROM),和最多256
bytes的資料記憶體(RAM),以及一個8 bit的計時器和27條I/O。到了1980年的時候,Intel又根據MCS-48的架構改良而發展出MCS-51,這個單晶片仍使用8位元CPU,但程式記憶體的空間可達64
Kbytes,內部有256 bytes的資料記憶體(RAM)和兩個16 bit計時器和32條I/O。以下是一般我們常見的MCS-51的內部結構如下:

 

內部結

編號

內部記憶體

輸入/輸出

計時/計數器

RAM

ROM

EPROM

I/O

16位元

8031

128byte

0

0

32 pins

2個

8051

128byte

4K byte

0

32 pins

2個

8751

128byte

0

4K byte

32 pins

2個

89C51

128byte

0

4K byte

32 pins

2個

8032

256byte

0

0

32 pins

3個

8052

256byte

8K byte

0

32 pins

3個

8752

256byte

0

8K byte

32 pins

3個

89C52

256byte

0

8K byte

32 pins

3個

表1. MCS-51系列常用編號之內部結構

早在1971年12月,Intel公司就設計了第一部8位元微處理機8008,它是利用標準型半導體記憶體(ROM和RAM)以及TTL積體電路來組成一個系統,那是採用P通道MOS處理技術的一般用途處理機,以18
pins雙引線積體電路包裝(DIP)。到了1973/1974年,Intel公司在8008的基礎上利用N通道MOS處理技術設計出8080微處理機。 後來設計8080微處理機的工程師分成了兩組,一組仍留在Intel公司內改良8080而設計出8085;另一組脫離Intel公司自組成Zilog公司 而設計出Z80微處理機。

8085沒有內部的資料記憶體或程式記憶體,但只要利用8155/8156(RAM)或8355(ROM)就可以組成一部基本的微電腦系統。8155和8156都是含有256
bytes 記憶體,兩個位元輸入/輸出埠和一個6位元輸入/輸出埠,以及一個14位元可做程式規劃的計時/計數器。它們都是採用40 pins 雙引線積體電路包裝,工作電壓+5V。8155和8156的不同點在於選擇晶片的邏輯準位。也就是在晶片致能接腳(Chip
Enable),8155要求邏輯準位”0”,8156要求邏輯準位”1”,除此之外兩個裝置是一樣的。而8355是含有2K bytes的唯讀記憶體,兩個8位元可直接做程式規劃的輸入/輸出埠,也是採用40
pins 雙引線積體電路包裝,工作電壓+5V。

(一) 基本結構與功能

中央處理單元(CPU)

8051的CPU可以執行二進制的加,減,乘,除和BCD碼的加法,但無法執行BCD減法。8051除了有Byte邏輯運算能力外還提供所謂單位元邏輯運算能力,稱為布林運算器。

8085除了能夠做BCD算術,也能處理16位元資料的定址計算。它和8051一樣使用多工位址/資料通徑法。以下是8051與8085的俯視圖:

圖1. 8051接腳圖

圖2. 8085接腳圖

(二) 時脈產生器

一般的單晶片都留兩支接腳與外接的石英晶體連接,以決定振盪頻率,所產生的頻率決定了CPU執行程式的快慢。8051最高(晶體)工作頻率為 12MHz,1個機械週期為12個工作時脈,所以機械週期等於一微秒(1μs)。標準的8085所採用的晶體(工作頻率)最高為6.25MHz,這是雙倍 於內部時脈頻率。8085A-2可採用高達10MHz的晶體。以下是8085的時脈週期時間:

表2. 8085的時脈週期時間

 

符號

說明

8085AH

8085AH-2

8085AH-1

單位

最小

最大

最小

最大

最小

最大

tCYC

時脈週期時間

320

2000

200

2000

167

2000

ns

以下是data sheet所提供的時脈線路:

圖3-a.石英晶體驅動時脈線路

圖3-b. LC調變驅動時脈線路

圖3-c. RC驅動時脈線路

圖3-d. 外部輸入頻率0~4MHz驅動時脈線路

(三) 中斷控制器

對於8051內部週邊裝置(Time0,Time1和UART)而言,其中斷要求信號已在內部接到8051的中斷系統,因此不須再行連接,而8051外 部也提供了兩條中斷要求(INT0和INT1)以提供外部擴接的週邊的週邊裝置對8051提出中斷要求。8051的INT0與INT1相當於8085的 INTR。8085沒有像8051的內部中斷。

8051可以接受5個(2個外部,3個內部)中斷要求信號,若5個中斷要求同時被檢 知,8051會根據內部的中斷優先權暫存器來決定對誰先服務。透過規劃這個中斷優先權暫存器,這5個中斷的優先權順序就可以由使用者加以安排。但若有兩個 具有相同優先權的中斷請求”同時”發生,則8051會按照表4
之中斷優先順序來決定其執行中斷副程式的順序。而8085的中斷優先順序由高至低依次為TRAP, RST7.5, RST6.5, RST5.5,INTR。

8051中斷優先權的規劃只分成兩個層次,即高優先權和低優先權,其設定的方法是規劃IP暫存器裡各個中斷源的優先權控制位元,被設為1的就到高優先權層,設為0的就到低優先權層。

8051的中斷結構是屬於二層式的中斷,即主程式被其中一個中斷源中斷後跳至這個中斷副程式執行,若在此刻有另一個較高優先權層的中斷要求在此時提出, 則這個較低優先權的中斷副程式會被中斷,如此中斷再被中斷稱為二層式中斷。其中斷的原則是相同優先權層裡的中斷源不能互相中斷,所以高優先權的副程式是能 再被中斷。

中斷的型態有兩種類別,即所謂的中斷要求(IRQ)和不可遮罩式中斷(NMI),所謂NMI是當週邊對NMI提出中斷要求 時,微處理機會無條件地接收這個中斷要求。而IRQ則是當週邊對IRQ提出中斷要求時,微處理機不一定去理會這個中斷要求,要看這個中斷要求是否在先前已 被允許狀態。至於允不允許IRQ的中斷?是由8051內部提供的中斷允許(或稱致能)暫存器(IE),這個暫存器中的前5個位元控制了8051的5個中斷 源是否被允許,而這些位元可透過軟體加以設定。因此8051的中斷型態是屬於IRQ的型態。(8051不提供NMI)。而8085除了能提供IRQ之外, 它還能提供NMI,那就是TRAP中斷。

8085A提供5個硬體中斷輸入,可劃分成下面三組:

1. INTR
2. RST7.5
RST7.6
RST5.5
3. TRAP

INTR中斷輸入是可罩除的,利用指令EI和DI可使INTR中斷致能或除能。

RST5.5,RST6.5,RST7.5硬體中斷在功能上與INTR有所不同.它們可經由指令SIM罩除。SIM指令借累加器裡的值清除或設置相應的 罩除旗標來使這些中斷致能或除能。而利用指令RIM可以讀到先前設置的中斷罩除狀況。利用EI和DI指令也可以分別使 RST5.5,RST6.5,RST7.5致能或除能。INTR,RST5.5和RST6.5是準位觸發,RST7.5是邊緣觸發。

TRAP中斷是無法罩除,也不接受任何中斷致能或除能的影響。TRAP輸入接腳上的正向邊緣觸發8085硬體中斷順序,但是此邊緣觸發脈動必須維持於高狀 態直至內部認可為止。所有中斷的取樣偵測都發生在中斷輸入被激化的那一指令週期結束前一個時脈週期的CLK下降邊緣。

當8051接受了中斷要求信號後就會跳至某個固定的位址去執行這裡的中斷服務程式,這些起始的位置稱為中斷向量。8085亦是如此,以下分別是8051與8085的中斷向量表:

表4. 8051中斷向量表

 

SOURCE

POLLING PRIORITY

REQUEST BITS

VECTOR ADDRESS

INT0

1

IE0

03H

Timer0

2

TF0

0BH

INT1

3

IE1

13H

Timer1

4

TF1

1BH

UART

5

RI,TI

23H

(四) 串列通信介面

MCS-51內部提供了一組標準週邊串列介面,稱為UART。UART是一個全雙工串列介面,共有四種工作模式:MODE0~MODE3。基本上資料位 元都是8個bit,因為工作模式的不同,傳輸的格式有不同的bit數:8,10,11。當每筆資料傳送或接收完畢,TI或RI就會被設為1。8085是利用外部的通信介面晶片8251A
USART來作串列資料傳輸
。8251A USART可以從微處理機那裡接受並列的資料,將之轉換成並列的資料。同時,也可以接收串列資料,將之轉換為並列的資料傳送給微處理機。它的資料緩衝器也 是8位元,但是它無法像8051的UART做到全雙工。8051的接腳RXD與TXD分別負責串列資料的接收與傳送。8251A的接腳RXD與TXD 分別負責串列資料的接收與傳送。8085是利用接腳SID與SOD作為串列資料輸入與輸出。當指令RIM執行時,SID接腳上的狀態資訊就被讀入累加器的 位元7中;而當SIM指令執行時,累加器位元7的值就經由一個內部正反器SOD接腳上輸出給串列輸入/輸出埠。此時累加器位元6被設置為1。SID可做一 般目的的試驗輸入,而SOD可用做一個1位元控制輸出。

(五) 週期時間與基本操作

(i)多工通徑之週期時間

任何8085程式的執行都是由一系列的READ和WRITE操作組成。這些操作在8085和特定的記憶體或輸入/輸出位置間轉移一位元組資料。8085 執行的每個指令由一到五個順序機械週期組成,而每個機械週期由三個到六個時脈週期組成,至少要有三個時脈週期。對於相同的外部時脈而言,8085的內部工 作時脈較快,但是8085需要較多的工作時脈來完成一個指令,所以在程式執行上8085比8051慢很多。以下分別是8085與8051的讀取資料的時序圖:

圖4. 8085讀取資料時序圖

圖5. 8051讀取外部資料記憶體時序圖

圖6. 8051讀取外部程式記憶體時序圖

8085與8051有相同的8位元三態雙向時間多工通道AD0-AD7來轉移資料,這個通道也轉移16位元低位元部的8位元位址,而16位元高位部的8位元位址則由位址通道A8-A15來轉移。8051每一隻埠腳皆由閂鎖(D型正反器;latch),輸出驅動電路及輸入緩衝器所組成。8085是利用資料通道狀態線S0,S1來決定資料通道處於暫停-HALT(S0=0,S1=0),寫-WRITE(S0=1,S1=0),讀-READ(S0=0,S1=1),取出指令-FETCH(S0=S1=1)。8051與8085在對外部裝置存取資料時,都是利用ALE接腳輸出脈波的負緣來鎖住(LATCH)由AD0-AD7
送出的低位元組位址。因8051有內部程式記憶體,所以在對外部記憶體做存取時,必須利用PSEN接腳對外部程式記憶體致能。8051欲 讀取外部程式記憶體的內容時,PSEN會自動產生負脈波,8051讀取內部程式記憶體或是資料記憶體,是不會有此動作。以下是8051與8085對記憶體 寫入資料的時序圖:

圖7. 8085寫入資料時序圖

圖8. 8051寫入外部資料記憶體時序圖

(ii)狀態轉換順序

一個指令的執行是由一系列機械週期所組成其性質和順序是由在 第一機械週期M1內取出的操縱碼來決定。所有指令週期都不能含有多過5個機械週期,每個機械週期可為七種不同的操作之一。這七種不同的機械週期由三條狀態 線(IO/M,S1,S0)和三條控制線(RD,WR,和INTA)的狀態來決定。以下是8085的機械週期表:

表5. 8085機械週期表

8085在每一機械週期的開始所做的第一件事是送出三個狀況訊號IO/M,S1,S0 ,這三個狀況訊號定義即將發生的機械週期的操作類別。IO/M訊號認定機械週期為記憶體或輸入/輸出操作;S1狀況訊號認定機械週期為讀或寫;SO和S1狀況訊號一起認定讀,寫或操作碼取出機械週期以及暫停狀態。

因為AD0-AD7上的位址資訊只有瞬息性,它必須被保存在特殊多工通徑元件,而8085就是利用ALE(Address
Latch Enable)來便利A0-A7的保存。8051亦是利用相同的方式保存資料。

大多數機械週期都含有三個T狀態(即CLK輸出週期),但取出操作碼的第一機械週期M1例外,M1通常含有4或6個T狀態。不過執行任何指令所需要的實際狀態數目則由執行中的指令其指令週期內特定的機械週期和利用8085
READY和HOLD輸入訊號插入每個機械週期內的WAIT和HOLD狀態數目來決定。以下是8085系統基本的時序圖:

圖9. 8085系統基本時序圖


三 軟體指令方面

由於8051的發展時間比8085晚,所以在指令上的有些功能會簡化很多,而且會配合輸入/輸出埠的功能,增加指令的應用性。不過8051大部份的指令 大都可對應到8085,雖然8085有些單一指令無法對應到8051,不過可藉由幾個指令的組合來達成相同的動作。以下分別介紹8051與8085的定址 模式與指令間的比較:

(一) 定址模式(Addressing Mode)

(i) 8051的定址法可分為下列5種:

1. 直接定址法 (direct addressing):

在指令中直接指定運算元所在的位址,例如:

MOV A,7F ;把位址7FH的內容放入累加器A

直 接定址法用在內部記憶體00H~7FH特殊功能暫存器中及位元定址範圍內。8085也有直接定址法,只不過8085沒有內部記憶體,所指定的位址都是外部 記憶體,不像8051在指令上還分出內部記憶體與外部記憶體的用法。8051有些指令動作很像8085的暫存器定址法。8085所有程式控制的指令都是直接定址法,而8051就不全是直接定址法

2. 間接定址法 (indirect addressing):

在 指令中不直接指定運算元的位址,而是把運算元的指標(pointer),8051內部具有這種指標功能的暫存器有R0,R1,SP,DPTR。間接定址法 的前置符號為”@”。R0,R1,SP是8位元暫存器,DPTR是16位元暫存器。R0,R1是兩個性質完全相同的指標,可以用來定址內部資料記憶體和外 部擴充資料記憶體,例如:

MOV R0, #30H     ;

MOV A, @R0     ;間接定址法取得內部RAM位址30H的內容

MOVX A, @R0     ;間接定址法取得外部RAM位址30H的內容

SP暫存器是堆疊指標(Stack Pointer)。它是堆疊區存放或取 出資料的指位器,例如:(如果SP=30H)

PUSH 80H ;把位址80H的內容放在記憶體位址31H內

DPTR是用來定址外部資料記憶體和程式記憶體的專用指標,例如:

MOV DPTR, #23ABH   ; 將外部資料記憶體位址23ABH的內容拿到累

MOVX A, @DPTR    ; 加器A

至於8051的B暫存器主要是用來做乘法和除法的運算,在乘法運算中用來存放乘數及運算結果的餘數。但是不做乘除運算時,B暫存器也可以當做一般用途的暫存器來使用。而8085的B暫存器能配置成對BC以處理16位元的資料。

此定址法的動作和8085的暫存器間接定址法相同

3. 暫存器定址法 (register addressing):

在8051內部RAM有四組暫存器庫(R0~R7),至於要使用那一個暫存器庫(bank)的暫存器,則取決於PSW暫存器裡的RS0,RS1兩個bit。

此定址法的動作和8085的暫存器定址法相同

4. 立即定址法 (immediate addressing):運算元是存放在指令碼的後面,例如:

MOV A, #20H    ;將一個常數20H放入累加器A

此定址法的動作和8085相同

5. 索引定址法 (indexed addressing):

以一個基底暫存器的內容,再加上一個索引暫存器的內容,所得的值即是運算元所在的位址。8051只有程式記憶體的內容才具有索引定址法,基底暫存器是DPTR或PC(程式計數器),索引暫存器則是累加器A。例如:

MOV A, #28H       ;

MOV DPTR, #3501H    ;

MOVC A, @A+DPTR    ;取得程式記憶體位址3529H的內容到A

8085單一指令格式沒有索引定址法但是8085可以利用幾個指令的組合達成索引定址法,得到和8051相同的效果(所需的指令時間自然也比較多):

LXI D, BASE   ;將基底位址(16位元)移入暫存器D

MOV L, A    ;將累加器的位址移入暫存器L

MVI H, 0     ;將累加器H的內容設為0

DAD D     ;將累加器的位址與基底位址相加

MOV A, M    ;從記憶體取出相加後的位址內容載入累加器

(ii) 8085的定址法可分為下列6種:

1. 直接定址法 (direct addressing):

所有程式控制指令都採用直接定址法。指令的第二和第三組元含有跳控的16位元位址。

2. 暫存器間接定址法 (register indirect addressing):

採用暫存器間接定址法的指令所指定的暫存器對所儲存的是記憶體的位址,該位址的記憶體位置含有待處理或運算所需要的資料。

3. 暫存器定址法 (register addressing):

指令所指定的暫存器或暫存器對含有處理或運算所需要的資料。這些指令的一個操作元必須指定一般用途暫存器B,C,D,E,F,H,L之一,而累加器A為指令所暗示的操作元。如CMP
B是將累加器A和暫存器B的內容作比較。

4. 立即定址法 (immediate addressing):

採用立即定址法的指令本身含有待處理或運算的資料。此立即指令表示它們使用立即資料。這些指令通常於最後一字元以I來區別,如ADI,CPI,MVI等。

5. 內示定址法 (implied addressing):

指令的功能暗示著指令本身所採用的定址方法,例如:指令STC(設置進位旗標為1)暗示只處理進位旗標;而指令DAA(累加器十進位數調整)暗示只處理累加器。8051有一些指令也是此種定址法,不過現在8051的書籍並沒有強調。8085內示定址法的指令有:

CMA,CMC,DAA,RAL,RAR,RIM,RLC,RRC,STC。

6. 混合定址法 (combined addressing):

既應用立即定址法,又採用暫存器間接定址法。8051有一些指令也是此種定址法,不過現在8051的書籍並沒有強調。8085使用混合定址法的指令格式有:

“ADC M”,”ADD M”,”ANA M”,”CALL address”,”CC address”,”CM address”,”CNC address”,”CNZ
address”,”CP address”,”CPE address”,”CPO address”,”CZ address”,”MVI M,I8”.

(二) 指令集

以下我們將介紹8051與8085的指令集,以8051為主幹逐一說 明指令功能的對應關係,最後列表。我們可以根據表上所列的每個指令所需的工作時脈週期數,來算出每個指令執行所需的時間。8051的1個機械週期等於12 個工作週期,但8085就不是那麼規則,隨著指令的不同,1個機械週期會有不同的工作週期數。因此要計算8085指令執行所需的時間,不能直接由機械週期數做判斷。

(i) 8051的指令集

(1). 算術運算指令:

共有9種。其中8085不能對應到的指令有:”ADD A,address”,”ADDC a,address”,”SUBB A,address”,”MUL
AB”,”DIV AB”。

1. ADD A,:

暫存器累加:

ADD A,Rn (Rn有4個:R0~R3),動作:(A)←(A)+(Rn)此指令動作與8085之” ADD R “(R有7個 : B,C,D,E,H,L,A)相同(動作:(A)←(A)+(R)),都只需要1個機械週期。

立即資料累加:

ADD A, #data   ; 動作:(A)←(A)+#data

此指令動作與8085之” ADI I8 “,( I8 為8位元立即資料)相同((A)←(A)+ I8
)。8051只需1個機械週期,但8085需2個機械週期。格式上的差別,

例如:(8051)

MOV A, #12H   ;A=12H

ADD A, #34H   ;A=12H+34H=46H

(8085)

MVI A, 12H   ;A=12H

ADI A, 34H   ;A=12H+34H=46H

直接位元組累加:

ADD A,direct ;動作:(A)←(A)+(direct)

8051需要1個機械週期,而8085需要2個機械 週期。此指令動作與8085有部分相同,例如:

(8051) ADD A, B   ;把暫存器B的內容加入累加 器A內

(8085) ADD B    ;把暫存器B的內容加入累加器A內

但是若8051寫成以下的格式,8085沒有對應的指令寫法:

ADD A, 25H    ;把內部RAM位址25H的內容加入累加器A內

間接位元組累加:

ADD A, @Ri (i=0~1)  ;動作:(A)←(A)+((Ri))

此指令動作與8085之 ” ADD M ”(M為參考暫存器H和L的符號)有類似的地方。8051需要1個機械週期,8085類似動作的指令需要2個機械週期。寫法的差別如下:

(8051)

MOV R1, #30   ;R1=30H

ADD A, @R1   ;把內部RAM位址30H的內容加入累加器

(8085)

LXI H, 100H   ;將RAM位址100H的位置載入(H, L)暫存器中

ADD M     ;把RAM位址100H的內容加入累加器中

8085有一特定的暫存器對16位元加法指令是8051所沒有的:

DAD RP   ; 動作:(HL)←(HL)+(RP)

此指令只能加暫存器對B&C,D&E,H&L或SP的內容到H&L的內容中,若產生進位,此指令會設置進位旗標。例如:

設HL=034AH,BC=214CH

DAD B   ;執行之後,HL=2496,C=0,BC和其他指標不變

2. ADDC A,:

暫存器與進位旗標累加:

ADDC A, Rn   ;動作:(A)←(A)+(C)+(Rn)

此指令動作與8085之 “ ADC R ”相同,都只需要1個機械週期。

立即資料與進位旗標累加:

ADDC A, #data   ; 動作:(A)←(A)+(C)+data

此指令動作與8085之 “ ACI I8 “ (動作:(A) ←(A)+(C)+ I8) 相同,8051只需要1個機械週期,8085需要2個週期。

直接位元組與進位旗標累加:

ADDC A, direct   ; 動作:(A)←(A)+(C)+(direct)

此指令動作與8085之” ADC R”有類似的功能,都只需要 1個機械週期。但8051以下的寫法在8085中沒有對應的寫法:

ADDC A, 20H   ;把進位旗標C的內容及內部RAM位址20H的內容加入累加器

間接位元組與進位旗標累加:

ADDC A, @Ri   ;動作: (A)←(A)+(C)+((Ri))

此指令動作與8085之” ADC M “ (動作: (A)←(A)+(C)+(M))相同,8051需要1個機械週期,8085須要2個機械週期。

3. SUBB A,:

累加器減暫存器再減進位旗標:

SUBB A, Rn   ;動作: (A)←(A)-(C)-(Rn)

此指令動作與8085之 “ SBB R “相同,都只需要1個機械週期。

累加器減立即資料再減進位旗標:

SUBB A, #data   ;動作: (A)←(A)-(C)-data

此指令動作與8085之 “ SBI I8 “相同(動作: (A)←(A)-(C)- I8 ),8051需要1個機械週期,8085需要2個機械週期。

累加器減直接位元組再減進位旗標:

SUBB A, direct   ;動作: (A)←(A)-(C)-(direct)

此指令動作與8085之 “ SBB R “相似,都只需要1個機械週期,但以下的指令寫法是8085沒有的:

SUBB A, #22H   ;累加器的內容減去內部RAM位址22H的內容再減去進位旗標的內容

SUBB A, P1    ;累加器的內容減去P1埠的內容再減去進位旗標的內容

累加器減間接位元組再減進位旗標:

SUBB A, @Ri   ;動作: (A)←(A)-(C)-((Ri))

此指令動作與8085之 ” SBB M “(動作: (A)←(A)-(C)-(M)) 相同,8051只需1個機械週期,8085需要兩個機械週期。

8085有兩個減法運算的指令是8051所沒有的分別是:

SUB R(或M)      ;動作: (A)←(A)-(R)或(M)

機械週期(SUB R):1 ; (SUB M):2。

SUI I8 ;動作: (A)←(A)-(I8) ,機械週期:2。

它們與上述的8085指令的差別只在於在做減法運算時沒有減掉進位旗標的內容。

4. INC :

累加器遞加:

INC A   ; 動作:(A)←(A)+1

此指令動作與8085之 “ INR A “相同,都只需要1個機械週期。

暫存器遞加:

INC Rn   ; 動作:(Rn)←(Rn)+1

此指令動作與8085之 “ INR R “相同,都只需要1個機械週期。8085的指令對於暫存器內容處理,有另一個指令是處理暫存器對的內含值—“
INX RP “ (動作:(RP)←(RP)+1,機械週期:1),不同於8051視為單一位元組的處理
,舉例如下:

(8051)

MOV R5, #15H   ;R5=15H

INC R5      ;R5=16H

(8085) 設暫存器對DE含有01FFH數值,那麼執行

INX D   ;執行之後,DE的值為0200H

INX E   ;執行之後,DE的值為0100H,忽略了低位部組元所產生的進位

直接位元組遞加:

INC direct   ; 動作:(direct)←(direct)+1

此指令動作與8085之 “ INR R “相同(動作:(R)←(R)+1),指定的位元組內容可以在暫存器A,B,C,D,E,H和L之中,動作上都只需要1個機械週期,但以下的寫法在8085是沒有對應的寫法:

(8051) INC 30H   ;把內部RAM位址30H的內容加1。

間接位元組遞加:

INC @Ri   ; 動作:((Ri))←((Ri))+1

此指令動作與8085之 “ INR M “相同(動作:(M)←(M)+1),8051只需1個機械週期,8085卻需要3個機械週期。

5. INC DPTR:將資料指標的內容加1,

INC DPTR   ; 動作:(DPTR)←(DPTR)+1

此指令動作與8085之 “ INX SP “相同,而且指令都不會影響任何旗標,8051需要2個機械週期,8085只需要1個機械週期。

6. DEC :

累加器遞減:

DEC A   ; 動作:(A)←(A)-1

此指令動作與8085之 “ DCR A “相同,都只需要1個機械週期。

暫存器遞減:

DEC Rn   ; 動作:(Rn)←(Rn)-1

此指令動作與8085之 “ DCR R “相同,都只需要1個機械週期,對進位期標沒有影響,都只需要1個機械週期。8085的指令對於暫存器內容處理,有另一個指令是處理暫存器對的內含值—“
DCX RP “
(動作:(RP)←(RP)-1),DCX指令只能減少暫存器對B&C,D&E,H&L或SP的內容,它會把兩個暫存器的內容當做單個16位元值處理,所以會有借位的產生,例如:

(8051)

MOV R5, #15H   ;R5=15H

DEC R5      ;R5=14H

(8085)

設暫存器對HL=9800H

DCX H      ;執行之後,HL=97FFH

直接位元組遞減:

DEC direct     ; 動作:(direct)←(direct)-1

此指令動作與8085之 “ DCR R “相同(動作:(R)←(R)-1),指定的位元組內容可以在暫存器A,B,C,D,E,H和L之中,動作上都只需要1個機械週期,但以下的寫法在8085是沒有對應的寫法:

(8051) DEC 30H   ;減1把內部RAM位址30H的內容

間接位元組遞減:

DEC @Ri   ; 動作:((Ri))←((Ri))-1

此指令動作與808之 “ DCR M “相同(動作:(M)←(M)-1),8051需要1個機械週期,8085卻需要3個機械週期。

7. MUL AB:

把累加器A的內容乘以暫存器B的內容,相乘之後所得的結果,高8位元存入B內,低8位元存入A內,執行指令需要4個機械週期。8051有乘法的指令,8085沒有乘法的指令。

8. DIV AB:

把累加器A的內容除以暫存器B的內容,得到的商存入A內,餘數則存入B內,執行指令需要4個機械週期。8085沒有除法的指令

9. DA A:

此指令不可以直接將累加器內16進位制數字轉換成BCD碼,也不可以使用於BCD碼的減法。它是將上一次兩個BCD碼相加後放在累加器內的和調整成兩個四位元的BCD碼。此指令與8085之
“ DAA “相同,都只需要1個機械週期。

動作:如果 [[(A3-0)>9] 或 [(AC)=1]

則(A3-0)←(A3-0)+6

如果 [[(A7-4)>9] 或 [(C)=1]

則(A7-4)←(A7-4)+6

表6. 8051算術運算指令

 

指 令

說 明

位元組

工作週期(時脈數)

ADD A,Rn 暫存器累加至累加器

1

12

ADD A,direct 直接位元組加至累加器

2

12

ADD A,@Ri 間接位元組加至累加器

1

12

ADD A,#data 常數值加至累加器

2

12

ADDC A,Rn 與C一起將暫存器加至累加器

1

12

ADDC A,direct 與C一起將直接位元組加至累加器

2

12

ADDC A,@Ri 與C一起將間接位元組加至累加器

1

12

ADDC A,#data 與C一起將常數值加至累加器

2

12

SUBB A,Rn 累加器減暫存器再減C

1

12

SUBB A,direct 累加器減直接位元組再減C

2

12

SUBB A,@Ri 累加器減間接位元組再減C

1

12

SUBB A,#data 累加器減常數值再減C

2

12

INC A 累加器加一

1

12

INC Rn 暫存器加一

1

12

INC direct 直接位元組加一

2

12

INC @Ri 間接位元組加一

1

12

DEC A 累加器減一

1

12

DEC Rn 站存器減一

1

12

DEC direct 直接位元組減一

2

12

DEC @Ri 間接位元組減一

1

12

INC DPTR 資料指標加一

1

24

MUL AB A乘以B

1

48

DIV AB A除以B

1

48

DA A 累加器作BCD調整

1

12

(2). 邏輯運算指令:

共有10種,其中8085不能對應到的指令有:”ANL A,direct”,”ORL A,direct”,”XRL A,direct”,”CLR A”,”SWAP
A”。

1. ANL ,:

累加器與暫存器做AND:

ANL A, Rn   ; 動作: (A)←(A) AND (Rn)

此指令動作與8085之 “ ANA R “相同,都只需要1個機械週期。

累加器與立即資料做AND:

ANL A, #data   ; 動作: (A)←(A) AND data

此指令動作與8085之 “ ANI I8 “相同,8051需要1個機械週期,8085需要2個機械週期。

累加器與直接位元組做AND:

ANL A, direct   ; 動作: (A)←(A) AND (direct)

此指令動作與8085之 “ ANA R “相似,都只需要1個機械週期,但以下的寫法8085是沒有對應的:

ANL A, 30H   ;把內部RAM位址30H的內容AND入累加器中

累加器與間接位元組做AND:

ANL A, @Ri    ; 動作: (A)←(A) AND ((Ri))

此指令動作與8085之 “ ANA M “相同,8051需要1個機械週期,8085需要2個機械週期。

2. ORL ,:

累加器與暫存器做OR:

ORL A, Rn   ; 動作: (A)←(A) OR (Rn)

此指令動作與8085之 “ ORA R “相同,都只需要1個機械週期。

累加器與立即資料做OR:

ORL A, #data   ; 動作: (A)←(A) OR data

此指令動作與8085之 “ ORI I8 “相同,8051需要1個機械週期,8085需要2個機械週期。

累加器與直接位元組做OR:

ORL A, direct   ; 動作: (A)←(A) OR (direct)

此指令動作與8085之 “ ORA R “相似,都只需要1個機械週期,但以下的寫法8085是沒有對應的:

ORL A, 30H   ;把內部RAM位址30H的內容OR入累加器中

累加器與間接位元組做OR:

ORL A, @Ri   ; 動作: (A)←(A) OR ((Ri))

此指令動作與8085之 “ ORA M “相同,8051需要1個機械週期,8085需要2個機械週期。

3. XRL ,:

累加器與暫存器做XOR:

XRL A, Rn   ; 動作: (A)←(A) XOR (Rn)

此指令動作與8085之 “ XRA R “相同,都只需要1個機械週期。

累加器與立即資料做XOR:

XRL A, #data   ; 動作: (A)←(A) XOR data

此指令動作與8085之 “ XRA I8 “相同,8051需要1個機械週期,8085需要2個機械週期。

累加器與直接位元組做XOR:

XRL A, direct   ; 動作: (A)←(A) XOR (direct)

此指令動作與8085之 “ XRA R “相似,都只需要1個機械週期,但以下的寫法8085是沒有對應的:

XRL A, 30H   ;把內部RAM位址30H的內容XOR入累加器中

累加器與間接位元組做XOR:

XRL A, @Ri   ; 動作: (A)←(A) XOR ((Ri))

此指令動作與8085之 “ XRA M “相同,8051需要1個機械週期,8085需要2個機械週期。

4. CLR A:清除累加器

CLR A   ; 動作: (A)←0 ; 機械週期:1

8085沒有如此動作的指令

5. CPL A:將累加器的內容反相

CPL A   ; 動作: (A)← NOT (A) ; 機械週期:1

此指令動作與8085之 “ CMA “相同,都只需要1個機械週期。

6. RL A:將累加器向左旋轉一位元

RL A   ; 動作: (An+1)←(An) n=0~6

(A0)←(A7)

此指令動作與8085之 “ RLC “相似,都只需要1個機械週期,但8051的指令不改變進位旗標,8085會改變進位旗標:

(8085)

RLC   ; 動作:(An+1)←(An) n=0~6

(A0)←(A7) ,(C)←(A7)

7. RLC A:將累加器經進位旗標向左旋轉

RLC A   ; 動作: (An+1)←(An) n=0~6

(A0)←(C)

(C)←(A7)

此指令動作與8085之 “ RAL “相同,都只需要1個機械週期。

8. RR A:將累加器向左旋轉一位元

RR A   ; 動作: (An)←(An+1) n=0~6

(A7)←(A0)

此指令動作與8085之 “ RRC “相同,都只需要1個機械週期,但

8051的指令不改變進位旗標,8085會改變進位旗標:

(8085)

RLC ; 動作:(An)←(An+1) n=0~6

(A7)←(A0) ,(C)←(A0)

9. RRC A:將累加器經進位旗標向左旋轉

RRC A  ; 動作: (An)←(An+1) n=0~6

(A7)←(C)

(C)←(A0)

此指令動作與8085之 “ RAR “相同,都只需要1個機械週期。

10. SWAP A:將累加器的高4位元和低4位元內容互相交換

SWAP A   ; 動作: (A3-0)←(A7-4) ; 機械週期:1

此指令動作在8085中沒有對應的指令

表7. 8051邏輯運算指令

 

指 令

說 明

位元組

工作週期(時脈數)

ANL A,Rn 暫存器AND至累加器

1

12

ANL A,direct 直接位元組AND至累加器

2

12

ANL A,@Ri 間接位元組AND至累加器

1

12

ANL A,#data 常數值AND累加器

2

12

ANL direct,A 累加器AND至直接位元組

2

12

ANL direct,#data 常數AND 至直接位元組

3

24

ORL A,Rn 暫存器OR至累加器

1

12

ORL A,direct 直接位元組OR至累加器

2

12

ORL A,@Ri 間接位元組OR至累加器

1

12

ORL A,#data 常數值加OR累加器

2

12

ORL direct,A 累加器OR至直接位元組

2

12

ORL direct,#data 常數OR至直接位元組

3

24

XRL A,Rn 暫存器XRL至累加器

1

12

XRL A,direct 直接位元組XRL至累加器

2

12

XRL A,@Ri 間接位元組XRL至累加器

1

12

XRL A,#data 常數值加XRL累加器

2

12

XRL direct,A 累加器XRL至直接位元組

2

12

XRL direct,#data 常數XRL 至直接位元組

3

24

CLR A 清除累加器

1

12

CPL A 累加器反相

1

12

RL A 累加器向左旋轉

1

12

RLC A 累加器與C一起向左旋轉

1

12

RR A 累加器向右旋轉

1

12

RRC A 累加器與C一起向右旋轉

1

12

SWAP A 累加器的高低四位元交換

1

12

(3). 資料轉移指令:

共有8種,其中8085不能對應到的指令有:

“,” MOV DPTR,#data16 “.” MOVC A,@A+”,” XCH , “,”

1. MOV ,:

暫存器內容載入累加器:

MOV A, Rn   ; 動作: (A)←(Rn)

此指令動作與8085之 “ MOV A,R “相同,都只需要1個機械週期,但8085”MOV”的指令能提供暫存器與暫存器間資料的轉移:

MOV RD, RS   ; 動作: (RD)←(RS),RD及RS可為B,C,D,E,H,或L

8085還提供了暫存器對載入累加器的指令:

LDAX RR   ; 動作: (A)←(RR),RR為暫存器對B&C或D&E指定的記憶體位址內容,8085需要2個機械週期。

暫存器內容載入直接位元組內:

MOV direct, Rn   ; 動作: (direct)←(Rn)

此指令動作與8085之 “ MOV RD,RS “相似,8051需要2個機械週期,8085只需要1個機械週期,而且都能提供暫存器與暫存器間資料的轉移,但8085
”MOV RD,RS ”指令,RD不能直接改寫成位址

暫存器內容載入間接位元組內:

MOV direct, @Ri   ; 動作: (direct)←((Ri))

此指令動作與8085之 “ MOV R,M “相似,都需要2個機械週期,但R不能直接改寫為位址。

立即資料載入累加器:

MOV A, #data   ; 動作: (A)←#data

此指令動作與8085之 “ MVI A,I8 “相同,8051需要1個機械週期,8085需要2個機械週期。

立即資料載入暫存器:

MOV Rn, #data   ; 動作: (Rn)←#data

此指令動作與8085之 “ MVI R,I8 “相同,8051需要1個機械週期,8085需要2個機械週期。

8085還提供了16位元立即資料載入暫存器對的指令:

LXI RP,I16 ; 動作: (RP)←I16 ,RP為暫存器對B&C,D&E,H&L,SP,需要3個機械週期。

立即資料載入直接位元組內:

MOV direct, #data   ; 動作: (direct)←#data

此指令動作與8085之 “ MVI M,I8 “相似,8051需要2個機械週期,8085需要3個機械週期。

立即資料載入間接位元組內:

MOV @Ri, #data   ; 動作: ((Ri))←#data

此指令動作與8085之 “ MVI M,I8 “相同,8051需要1個機械週期,8085需要3個機械週期。

直接位元組內容載入累加器:

MOV A, direct   ; 動作:(A)←(direct)

此指令動作與8085之 “ LDA direct “相同,8051需要1個機械週期,8085需要4個機械週期。

直接位元組內容載入暫存器:

MOV Rn, direct   ; 動作:(Rn)←(direct)

此指令動作與8085之 “ MOV RD,RS “相似,8051需要2個機械週期,8085需要1個機械週期,8085沒有將RS置換為位址的寫法

直接位元組內容載入直接位元組內:

MOV direct, direct   ; 動作:(direct)←(direct)

8051需要2個機械週期,8085沒有這樣的指令

直接位元組內容載入間接位元組內:

MOV @Ri, direct   ; 動作:((Ri))←(direct)

此指令動作與8085之 “ MOV M,R “相似,都需要2個機械週期。8085是使用暫存器對H&L來完成相同的動作:

LHLD 位址   ; 動作:L ← (位址)

H ← (位址+1) ; 機械週期:5

間接位元組內容載入累加器:

MOV A, @Ri   ; 動作:(A)←((Ri))

此指令動作與8085之 “ MOV A,M “相同,8051需要1個機械週期,8085需要2 個機械週期。

間接位元組內容載入直接位元組內:

MOV direct, @Ri   ; 動作:(direct)←((Ri))

此指令動作與“相似,都需要2個機械週期。8085是使用8085之 “ MOV R,M 暫存器對H&L來完成相同的動作:

SHLD 位址   ; 動作: (位址) ← L

(位址+1) ← H ; 機械週期:5

累加器內容載入暫存器:

MOV Rn, A   ; 動作: (Rn)←(A)

此指令動作與8085之 “ MOV R, A “相同,都只需要1個機械週期。

8085還提供將累加器內容載入暫存器對的指令:

STAX RR   ; 動作:(RR)←(A),此指令只能指定暫存器對B&C,D&E,例如:

設B=3FH, C=16H,A=3AH,則

STAX B   ; 執行之後,記憶體位址3F16H含有3AH

累加器內容載入直接位元組內:

MOV diret, A   ; 動作: (direct)←(A)

此指令動作與8085之 “ STA direct “相同,8051需要2個機械週期,8085需要4個機械週期。

累加器內容載入間接位元組內:

MOV @Ri, A   ; 動作: ((Ri))←(A)

此指令動作與8085之 “ MOV M,A “相同,8051需要1個機械週期,8085需要2個機械週期。

2. MOV DPTR,#data16:

將16位元的常數載入資料指標內。

MOV DPTR, #data16   ; 動作:(DPTR) ← data 15-0, 機械週期:2

MOV #1234H    ; 執行後高位元組DPH=12H,低位元組DPL=34H

8085沒有資料指標DPTR,只有儲存箱指標SP,且8085沒有這樣的指令

3. MOVC A,@A+:

此指令是到程式區裡讀一個位元組資料到累加器,這個位元組的位址是由累加器的值加上一個16位元基底暫存器所產生的。機械週期皆為2。8085沒有這樣的指令

基底暫存器為資料指標:

MOVC A, @A+DPTR  ; 動作: (A) ← ((A)+(DPTR))

基底暫存器為程式計數器:

MOVC A, @A+PC  ; 動作: (PC) ← (PC) +1

(A) ← ((A)+(PC))

4. MOVX ,:

此指令與8051之” MOV , ”主要差 別在於”MOVX”是對外部記憶體做存取動作,而”MOV”是對內部記憶體做存取。8085沒有內部記憶體,所以8085所使用的記憶體位址都是外部記憶體。因此,8085對應8051之”MOVX”指令,可以參考前面提過的8051之”MOV”指令部分

外部RAM的內容載入累加器:

MOVX A,@Ri    ; 動作: (A) ← ((Ri)) ;機械週期:2

DPTR定址的外部RAM內容載入累加器:

MOVX A,@DPTR   ; 動作: (A) ← ((DPTR)) ;機械週期:2

把累加器的內容載入外部RAM的Ri位址內:

MOVX @Ri,A   ; 動作: ((Ri)) ← (A) ;機械週期:2

把累加器的內容載入外部RAM的DPTR位址內:

MOVX @DPTR,A   ; 動作: (DPTR) ← (A) ;機械週期:2

5. PUSH direct: 將直接位元組的內容推入堆疊器內。

PUSH direct   ; 動作: (SP) ← (SP)+1

((SP)) ← (direct) ; 機械週期:2

此指令與8085之 " PUSH RR "有相似的作用,RR是暫存器對B&C,D&E,H&L和PSW(A&F),機械週期:3,但動作SP是呈現遞減的情形:

(SP) ← (SP)-2, STACK←RR

例如:

(8051)

設SP=09,DPTR=0123H

PUSH DPL   ;將23H存入RAM的0AH位址

PUSH DPH   ;將01H存入RAM的0BH位址

(8085)

設B=2AH,C=4CH,SP=9AAFH

PUSH B   ; 將2A存入RAM的9AAEH位址,4CH存入RAM的9AADH位址

所以可以看出8085可以利用暫存器做到資料指標的角色

6. POP direct:從堆疊區取回資料。

POP direct   ; 動作: (direct) ← ((SP))

(SP) ← (SP)-1 ; 機械週期:2

此指令與8085之 " POP RR "有相似的作用,RR是暫存器對B&C,D&E,H&L和PSW(A&F),機械週期:3,但動作SP是呈現遞加的情形:

RR←STACK, (SP)←(SP)+2

7. XCH ,:

累加器的內容和暫存器的內容互換:

XCH A,Rn   ; 動作: (A) ←→ (Rn) ;機械週期:1

8085沒有此指令動作但8085提供暫存器H&L與D&E內容的互相交換的指令:

XCHG    ; 動作: (HL) ←→ (DE) ;機械週期:1

例如:

(8085) 設HL=1234H,DE=ABCDH

XCHG   ;執行後,HL=ABCDH,DE=1234H

累加器的內容和直接位元組的內容互換:

XCH A,direct   ; 動作: (A) ←→ (direct) ;機械週期:1

8085沒有此指令動作

累加器的內容和間接位元組的內容互換:

XCH A,@Ri   ; 動作: (A) ←→ ((Ri)) ;機械週期:1

8085沒有此指令動作但8085提供儲存箱頂兩組位元內容和暫存器對H&L的內容互換指令:

XTHL   ; 動作: (STACK) ←→ (HL) ;機械週期:5

例如:

(8085) 設SP=10ADH,HL=0B3CH,記憶體位址10ADH含有F0H,記憶體位址10AEH含有0DH,那麼執行

XTHL ;執行後,L=F0H,H=0DH,記憶體位址10ADH含有3CH,記憶體位址10AEH含有0BH。

8. XCHD A,@Ri :交換低四位元

XCHD A,@Ri   ; 動作: (A

8085沒有這樣的指令

表8. 8051資料轉移指令

 

指 令

說 明

位元組

工作週期(時脈數)

MOV A,Rn 暫存器內容移至累加器

1

12

MOV A,direct 直接位元組內容移至累加器

2

12

MOV A,@Ri 間接位元組內容移至累加器

1

12

MOV A,#data 常數值移至累加器

2

12

MOV Rn,A 累加器內容移至暫存器

1

12

MOV Rn,direct 直接位元組內容移至暫存器

2

24

MOV Rn,#data 常數值移至暫存器

2

12

MOV direct,A 累加器內容移至直接位元組

2

12

MOV direct,Rn 暫存器內容移至直接位元組

2

24

MOV direct,direct 直接位元組內容移至直接位

元組

3

24

MOV direct,@Ri 間接位元組內容移至直接位

元組

2

24

MOV direct,#data 常數移至直接位元組

3

24

MOV @Ri,A 累加器內容移至間接位元組

1

12

MOV @Ri,direct 直接位元組內容移至間接位

元組

2

24

MOV @Ri,#data 常數移至間接位元組

2

12

MOV DPTR,#data 16 16位元常數移至資料指標

3

24

MOVC A,@A+DPTR 程式記憶體的資料移入累加器

1

24

MOVC A,@A+PC 程式記憶體的資料移入累加器

1

24

MOVX A,@Ri 外部RAM的資料移入累加器

(8位元定址)

1

24

MOVX A,@DPTR 外部RAM的資料移入累加器

(16位元定址)

MOVX @Ri,A 累加器內容寫到外部RAM

(8位元位址)

1

24

MOVX @DPTR,A 累加器內容寫到外部RAM

(16位元位址)

1

24

PUSH direct 直接位元組內容放至堆疊區

2

24

POP direct 從堆疊區拿回資料至直接位

元組

2

24

XCH A,Rn 累加器與暫存器的內容互換

1

12

XCH A,direct 累加器與直接位元組的內容

互相交換

2

12

XCH A,@Ri 累加器與間接位元組的內容

互相交換

1

12

XCHD A,@Ri 累加器與間接位元組的低四

位元互相交換

1

12

(4). 布林變數操作指令:

共有11種,其中8085不能對應的指令有:”CLR bit”,”SETB bit”,”ANL C,”,”ORL C,”,”MOV
,”,”JB bit,rel”,”JNB bit,rel”,”JBC bit,rel”.

1. CLR bit:

清除進位旗標內容:

CLR C   ; 動作: (C) ← 0 ;機械週期:1

8085採用以下三種方式清除進位旗標:

(1) STC   ;設置進位旗標為1

CMC   ;補算(反相)進位旗標

(2) ANA A   ;A的內容不變,但進位旗標被清除為0

(3) ORA A   ;A的內容不變,但進位旗標被清除為0

清除直接位元內容:

CLR bit   ; 動作: (bit) ← 0 ;機械週期:1

8085沒有此指令動作

2. SETB bit:

設定進位旗標內容:

SETB C   ; 動作: (C) ← 1

此指令動作與8085之 “ STC “相同,都只需要1個機械週期。

設定直接位元內容:

SETB bit   ; 動作: (bit) ← 1 ;機械週期:1

8085沒有此指令動作

3. CPL bit:

將進位旗標反相:

CPL C   ; 動作: (C) ← NOT (C)

此指令動作與8085之 “ CMC “相同,都只需要1個機械週期。

將直接位元反相:

CPL bit   ; 動作: (bit) ← NOT (bit) ; 機械週期:1

8085沒有此指令動作

4. ANL C,:

將進位旗標與直接位元內容做AND:

ANL C,bit   ; 動作: (C) ← (C) AND (bit)

將進位旗標與直接位元內容反相做AND:

ANL C,/bit   ; 動作: (C) ← (C) AND (NOT(bit))

以上指令都需要2個機械週期,但8085沒有這樣的指令

5. ORL C,:

將進位旗標與直接位元內容做ORL:

ORL C,bit   ; 動作: (C) ← (C) ORL (bit)

將進位旗標與直接位元內容反相做AND:

ORL C,/bit   ; 動作: (C) ← (C) ORL (NOT(bit))

以上指令都需要2個機械週期,但8085沒有這樣的指令

6. MOV ,:

將直接位元的內容載入進位旗標內:

MOV C,bit   ; 動作: (C) ← (bit) ;機械週期:1

將進位旗標的內容載入直接位元內:

MOV bit,C   ; 動作:(bit) ← (C) ;機械週期:2

8085沒有以上的指令動作

7. JC rel: 如果C=1就跳至相對位址

JC rel   ; 動作: 如果C=0, (PC) ← (PC)+2

如果 C=1, (PC) ← (PC)+相對位址

此指令與8085之 “ JC address “相同,8051需要2個機械週期,8085需要2或3個週期。其動作:

JC address   ; 如果 C=1, (PC) ← 位址

如果C=0, (PC) ← (PC)+1,執行下一指令

8. JNC rel: 如果C=0就跳至相對位址

JNC rel   ; 動作: 如果C=0, (PC) ← (PC)+相對位址 如果 C=1, (PC) ← (PC)+2

此指令與8085之 “ JNC address “相同,8051需要2個機械週期,8085需要2或3個週期。其動作:

JNC address   ; 如果 C=0, (PC) ← 位址

如果C=1, (PC) ← (PC)+1,執行下一指令

9. JB bit,rel: 如果bit=1就跳至相對位址

JB bit,rel   ; 動作: 如果bit=1, (PC) ← (PC)+相對位址

如果bit=0, (PC) ← (PC)+3

其機械週期為2,8085沒有此指令動作

10. JNB bit,rel: 如果bit=0就跳至相對位址

JNB bit,rel ; 動作: 如果bit=0, (PC) ← (PC)+相對位址

如果bit=1, (PC) ← (PC)+3

其機械週期為2,8085沒有此指令動作

11. JBC bit,rel: 如果bit=1就跳至相對位址,並且清除bit

JBC bit,rel   ; 動作: 如果bit=1, (PC) ← (PC)+相對位址

(bit) ← 0

如果bit=0, (PC) ← (PC)+3

其機械週期為2,8085沒有此指令動作

表9. 布林變數指令

 

指 令

說 明

位元組

工作週期(時脈數)

CLR C 清除進位旗標

1

12

CLR bit 清除bit

2

12

SETB C 設定進位旗標

1

12

SETB bit 設定bit=1

2

12

CPL C 進位旗標反相

1

12

CPL bit bit反相

2

12

ANL C,bit bit AND 至進位旗標

2

24

ANL C,/bit bit 反相後再AND至進位旗標

2

24

ORL C,bit bit OR 至進位旗標

2

24

ORL C,/bit bit 反相後OR至進位旗標

2

24

MOV C,bit bit之狀態移至進位旗標

2

12

MOV bit,C 進位旗標之狀態移至bit

2

24

JC rel 若C=1就跳躍

2

24

JNC rel 若C=0就跳躍

2

24

JB bit,rel 若bit=1就跳躍

3

24

JNB bit,rel 若bit=0就跳躍

3

24

JBC bit,rel 若bit=1就跳躍,且清除此位元

3

24

(5). 程式分控(Branch)指令:

@A+DPTR “,“ JZ rel “,” JNZ rel “,CJNE , “,” DJNZ ,rel

1. ACALL addr11:絕對副程式呼叫

ACALL addr11   ; 動作:(PC) ← (PC)+2

(SP) ← (SP)+1

((SP)) ← (PC7-0)

(SP) ← (SP)+1

((SP)) ← (PC15-8)

(PC10-0) ← page address ;機械週期:2

由於有效位址只有11位元,所以欲呼叫之副程式,位址必須在相同的2K byte範圍內。8085沒有此動作指令

2. LCALL addr16: 遠程副程式呼叫

LCALL addr16   ; 動作:(PC) ← (PC)+2

(SP) ← (SP)+1

((SP)) ← (PC7-0)

(SP) ← (SP)+1

((SP)) ← (PC15-8)

(PC15-0) ← page address ;機械週期:2

由於有效位址為16位元,所以呼叫的副程式位址可在64K byte程式記憶體的任何位址,本指令可簡寫為” CALL address ”。此指令與8085之
“ CALL address “有相同的效用,8085推入堆疊區的動作是呈遞減:

CALL address   ;動作: (SP) ← (SP)-1 ,STACK←PC8-15

(SP) ← (SP)-1 ,STACK←PC0-7

(PC15-0) ← address ;機械週期:5

3. RET : 由副程式返回主程式

RET   ; 動作: (PC15-8) ← ((SP))

(SP) ← (SP)-1

(PC7-0) ← ((SP))

(SP) ← (SP)-1

此指令動作與8085之 “ RET “相同,一般來說RET和CALL連用,8051需要2個機械週期,8085需要3個機械週期。

4. RETI: 由中斷副程式返回主程式

RET   ; 動作: (PC15-8) ← ((SP))

(SP) ← (SP)-1

(PC7-0) ← ((SP))

(SP) ← (SP)-1 ; 機械週期:2

在8051中斷副程式一定要用RETI做結尾,8085沒有這樣的指令。

5. AJMP addr11:絕對跳躍

AJMP addr11   ; 動作: (PC) ← (PC)+2

(PC10-0) ← page address ;機械週期:2

由於有效位址只有11位元,所以欲跳躍之目的位址,必須在相同的2K bytes範圍內。8085沒有此動作指令

6. LJMP addr16:遠程跳躍

LJMP addr16   ; 動作:(PC) ← address15-0

由於有效位址為16位元,所以跳躍之目的位址可在64K byte程式記憶體的任何位址,本指令可簡寫為” JMP address ”。此指令與8085之
“ JMP address “相同,8051需要2個機械週期,8085需要3個機械週期。

7. SJMP rel:短程跳躍

SJMP   ; 動作: (PC) ← (PC)+2

(PC) ← (PC)+相對位址 ; 機械週期:2

8085沒有這樣的指令

8. JMP @A+DPTR:間接跳躍

JMP @A+DPTR   ; 動作: (PC) ← (A)+(PC)+2 ; 機械週期:2

8085沒有這樣的指令

9. JZ rel: 如果累加器不等於零,則跳至相對位址

JZ rel   ; 動作: 如果A≠0, (PC) ← (PC)+相對位址

如果A=0,(PC) ← (PC)+2 ;機械週期:2

8085沒有這樣的指令。而8085的 “ JZ address “指令動作決定於零旗標值,如果零旗標值等於1,則跳至指定的位址;如果零旗標值等於0,則程式執行下一順序指令。機械週期2或3。

(8085) JZ address ;若Z=1, (PC) ← (PC)+位址

若Z=0, (PC) ← (PC)+1 ;

10. JNZ rel: 如果累加器等於零,則跳至相對位址

JNZ rel   ; 動作: 如果A=0, (PC) ← (PC)+相對位址

如果A≠0,(PC) ← (PC)+2 ;機械週期:2

8085沒有這樣的指令。而8085的 “ JNZ address “指令動作決定於零旗標值,如果零旗標值等於0,則跳至指定的位址;如果零旗標值等於1,則程式執行下一順序指令。機械週期:2或3。

(8085) JNZ address ;若Z=0, (PC) ← (PC)+位址

若Z=1, (PC) ← (PC)+1

11. CJNE ,,rel:

累加器的內容不等於直接位元組的內容就跳至相對位址:

CJNE A,direct,rel ;

動作: 若(A)=(direct), (PC) ← (PC)+3

若(A)≠(direct), (PC) ← (PC)+相對位址

若(A) < (direct),則(C) ← 1

否則(C) ← 0

累加器的內容不等於立即資料就跳至相對位址:

CJNE A,#data,rel ;

動作: 若(A)=data, (PC) ← (PC)+3

若(A)≠data, (PC) ← (PC)+相對位址

若(A) < (data),則(C) ← 1

否則(C) ← 0

暫存器的內容不等於立即資料就跳至相對位址:

CJNE Rn,#data,rel ;

動作: 若(Rn)=data, (PC) ← (PC)+3

若(Rn)≠data, (PC) ← (PC)+相對位址

若(Rn) < data,則(C) ← 1

否則(C) ← 0

間接位元組的內容不等於立即資料就跳至相對位址:

CJNE @Ri,#data,rel ;

動作: 若((Ri))=data, (PC) ← (PC)+3

若((Ri))≠data, (PC) ← (PC)+相對位址

若((Ri)) < data,則(C) ← 1

否則(C) ← 0

以上指令都需要2個機械週期,但8085沒有這樣的指令

12. DJNZ ,rel:

暫存器的內容遞減,結果不等於零則跳至相對位址:

DJNZ Rn,rel ;

動作: (Rn) ← (Rn)-1

若Rn≠0, 則(PC) ← (PC)+相對位址

若Rn=0, 則(PC) ← (PC)+2

直接位元組的內容遞減,結果不等於零則跳至相對位址:

DJNZ direct,rel ;

動作: direct ← direct-1

若direct≠0,則(PC) ← (PC)+相對位址

若direct=0,則(PC) ← (PC)+3

以上指令都需要2個機械週期,但8085沒有這樣的指令

13. NOP :無動作。

動作:(PC) ← (PC)+1

此指令動作與8085之 “ NOP “相同,都需要1個機械週期。

表10. 程式分控指令

 

指 令

說 明

位元組

工作週期(時脈數)

ACALL addr11 絕對式副程式呼叫

2

24

LCALL addr16 遠程副程式呼叫

3

24

RET 從副程式返回

1

24

RETI 從中斷副程式返回

1

24

AJMP addr11 絕對式跳躍

2

24

LJMP addr11 遠程跳躍

3

24

SJMP rel 短程跳躍

2

24

JMP @A+DPTR 間接跳躍

1

24

JZ rel 若A=0就跳躍

2

24

JNZ rel 若A≠0就跳躍

2

24

CJNE A,direct,rel 若累加器與直接位元組內容不

相等就跳躍

3

24

CJNE A,#data,rel 若累加器內容不等於data就

跳躍

3

24

CJNE Rn,#data,rel 若暫存器內容不等於data就

跳躍

3

24

CJNE @Ri,#data,rel 若間接位元組內容不等於data

就跳躍

3

24

DJNZ Rn,rel 暫存器內容減一,若不等於零

就跳躍

2

24

DJNZ direct,rel 直接位址內容減一,若不等於零

就跳躍

3

24

NOP 沒動作

1

12

(ii). 8085的指令集

(1). 算術運算指令:8051的算術運算指令都能對應到8085。

  1. ADD   加到累加器
  2. ADI   以立即資料加到累加器
  3. ADC   利用進位旗標加到累加器
  4. ACI   利用進位旗標以立即資料加到累加器
  5. SUB   從累加器減去
  6. SUI   累加器減去立即資料
  7. SBB   利用貸位旗標從累加器中減去
  8. SBI   利用貸位旗標從累加器中減去立即資料
  9. INR   增加指定組元1
  10. DCR  減少指定組元1
  11. INX   增加暫存器對1
  12. DCX   減少暫存器對1
  13. DAD   將指定的暫存器對的內容加到H和L暫存器對中
  14. DAA   調整累加器的8位元數值成兩個4位元二進位碼十 進位數字,在多位元組算術運算中,DAA是緊跟在算術運算指令之後。

(表中目的碼:
ppqq代表4個16進位數字記憶體的位址,
YY代表兩個16進位數字資料YYYY代表4個16進位數字資料,
X代表資料表選擇的二進位數字,
ddd代表識別目的暫存器的二進位數字,
sss代表識別來源暫存器的二進位數字:
000=B,001=C,010=D,011=E,100=H,101=L,111=A。
機械週期種類為:1=4個T狀態的操作元取出,
2=6個T狀態的操作元取出,
3=記憶體讀取,4=I/O讀取,5=記憶體寫入,6=I/O寫入,7=通徑等候)

表11. 8085算術運算指令目的碼和執行週期

 

指令

目的碼

組元

時脈週期

8085A

機械週期種類

8080A

8085A

ACI DATA

CE YY

2

7

7

1 3

ADC REG

10001XXX

1

4

4

1

ADC M

8E

1

7

7

1 3

ADD REG

10000XXX

1

4

4

1

ADD M

86

1

7

7

1 3

ADI DATA

C6 YY

2

7

7

1 3

DAA

27

1

4

4

1

DAD RP

00XX1001

1

10

10

1 7 7

DCR REG

00XXX101

1

5

4

1

DCR M

35

1

10

10

1 3 5

DCX RP

00XX1011

1

5

6

2

INR REG

00XXX100

1

5

4

1

INR M

34

1

10

10

1 3 5

INX RP

00XX0011

1

5

6

2

SBB REG

10011XXX

1

4

4

1

SBB M

9E

1

7

7

1 3

SBI DATA

DE YY

2

7

7

1 3

SUB REG

10010XXX

1

4

4

1

SUB M

96

1

7

7

1 3

SUI DATA

D6 YY

2

7

7

(2). 邏輯運算指令:其中8051不能對應的指令有:”CMP R”,”CMP M”,”CPI I8 “。

  1. ANA   與累加器AND運算
  2. ANI   利用立即資料與累加器AND運算
  3. ORA   與累加器OR運算
  4. ORI   利用立即資料與累加器OR運算
  5. XRA   與累加器XOR運算
  6. XRI   利用立即資料與累加器XOR運算
  7. CMP   與累加器比較:比較的結果由進位旗標和零旗標表示。
    CMP R   ; 動作: 兩值相等時, Z=1
    兩值同號時,累加器值較大→Z=0,C=0
    兩值同號時,累加器值較小→Z=0,C=1
    兩值異號或其中一值為補數時,累加器值較大→Z=0,C=0
    兩值異號或其中一值為補數時,累加器值較小→Z=0,C=1
    機械週期:1
    CMP M ;動作如" CMP R ",但機械週期為2。
  8. CPI   利用立即資料與累加器比較,結果由進位旗標和零旗標表示。
    CPI I8 ; 動作: 兩值相等時, Z=1
    兩值同號時,累加器值較大→Z=0,C=0
    兩值同號時,累加器值較小→1Z=0,C=1
    兩值異號或其中一值為補數時,累加器值較大→Z=0,C=0
    兩值異號或其中一值為補數時,累加器值較小→Z=0,C=1
    機械週期:2
  9. RLC   左旋轉累加器一位
  10. RRC   右旋轉累加器一位
  11. RAL   左旋轉累加器一位,經過進位數元
  12. RAR   右旋轉累加器一位,經過進位數元
  13. CMA   補算累加器
  14. CMC   補算進位旗標
  15. STC   設置進位旗標

表12. 8085邏輯運算指令目的碼和執行週期

 

指令

目的碼

組元

時脈週期

8085A

機械週期種類

8080A

8085A

ANA REG

10100XXX

1

4

4

1

ANA M

A6

1

7

7

1 3

ANI DATA

E6 YY

2

7

7

1 3

CMA

2F

1

4

4

1

CMC

3F

1

4

4

1

CMP REG

10111XXX

1

4

4

1

CMP M

BE

1

7

7

1 3

CPI DATA

FE YY

2

7

7

1 3

ORA REG

10110XXX

1

5

4

1

ORA M

B6

1

7

7

1 3

ORI DATA

F6 YY

2

7

7

1 3

RAL

17

1

4

4

1

RAR

1F

1

4

4

1

RLC

07

1

4

4

1

RRC

0F

1

4

4

1

STC

37

1

4

4

1

XRA REG

10101XXX

1

4

4

1

XRA M

AE

1

7

7

1 3

XRI DATA

EE YY

2

7

7

3

(3)資料轉移指令:其中8051不能對應的指令有:” XCHG “,” XTHL “。

  1. MOV   轉移
  2. MVI   轉移立即資料
  3. LDA   直接由記憶體裝載累加器
  4. STA   直接儲存累加器到記憶體
  5. LHLD   直接由記憶體裝載H和L暫存器
  6. SHLD   直接儲存H和L暫存器到記憶體
  7. LXI   以立即資料裝載暫存器對
  8. LDAX   由暫存器對裡的位址指定的記憶體裝載累加器
  9. STAX   儲存累加器到暫存器對裡的位址指定的記憶體中
  10. XCHG   將暫存器對D和E與暫存器對H和L交換
    XCHG   ; 動作: (HL) ←→ (DE) ;機械週期:1
  11. XTHL   以暫存器對H和L與儲存箱頂兩組元交換
    XTHL   ; 動作: (STACK) ←→ (HL) ;機械週期:5

表13. 8085資料轉移指令目的碼和執行週期

 

指令

目的碼

組元

時脈週期

8085A

機械週期種類

8080A

8085A

LDA ADDR

3A ppqq

3

13

13

1 3 3 3

LDAX RP

000X0001

3

10

10

1 3

LHLD ADDR

2A ppqq

3

16

16

1 3 3 3 3

LXI RP,DATA16

00XX0001

YYYY

3

10

10

1 3 3

MOV REG,REG

01dddsss

1

5

4

1

MOV M,REG

01110sss

3

10

10

1 5

MOV REG,M

01ddd110

1

7

7

1 3

MVI REG,DATA

00ddd110

YYYY

2

7

7

1 3

MVI M,DATA

36 YY

2

10

10

1 3 5

SHLD ADDR

22 ppqq

3

16

16

1 3 3 5 5

STA ADDR

32 ppqq

3

13

13

1 3 3 5

STAX RP

000X0010

1

7

7

1 5

XCHG

EB

1

4

4

1

XTHL

E3

1

18

16

5

(4)分控指令:

1. 無條件分控指令 :

在任何情況下都改變程式執行的正常順序,8051都有指令可以對應。

1.1 JMP 跳控
1.2 CALL 叫控
1.3 RET 回轉

2. 條件分控指令:

取決於決策條件是否成立。8085於取出指令第二位元組時試驗條件,若特定的狀況沒有滿足,就會跳越過指令的第二位元組去取出下一指令的操作碼。 “,

2.1 條件跳控:

8051不能對應的指令有:” JZ “,” JNZ “,” JPE “,” JPO “,JP “,” JM “,” JPE “,” JPO “.

2.1.1 JC address: 若進位旗標等於1,跳控到指定的位址。
2.1.2 JNC address: 若進位旗標等於0,跳控到指定的位址。
2.1.3 JZ address: 若零旗標等於1,跳控到指定的位址。
8051沒有這樣的指令。機械週期:2或3。
2.1.4 JNZ address: 若零旗標等於0,跳控到指定的位址。
8051沒有這樣的指令。機械週期:2或3。
2.1.5 JP address:  若帶號旗標等於0,跳控到指定的位址。
動作: 若S=0,(PC) ← 位址
若S=1,(PC) ← (PC)+1 ,執行下一指令。
8051沒有這樣的指令。機械週期: 2或3。

2.1.6 JM address:  若帶號旗標等於1,跳控到指定的位址。
動作: 若S=1,(PC) ← 位址
若S=0,(PC) ← (PC)+1 ,執行下一指令。
8051沒有這樣的指令。機械週期: 2或3。

2.1.7 JPE address:  若同位數旗標等於1,跳控到指定的位址。
動作: 若P=1,(PC) ← 位址
若P=0,(PC) ← (PC)+1 ,執行下一指令。
8051沒有這樣的指令。機械週期: 2或3。

2.1.8 JPO address:  若同位數旗標等於0,跳控到指定的位址。
動作: 若P=1,(PC) ← 位址
若P=0,(PC) ← (PC)+1 ,執行下一指令。
8051械週期: 2或3。沒有這樣的指令。機

2.2 條件叫控:

8051不能對應以下的指令,不過8051可以使用相同的指令組合對應8085”CC”與”CNC”。

2.2.1 CC address:  具有JC和PUSH指令的組合功能。

動作: 若C=1,(SP) ← (SP)-1,(STACK)←(PC8-15)
(SP) ← (SP)-1,(STACK)←(PC0-7 )
(PC) ← 位址
若C=0,(PC) ← (PC)+1
機械週期: 2或5。

2.2.2 CNC address:  具有JNC和PUSH指令的組合功能。

動作: 若C=0,(SP) ← (SP)-1,(STACK)←(PC8-15)
(SP) ← (SP)-1,(STACK)←(PC0-7 )
(PC) ← 位址
若C=1,(PC) ← (PC)+1
機械週期: 2或5。

2.2.3 CZ address:  具有JZ和PUSH指令的組合功能。

動作: 若Z=1,(SP) ← (SP)-1,(STACK)←(PC8-15)
(SP) ← (SP)-1,(STACK)←(PC0-7)
(PC) ← 位址
若Z=0,(PC) ← (PC)+1
機械週期: 2或5。

2.2.4 CNZ address:  具有JNZ和PUSH指令的組合功能。

動作: 若Z=0,(SP) ← (SP)-1,(STACK)←(PC8-15)
(SP) ← (SP)-1,(STACK)←(PC0-7)
(PC) ← 位址
若Z=1,(PC) ← (PC)+1
機械週期: 2或5。

2.4.5 CP address:  具有JP和PUSH指令的組合功能。

動作: 若S=0,(SP) ← (SP)-1,(STACK)←(PC8-15)
(SP) ← (SP)-1,(STACK)←(PC0-7)
(PC) ← 位址
若S=1,(PC) ← (PC)+1
機械週期: 2或5。

2.4.6 CM address:  具有JM和PUSH指令的組合功能。

動作: 若S=1,(SP) ← (SP)-1,(STACK)←(PC8-15)
(SP) ← (SP)-1,(STACK)←(PC0-7)
(PC) ← 位址
若S=0,(PC) ← (PC)+1
機械週期: 2或5。

2.4.7 CPE address:  具有JPE和PUSH指令的組合功能。

動作: 若P=1,(SP) ← (SP)-1,(STACK)←(PC8-15)
(SP) ← (SP)-1,(STACK)←(PC0-7)
(PC) ← 位址
若P=0,(PC) ← (PC)+1
機械週期: 2或5。

2.4.8 CPO address:  具有JPO和PUSH指令的組合功能。

動作: 若P=0,(SP) ← (SP)-1,(STACK)←(PC8-15 )
(SP) ← (SP)-1,(STACK)←(PC0-7 )
(PC) ← 位址
若P=1,(PC) ← (PC)+1
機械週期: 2或5。

2.3 條件回轉:

2.3.1 RC :若進位旗標等於1,由儲存箱中取出兩位元組資料,存入程式計數器中。

動作:若C=1,(PC)←(STACK), (SP)←(SP)+2
若C=0,(PC)←(PC)+1
機械週期:1或3。

2.3.2 RNC:若進位旗標等於0,由儲存箱中取出兩位元組資料,存入程式計數器中。

動作:若C=0,(PC)←(STACK), (SP)←(SP)+2
若C=1,(PC)←(PC)+1
機械週期:1或3。

2.3.3 RZ: 若零旗標等於1,由儲存箱中取出兩位元組資料,存入程式計數器中。

動作:若Z=1,(PC)←(STACK), (SP)←(SP)+2
若Z=0,(PC)←(PC)+1
機械週期:1或3。

2.3.4 RNZ:若零旗標等於0,由儲存箱中取出兩位元組資料,存入程式計數器中。

動作:若Z=0,(PC)←(STACK), (SP)←(SP)+2
若Z=1,(PC)←(PC)+1
機械週期:1或3。

2.4.5 RP: 若帶號旗標等於1,由儲存箱中取出兩位元組資料,存入程式計數器中。

動作:若S=1,(PC)←(STACK), (SP)←(SP)+2
若S=0,(PC)←(PC)+1
機械週期:1或3。

2.4.6 RM: 若帶號旗標等於0,由儲存箱中取出兩位元組資料,存入程式計數器中。

動作:若S=0,(PC)←(STACK), (SP)←(SP)+2
若S=1,(PC)←(PC)+1
機械週期:1或3。

2.4.7 RPE:若同位旗標等於1,由儲存箱中取出兩位元組資料,存入程式計數器中。

動作:若P=1,(PC)←(STACK), (SP)←(SP)+2
若P=0,(PC)←(PC)+1
機械週期:1或3。

2.4.8 RPO:若同位旗標等於1,由儲存箱中取出兩位元組資料,存入程式計數器中。

動作:若P=0,(PC)←(STACK), (SP)←(SP)+2
若P=1,(PC)←(PC)+1
機械週期:1或3

表14。 條件回轉指令

 

條件跳控

條件叫控

條件回轉

試驗條件

JC

CC

RC

進位(C=1)

JNC

CNC

RNC

無進位(C=0)

JZ

CZ

RZ

零(Z=1)

JNZ

CNZ

RNZ

非零(Z=0)

JP

CP

RP

正數(S=0)

JM

CM

RM

負數(S=1)

JPE

CPE

RPE

偶同位數(P=1)

JPO

CPO

RPO

奇同位數(P=0)

3. 其他兩個指令:8051沒有這樣的指令。

3.1 PCHL 轉移H和L給程式計數器

動作: (PC8-15) ← (H),(PC0-7) ← (L)
機械週期:1

3.2 RST 用於中斷的特殊重新開始指令

動作: (RST5,4,3) ← 位址碼
機械週期:3

表15. 8085分控指令目的碼和執行週期

 

指令

目的碼

組元

時脈週期

8085A

機械週期種類

8080A

8085A

CALL LABLE

CD ppqq

3

17

18

2 3 3 5 5

CC LABLE

DC ppqq

3

11/17

9/18

2 3,2 3 3 5 5

CM LABLE

FC ppqq

3

11/17

9/18

2 3,2 3 3 5 5

CNC LABLE

D4 ppqq

3

11/17

9/18

2 3,2 3 3 5 5

CNZ LABLE

C4 ppqq

3

11/17

9/18

2 3,2 3 3 5 5

CP LABLE

F4 ppqq

3

11/17

9/18

2 3,2 3 3 5 5

CPE LABLE

EC ppqq

3

11/17

9/18

2 3,2 3 3 5 5

CPO LABLE

E4 ppqq

3

11/17

9/18

2 3,2 3 3 5 5

CZ LABLE

CC ppqq

3

11/17

9/18

2 3,2 3 3 5 5

JC LABLE

DA ppqq

3

10

7/10

1 3,1 3 3

JM LABLE

FA ppqq

3

10

7/10

1 3,1 3 3

JMP LABLE

C3 ppqq

3

10

10

1 3 3

JNC LABLE

D2 ppqq

3

10

7/10

1 3,1 3 3

JNZ LABLE

C2 ppqq

3

10

7/10

1 3,1 3 3

JP LABLE

F2 ppqq

3

10

7/10

1 3,1 3 3

JPE LABLE

EA ppqq

3

10

7/10

1 3,1 3 3

JPO LABLE

E2 ppqq

3

10

7/10

1 3,1 3 3

JZ LABLE

CA ppqq

3

10

7/10

1 3 3 3

PCHL

E9

1

5

6

2

RC

D8

1

5/11

6/12

2,2 3 3

RET

C9

1

10

10

1 3 3

RM

F8

1

5/11

6/12

2,2 3 3

RNC

D0

1

5/11

6/12

2,2 3 3

RNZ

C0

1

5/11

6/12

2,2 3 3

RP

F0

1

5/11

6/12

2,2 3 3

RPE

E8

1

5/11

6/12

2,2 3 3

RPO

E0

1

5/11

6/12

2,2 3 3

RST N

11XXX111

1

11

12

2 3 3

RZ

C8

1

5/11

6/12

2,2 3 3

(5). 儲存箱,輸入/輸出和機械控制指令:

其中8051沒有的指令:” XTHL “,” SPHL “,” HLT”.

  1. PUSH 將兩組元資料推入儲存箱中
  2. POP 從暫存箱中取出兩組元資料
  3. XTHL 以暫存器對H和L與儲存箱頂兩組元交換
    XTHL ;動作: (STACK) ←→ (HL) ; 機械週期:5。
  4. SPHL 將H和L的內容轉移給儲存箱指標暫存器SP
    SPHL ;動作: (SPHL) ←→ (HL) ; 機械週期:1。
  5. IN 起動輸入操作,將8位元的資料由特定的輸入/輸出埠載入累加器
    IN 出入埠 ;動作: 位址通徑8-15 ← 出入埠
    A ←出入埠的資料 ; 機械週期:3
    8051是採用MOV指令將輸入/輸出埠或是緩衝器中的資料取出,如:”MOV A,P1”,”MOV A,SBUF”…等等。
  6. OUT 起動輸出操作,將累加器中8位元的資料輸出到特定的輸入/輸出埠。
    OUT 出入埠 ;動作:出入埠←位址通徑8-15
    出入埠的資料←A ; 機械週期:3
    8051是採用MOV指令將資料輸出到輸入/輸出埠或是緩衝器中,如:”MOV P1,A”,”MOV SBUF,A”…等等。
  7. EI 使中斷系統致能,機械週期:1。
  8. DI 使中斷系統無能,機械週期:1。
  9. HLT 暫停,處理機處於呆候狀況,機械週期:1。在使用HLT
    指令前要使中斷系統致能,如果執行HLT指令時,中斷系統無能,唯一能使處理機重新起動的是應用重置訊號。一般的8051沒有此指令動作,但是如果選擇使用CHMOS版本的8051,其功率下降模式指令-“ORL
    PCON,#20H”,可以達到相同的效果。
  10. NOP 無動作

表16. 8085儲存箱,輸入/輸出和機械控制指令目的碼和執行週期

 

指令

目的碼

組元

時脈週期

8085A

機械週期種類

8080A

8085A

DI

F3

1

4

4

1

EI

FB

1

4

4

1

HLT

76

1

4

4

1

IN PORT

DB YY

2

10

10

1 3 4

NOP

00

1

4

4

1

OUT PORT

D3 YY

2

10

10

1 3 6

POP RP

11XX0001

1

10

10

1 3 3

PUSH RP

11XX0101

1

11

12

2 5 5

SPHL

F9

1

5

6

2

XTHL

E3

1

18

16

1 3 3 5 5

(6). 中斷指令

RIM :此指令將8位元的資料載入累加器,表示串列輸入資料與中斷情形。

此指令將下列資料載入累加器中:

 

7

6

5

4

3

2

1

0

SID

17

16

15

IE

7.5

6.5

5.5

位元0~2:硬體中斷罩除,位元內容等於1時罩除。
位元3:中斷使能旗標,位元內容等於1時使能。
位元4~6:硬體等候中斷,位元內容等於1時等候中。
位元7:串列輸入資料位元,位元內容等於1時則有。
機械週期:1。

SIM :由累加器的內容來執行以下的功能:設置應體中斷RST5.5,

RST6.5和RST7.5的中斷罩除位元,重置RST7.5的邊緣感測輸入,輸出累加器位元7之值給串列輸出資料保存器。

機械週期:1。

 

7

6

5

4

3

2

1

0

SOD

SDE

XXX

R7.5

MSE

M7.5

M6.5

M5.5

位元0~2:分別代表RST5.5,RST6.5,RST7.5罩除位元,
若位元內容等於1則罩除,等於0則有效。
位元3:罩除設置使能,若為0,位元0~2被忽略;若為1,罩除位元被設置。
位元4:重置RST7.5:若為1,RST7.5正反器被重置為0。
位元5:沒有使用。
位元6:若為1,位元7輸出給串列輸出資料保存器。
位元7:串列輸出資料:若位元6等於0則被忽略。


四 太空級晶片與一般級晶片的差異

一般我們在地球表面所使用的晶片,由於空間中的幅射粒子很少,所以不必考慮到幅射線的影響。但是高空飛行器如:衛星,太空梭…等等,它們飛行的高度會受 到大量幅幅射線的影響,此時幅射線就會明顯的影響晶片的壽命及穩定性。晶片往往會因為承受強烈的粒子轟擊,而造成薄膜結構性及電性的破壞,此種破壞稱為” 幅射性損害”。這些幅射粒子的來源大致可分為下列四種:

  1. 陷入在 Van Allen 帶的電子與質子。
  2. 陷入在磁氣圈的重離子。
  3. 宇宙射線中的質子與重離子。
  4. 從太陽燄斑來的質子與重離子。

以上所提的四種幅射粒子來源都會受到太陽活動的影響。在電子學上,幅射破壞可分為兩類:一種是總離子幅射量(Total Ionizing Dose),另一種是單一事件的影響(Single
Event Effects)。總離子幅射量指的是元件長期暴露在離子化幅射下累增的退化影響。而幅射量dose的定義為物質單位質量所受到的幅射能量,單位通常為rads或gray(Gy),1
Gy=100rads,1 rad=6.24×107MeV/g。單一事件的影響指的是單一的離子化粒子,具有足夠的能量入射到元件上所產生的影響。不同的入射粒子與元件所產生的單一事件的影響是不同的。而單一事件所產生的影響一般分為兩種型態:軟體上的錯誤(soft
errors)與硬體上的錯誤(hard errors)。軟體上的錯誤不會對元件產生破壞,它可能造成記憶體單元或閉鎖一個位元的改變,或是在輸入/輸出,邏輯等電路造成變換。而硬體上的錯誤是指對於元件功能造成永久性的影響,形成對元件本體的破壞。

對於金屬氧化半導體而言,再經過幅射後,會造成固定氧化層電荷及介面阻陷濃度的增加。這些放射線離子主要的影響是會產生電子-電洞對穿越氧化層。這些被 阻陷的電洞可經由回火來移除。氧化層在長晶的過程中可由經驗找出最佳的狀況來強化氧化層。其他強化抗幅射影響的製程有利用鋁來做防護,阻止從空間來的大部 分電子,並且增加MOSFET的起始電壓,如此可減低經由放射影響對電壓改變的靈敏度。

太空電子學已經發展了好幾種不同的電路用來保護與恢復單一事件對積體電路所產生的閉鎖。相較之下,太空級的晶片穩定性與使用壽命比一般晶片來的好。例如LPT(Latchup
Protection Technology)電路是被設計用來保護與恢復易受影響的積體電路元件,有下列幾種特色:

  1. 提供元件電流的限制,限制單一事件閉鎖(Single Event Latchup)電流。
  2. 能夠在預設的初始值偵測SEL電流的增加,防止毀滅性的故障。
  3. 當SEL電流超出限制,可以對被保護的元件產生暫時停止運作。
  4. 元件在暫時停止運作的模式中,能夠維持一段預設的時間。
  5. 在暫時停止運作的模式後,元件能夠回歸到原來運作的層次。

以HARRIS公司出產的產品為例,如果產品編號末端帶有RH字樣,就是代表此晶片具有抗幅射的特性。就HS-80C85RH而言,其抗幅射的系數如下:

Parametrics Guaranteed : 1×105 RAD (防護測量的保證值)
Transient Upset > 1×108 RAD/s (防止短暫混亂的上限值)
Latch-up Free > 1×1012 RAD/s (防止閉鎖的上限值)


五 程式比較

以下我們以常用的時間延遲為例子,分別以8051與8085來設計0.2秒時間延遲的副程式。

(I). 設8085使用2MHz的時脈頻率,其時脈週期為0.5微秒。我們先暫時將副程式寫為


DELAY:  MVI E,NUMRQ1   ;將需要的數字載入暫存器D與E內

MVI D,NUMRQ2   ;

WAIT:  DCR E        ;先遞減E

JNE WAIT       ;若不為0,繼續遞減

DCR D        ;若E降為0,則遞減D

JNZ WAIT       ;若D不為0,再去遞減E

RET          ;時間延遲0.2秒後回轉


WAIT迴圈中DCR指令執行需要5個時脈週期,JNZ需要10個時脈週期。每遞減一次D,DCR E指令會執行16×16=256次。所以我們可以利用下面的計算式來計算NUMRQ2和NUMRQ1:

0.2秒=0.2×106微秒
=0.5微秒×[(5+10)+256×(5+10)]×NUMRQ2
+0.5微秒×(5+10)×NUMRQ1

方程式中的兩個未知數應該都是整數,我們可先忽略NUMRQ1項,先求得NUMRQ2最接近的整數值,將此值代入NUMRQ2再求得NUMRQ1值,如此可以得到:

NUMRQ1=103=67H
NUMRQ2≒196=C4H

(II). 設8051的石英振盪頻率為12MHz,所以一個機械週期(=12個石英振盪週期)為1微秒,我們將副程式寫為:

;------------------------------------------------------------------------------------------------

;delay time=R5*(20ms) fXTAL=12MHz

;------------------------------------------------------------------------------------------------

DELAY:

MOV R6,#40   ;共執行(R5)次

DEL:

MOV R7,#249   ;共執行(R6)*(R5)次

$1:

DJNZ R7,$1    ;共執行[(R7)*(R6)]*(R5)次

DJNZ R6,DEL   ;共執行(R6)*(R5)次

DJNZ R5,DELAY  ;共執行(R5)次

RET        ;共執行一次

;------------------------------------------------------------------------------------------------

8051 MOV指令需要1個機械週期,DJNZ指令需要2個機械週期,RET指令需要2個機械週期,所以可算出上面這個副程式的總延遲時間:

T= (R5)*1微秒
+(R6)*(R5)*1微秒
+(R7)*(R6)*(R5)*2微秒
+(R6)*(R5)*2微秒
+(R5)*2微秒
=20043*(R5)微秒+2微秒

現在要求延遲200毫秒,所以可令R5=10,再呼叫DELAY副程式,此時實際的延遲時間為:T=200.432毫秒。

從 時間延遲的程式例子來看,8051與8085的程式迴圈結構類似,但在暫存器的使用上,8085的寫法習慣使用暫存器對來處理,好處是在處理某些資料時可 同時處理16位元的資料;而8051除了能處理16位元的資料,在暫存器的使用上彈性較大,沒有因為特別的目的而需使用暫存器對的設計。

但在算術運算方面,8051的指令比8085實用很多,最明顯的是8051有乘法與除法的指令,而8085卻需要寫一個副程式來執行乘法與除法,以下我們以乘法6AH×5CH=2618H為例,比較8051與8085:

;----------------------------------------------------------------

;8051的乘法指令寫法

;----------------------------------------------------------------

MOV A,#6AH   ;A=6AH

MOV B,#5CH   ;B=5CH

MUL AB      ;6AH×5CH=2618H,故B=26H, A=18H

;----------------------------------------------------------------

;----------------------------------------------------------------

;8085的乘法副程式;當剛始執行MULT1時,各暫存器的內容為:

; A=00000000, B=00000000, C=01011100=5CH, D=01101010=6AH,

; E=00001000, 進位旗標=0

;----------------------------------------------------------------

MULTR:  MVI B,00H   ;清除代表最後結果的高位部組元為0

MVI E,08H   ;裝載計數器(兩個不帶號8位元二進位數相乘)

XRA A   ;清除進位旗標和累加器A為0

MULT1:  MOV A,C   ;將乘數載入累加器中

RAR   ;把A位元值向右移一位,最低位元值旋入進位旗標

MOV C,A   ;將右旋後的A值存回C

MOV A,B   ;將結果的高位部組元轉移到A中

JNC MULT2   ;乘數的位元值等於0,則跳至MULT2

ADD D   ;若乘數的位元值等於1,加上被乘數

MULT2: RAR 位部組元值向右移一位  ;將結果的高

MOV B,A   ;存回B

DCR E   ;降算計數器

RNZ MULT1   ;若不等於0,則跳至MULT1繼續運算

MOV A,C   ;若等於0,將C的值載入累加器中

RAR   ;還需要最後一次旋轉的結果

MOV C,A   ;將A的值存回C中

RET   ;此時低位部組元值才符合正確的乘積

;----------------------------------------------------------------

很 顯然的可看出在算術運算上,指令的撰寫8051比8085好很多。而當指令需要做輸入/輸出的動作時,會因為所搭配的輔助晶片的不同而有不同的程式寫 法,8051有32隻I/O接腳,8085只有27隻I/O接腳,而且8051的輸入/輸出埠暫存器比8085多,且可視這些輸入/輸出埠暫存器為資料轉 移運算的位元組,例如在輸入按鈕狀態資料時:

;-----------------------------------------------------------------

(8085) IN 00H ;由輸入/輸出埠00輸入按鈕狀態資料

;-----------------------------------------------------------------

(8051) WAIT: JB P3.0下,WAIT ;檢查在P3.0接腳上的開關是否被按

;-----------------------------------------------------------------

關於硬體接腳上的指令應用8051與8085就有一些差異,當然這也是它們指令語法的特色。


六 結論:

由於8085發展的時間較早,所以在指令的架構會比較原始一點。我們之所以採用8085ISUAL的DPU是8085。從指令的比較結果與CPU讀/寫 的時序圖上可看出,8051與是因為8085相似的地方。就現在的實用性而言,8051的晶片與相關書籍易於取得,所以我們有許多會先藉由8051的模擬 練習來間接熟悉8085的指令架構。而藉由此比較報告可使對8051熟悉的人員能夠很快的學會8085。


七 參考文獻:

  1. “8051單晶片入門與實作”,鄧錦城編著,宏友圖書公司出版,1998。
  2. “單晶片微電腦 8051/8751 原理與應用”,蔡朝陽編著,全華科技圖書公司出版,1998。
  3. “8080/8085 原理與應用”,杜德煒編著,三民書局出版,1984。
  4. “8080/8085 組合語言程式規劃”,杜德煒編著,三民書局出版1984。
  5. NASA幅射效應與分析的網址: http://flick.gsfc.nasa.gov/radhome.htm
  6. Harris 公司的網址:http://www.harris.com/harris/
Sunday the 16th. ISUAL. All rights reserved.