數據傳送類指令
數據傳送是單片機最基本的操作。數據傳送的一般功能是將源操作數傳送到指令所指定的目的操作數,指令執行后,源操作數不變。
數據傳送類指令一般不影響標志位。數據傳送類指令共29條,可以分為兩大類。一是采用MOV操作符,稱為一般傳送指令,共16條;二是采用非MOV操作符,稱為特殊傳送指令,共13條。
一般傳送指令的匯編指令格式為:
MOV是傳送指令的操作助記符。其功能是將源操作數傳送到目的操作數,源操作數內容不變。
該類指令的助記符,操作數,功能,字節數及執行時長(機器周期數),按目的操組數歸類如下。
1)內部8位數據傳送指令
內部RAM區是數據傳送最活躍的區域,8位內部數據傳送指令共15條,用于單片機內部的數據存儲器和寄存器之間的數據傳送。
有立即尋址,直接尋址,寄存器尋址及寄存器間接尋址等尋址方式。
2)16位數據傳送指令
該指令是80C51指令集中唯一的一條16位數據傳送指令,其作用是將外部存儲器某單元地址送到數據指針DPTR。
這個存儲單元可以是外部RAM也可以是外部ROM,也可以是擴展的片外接口地址。
如果地址傳送到DPTR后用刀MOVC,則一定是ROM地址;用到的是MOVX,則一定是RAM地址或片外接口地址。
以上一般數據傳送指令中,可以用4種目的字節為基礎來構造4類指令。
使用時請注意:除direct外,源字節尋址與目的字節方式是不相同的;Rn寄存器尋址與寄存器間接尋址間不相互傳送;只有以累加器A作為目的操作數的指令,才可能影響奇偶標志P。
3)特殊傳送指令
特殊傳送指令包括:ROM查表,讀/寫外部RAM,堆棧操作和交換指令,共13條。
ROM中常數讀取指令
為了取出存放在程序存儲器中的表格數據,80C51單片機提供了兩條查表指令,這兩條指令的操作碼助記符為MOVC(move code),表示操作對象是程序存儲器。
指令MOVC A, @A+PC 以PC為基址寄存器,A為變址寄存器,A中的8位無符號數與PC內容(該指令的嚇一跳指令的起始地址)相加后得到一個16位ROM地址,然后將該地址單元的內容取出送累加器A。
指令MOVC A, @A+DPTR 以DPTR 為基址寄存器,A為變址寄存器,A中的8位無符號數與DPTR 內容相加后得到一個16位ROM地址,然后將該地址單元的內容取出送累加器A。
片外RAM的讀/寫指令
使用MOV類指令,內部RAM單元內容可以有很多種靈活的數據傳送方式,而外部RAM數據的傳送只能與A進行,且必須使用助記符為MOVX類的指令。
注意指令以Ri為間接尋址寄存器的,對外部RAM的尋址空間為256字節。而DPTR的尋址空間是整個64KB的片外RAM。
堆棧操作指令
堆棧操作是通過指令來完成的。將數據送入堆棧的過程稱為壓棧操作,而從堆棧中取出數據的過程稱為彈出(出棧)操作。
壓棧指令的功能是先將堆棧指針SP的內容加1,然后將指令指定的直接尋址單元內容傳送至棧頂單元。
出棧指令的功能是將當前堆棧指針SP所指示的單元的內容傳送到該指令指定的單元中,然后SP中的內容減1。
數據交換指令
數據傳送都是源操作數傳送到目的操作數,而源操作數不變,數據流是單方向的;數據交換類指令則是雙方向的,源和目的操作數都會發送改變。
XCH 為字節交換,XCHD為半字節交換(僅交換低4位數據),SWAP是自交換(高4位與低4位交換)。
算術運算類指令
算術操作指令共有24條,可分為加減乘除和BCD碼調整指令,除加1減1指令外,算術運算指令的執行結果都將影響CY,AC,OV標志。
1)不帶進位加法指令及BCD碼加法調整指令
前4條指令都是兩個數相加后將結果送給A,參與運算的都是兩個8位二進制數。
對于微型計算機作加法時,做的是純正的二進制數相加,但對用戶來說,這些8位的二進制數,可能是無符號數,有符號數的補碼,還可能是BCD碼。為此,微型計算機設計了若干個結果標志或調整指令供用戶使用。
無符號數相加:若相加結果超8位,則CY為1,表示產生進位,否則CY為0。
有符號數相加:8位二進制數表示的十進制范圍為-128~127,當相加結果不在這個范圍時,OV為1,表示溢出。OV為1表示加法運算的結果不可用。
BCD碼相加:若兩個BCD數相加結果大于1001,則要加0110進行調整;若兩個BCD數相加結果在本位上并不大與1001,但產生了進位,相當于計算結果大于9,那么也要加0110進行調整。調整指令用專用這指令DA A。
2)帶進位加法指令
這4條指令是將累加器A中的值與源操作數以及進位CY中的值相加,結果送A。常用于多字節數的加法運算中。
需要注意的是這里的CY是指令開始執行時的進位標志位,不是相加后產生的。
3)加1指令
加法仍按無符號二進制數進行,只有INC A影響就標志P,其余指令不影響標志位。
4)帶借位減法指令
這4條指令的操作是,將A與源操作數及進位標志相減,結果回送到A。
無符號數相減:CY為1表示D7位有錯位,否則CY為0。CY為1就表示A < 源操作數。
有符號數相減:若OV為1,表明補碼減法運算結果超出8位二進制數表示范圍。
若要進行不帶進位的減法運算,只要將CY清0即可。
5)減1指令
只有DEC A會影響奇偶標志P。
6)乘除指令
兩個8位無符號數相乘結果為16位無符號數,乘積的低8位存放在A,高8位存放在寄存器B。
如果乘積超過0FFH,則OV為1,否則清零。CY總為0,P仍按A中1的奇偶來確定。
兩個8位無符號數相除的商存放在A,余數存放在B。如果除數B為0,則OV為1。CY總為0,P仍按A中1的奇偶來確定。
邏輯運算類指令
邏輯運算指令共24條,包括邏輯與,或,異或,清零,取反,移位的指令。
1)邏輯與指令
2)邏輯或指令
3)邏輯異或指令
4)累加器清零指令
5)取反指令
6)移位指令
控制轉移類指令
通常情況下,微機是順序執行程序的,但在有些情況下需要改變程序的走向,控制轉移類指令就是可以改變程序運行走向的指令。
80C51共16條,包括無條件轉移指令,條件轉移指令以及子程序調用和返回指令。
1)無條件轉移指令
無條件轉移指令是當程序執行該指令時,不需要任何條件,程序自動轉移到該指令所指的目的地址運行新的程序段。
AJMP 為短轉移指令,在譯成機器碼時,只取目的地址的低11位,高5位使用PC地址的高5位。很明顯這是一條跳轉范圍為2KB的指令。
SJMP為相對轉移指令,雙字節指令,rel為有符號的補碼,所以轉移的目標地址在SJMP指令前126B到后129B之間。
LJMP為長轉移指令,該指令可以使程序從當前地址轉移到64KB程序存儲器地址空間的任意地址。
JMP為散轉移指令,該指令以DPTR和A的內容進行無符號相加后作為PC的新目標地址,可以實現64KB范圍內的轉移。該指令的特點是根據A的值不同實現多分支轉移。
2)條件轉移指令
條件轉移指令是指在滿足指定條件時就進行轉移,否則程序繼續執行本指令的下一條指令。條件轉移指令都是相對轉移。
JZ指令是當A的內容為0就轉移,而JNZ相反。
CJNE指令比較轉移指令,是對兩個操作數進行比較,然后根據比較結果來決定是否轉移到目的地址。若不相等就轉移,相等就順序執行。
CJNE指令影響CY標志位,若目的操作數大于源操作數,則CY為0,反之為1。
DJNZ指令為減1非零轉移指令。對操作數減1,并保存結果,判斷值是否為0,為0就往下執行,否則跳轉。
3)調用及返回指令
ACALL和LCALL會將斷點地址壓棧,RET會將斷點地址出棧,彈回PC。
RETI是從中斷服務子程序返回的指令,在RET的功能基礎上,它還要清除80C51單片機內部的中斷優先級狀態觸發器,使得已申請的同級或較低級的中斷申請可以得到響應。
布爾變量操作指令
布爾變量即開關量,是以位為基本單位來進行運算和操作的。80C51系統具有對位變量的處理能力,它有自己的累加器CY,稱為位累加器,有自己的位存儲空間,還有自己獨立的運算處理硬件系統和軟件指令系統,共17條。
為方便書寫,指令中的C代表CY。
1)位傳送指令
2)位置位指令
3)位運算指令
4)位控制轉移指令
位控制轉移指令都是條件轉移指令,它是以CY或者位地址bit的內容作為是否轉移的條件。
JC/JNC是當CY為1/0時轉移的指令,該指令適用于比較兩個操作數大小的分支轉移。
JB/JBC/JNB是以位地址bit內容判斷是否要轉移的。JB/JBC當(bit)為1時轉移,而JNB為當(bit)為0時轉移。JBC還具有將該bit清零的功能。
NOP為空操作,只消耗時間。
評論
查看更多