指令系統(tǒng)與匯編語言程序設(shè)計(jì).ppt_第1頁
指令系統(tǒng)與匯編語言程序設(shè)計(jì).ppt_第2頁
指令系統(tǒng)與匯編語言程序設(shè)計(jì).ppt_第3頁
指令系統(tǒng)與匯編語言程序設(shè)計(jì).ppt_第4頁
指令系統(tǒng)與匯編語言程序設(shè)計(jì).ppt_第5頁
已閱讀5頁,還剩84頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、指令系統(tǒng)與匯編語言程序設(shè)計(jì),指令和助記符,指令本身是一組二進(jìn)制數(shù)代碼,為了便于 記憶,將這些代碼用具有一定含義的指令助記 符來表示,助記符一般采用英文單詞的縮寫 。 例: 指令代碼 助記符 功能 740A MOV A,#0AH 將十六進(jìn)制數(shù)0AH放 入累加器A中,指令的字節(jié)數(shù),一條指令由操作碼和操作數(shù)組成。操作碼 指明執(zhí)行什么操作,例如數(shù)的傳送、加法、減 法等。操作數(shù)則表示這條指令所完成的操作對 象,即是對誰進(jìn)行操作。操作數(shù)可以是一個(gè)數(shù), 或者是一個(gè)數(shù)所在的內(nèi)存地址。指令由指令字 節(jié)組成,不同的指令,指令的字節(jié)數(shù)不相同。 有單字節(jié)指令、雙字節(jié)指令和三字節(jié)指令。,尋址方式,1 寄存器尋址 2 直

2、接尋址 3 立即尋址 4 寄存器間接尋址 5 變址尋址 6 相對尋址 7 位尋址,寄存器尋址,以通用寄存器的內(nèi)容為操作數(shù)的尋址方式。 通用寄存器為A、B 、DPTR以及R0R7 。 例: CLR A ;A0 INC DPTR ;DPTRDPTR+1 ADD R5,# 20H ;R5#20H+R5,直接尋址,指令中直接給出操作數(shù)地址的尋址方式, 能進(jìn)行直接尋址的存儲空間有SFR寄存器和內(nèi) 部數(shù)據(jù)RAM。 例: MOV PSW,# 20H ;PSW#20H MOV A,30H ;A(30H),立即尋址,指令中直接給出操作數(shù)的尋址方式。立即操 作數(shù)用前面加有#號的8位或16位數(shù)來表示。 例: MOV

3、 A,# 60H ;A#60H MOV DPTR,# 3400H ;DPTR#3400H MOV 30H,# 40H ;30H單元#40H,寄存器間接尋址,以寄存器中內(nèi)容為地址,以該地址中內(nèi)容為操 作數(shù)的尋址方式。間接尋址的存儲器空間包括內(nèi) 部數(shù)據(jù)RAM和外部數(shù)據(jù)RAM。能用于寄存器間接 尋址的寄存器有R0,R1和DPTR。在寄存器名稱 前面加一個(gè)符號來表示寄存器間接尋址。 例: MOV A , R0 ;A (R0) MOVX DPTR,A ;外部RAM(DPTR)A,MOV A ,R0 操作示意圖,片外RAM,2000H,DPTR,30H,A,2000H,30H,MOVX DPTR,A 操作

4、示意圖,5 變址尋址,變址尋址是以某個(gè)寄存器的內(nèi)容為基本地 址,然后在這個(gè)基址上加以地址的偏移量,才是 真正的操作數(shù)地址。 例: MOVC A, A+DPTR ;A(A+DPTR) MOVC A, A+PC ;A(A+PC),MOVC A, A+DPTR 操作示意圖,相對尋址,以當(dāng)前程序計(jì)數(shù)器PC的內(nèi)容為基礎(chǔ),加上 指令給出的一字節(jié)補(bǔ)碼數(shù)(偏移量)形成新的 PC值的尋址方式。相對尋址用于修改PC值, 主要用于實(shí)現(xiàn)程序的分支轉(zhuǎn)移。 例: SJMP 08H ;PCPC+2+08H,SJMP 08H 操作示意圖,7 位尋址,位尋址只能對有位地址的單元作位尋址操 作。位尋址其實(shí)是一種直接尋址方式,不過

5、其 地址是位地址。 例: SETB 10H ;將10H位置1 MOV 32H,C ;32H進(jìn)位位C CLR PSW.4 ;將RS1位清0,指令分類說明,1 算術(shù)運(yùn)算類指令 2 邏輯運(yùn)算與循環(huán)類指令 3 數(shù)據(jù)傳送類指令 4 程序轉(zhuǎn)移類指令 5 子程序調(diào)用及返回指令 6 位操作指令,算術(shù)運(yùn)算類指令,主要用于8位無符號數(shù)運(yùn)算;也可用于帶符號數(shù)運(yùn)算。包括:加、減、乘、除、加1、減1運(yùn)算指令, 指令操作將影響PSW中有關(guān)狀態(tài)位。,1 加法指令,ADD A,#data ADD A,direct ADD A,Rn ADD A,Ri 用途:將A中的值與源操作數(shù)所指內(nèi)容相加,最終結(jié)果 存在A中。,(1)不帶進(jìn)位

6、位的加法指令(4條),例1:ADD A,#47H ADD A,34H ADD A,R7 ADD A,R0,例2:MOV A,#0AEH ;-82 ADD A,#81H ;-127 則執(zhí)行完本條指令后,A中的值為2FH PSW中狀態(tài)位 C=1,AC=0,OV=1,P=1 對無符號數(shù):結(jié)果為12FH; 對帶符號數(shù):OV=1,有錯(cuò)。,(2)帶進(jìn)位位的加法指令(4條),ADDC A,Rn ; ARnCYA ADDC A,direct ; A(direct )CYA ADDC A,Ri ; A(Ri)CYA ADDC A,#data ; AdataCYA 用途:將A中的值和其后面的值以及進(jìn)位位C中的值相

7、加, 最終結(jié)果存在A,常用于多字節(jié)數(shù)運(yùn)算中。,例:,先做67H+A0H=107H,而107H顯然超過了0FFH,因此最終保存在A中的是07H,而1則到了PSW中的CY位了。換言之,CY就相當(dāng)于是100H。 然后再做10H + 30H + CY,結(jié)果是41H,所以最終的結(jié)果是4107H。,1067H+30A0H,0001 0000 0110 0111,0011 0000 1010 0000,0100 0001 0000 0111,1067H,30A0H,4107H,又例:,先做67H+20H=87H,沒有超過0FFH,因此最終保存在A中的是87H,而PSW中的CY=0。 然后再做10H + 30

8、H + CY,結(jié)果是40H,所以最終的結(jié)果是4087H。,1067H+3020H,0001 0000 0110 0111,0011 0000 0010 0000,0100 0000 1000 0111,1067H,3020H,4087H,(3) 加1指令(5條),INC A ;A+1A,影響P標(biāo)志 INC Rn ;Rn+1Rn INC direct ;(direct)+1(direct) INC Ri ;(Rn)+1(Rn) INC DPTR ;DPTR+1DPTR 功能很簡單,就是將后面目標(biāo)中的值加1。,例:A=12H,R0=33H,(21H)=32H, (34H)=22H,DPTR=123

9、4H。 連續(xù)執(zhí)行下面的指令: INC A INC R0 INC 21H INC R0 INC DPTR,; A=13H ; R0=34H ;(21H)=33H ;(34H)=23H ; DPTR=1235H,DA A 在進(jìn)行BCD碼加法運(yùn)算時(shí),跟在ADD和ADDC指令之后,用來對BCD碼加法運(yùn)算結(jié)果進(jìn)行自動修正。 例:A=00010101(代表十進(jìn)制數(shù)15) ADD A,#8,(4) 十進(jìn)制調(diào)整指令(1條),; A=1DH,按二進(jìn)制規(guī)律加,; A=23H,按十進(jìn)制規(guī)律加,DA A,2 減法指令(8條),SUBB A,Rn ; ARnCYA SUBB A,direct ; A(direct )C

10、YA SUBB A,Ri ; A(Ri)CYA SUBB A,#data ; AdataCYA 將A中的值減去源操作數(shù)所指內(nèi)容以及進(jìn)位位C中的 值,最終結(jié)果存在A中。 說明:沒有不帶借位的減法指令,如果需要做不帶位的減法指令(在做第一次相減時(shí)),只要將CY清零即可。,(1) 帶借位的減法指令(4條),(2) 減1指令(4條),DEC A ;A-1A, DEC Rn ;Rn-1Rn DEC direct ;(direct)-1(direct) DEC Ri ;(Rn)-1(Rn) 與加1指令類似。,3 乘法指令(1條),MUL AB ;ABBA 此指令的功能是將A和B中的兩個(gè)8位無符號數(shù)相乘,結(jié)

11、果將為16無符號數(shù)。其中高8位放在B中,低8位放在A中。在乘積大于FFH時(shí),0V置1,否則OV為0;而CY總是0。 例: A=4EH,B=5DH, 執(zhí)行MUL AB指令后,乘積是1C56H,所以在B中放的是1CH,而A中放的則是56H。,4 除法指令(1條),DIV AB ;AB的商A,余數(shù)B 此指令的功能是將A中的8位無符號數(shù)除B中的8位 無符號數(shù),商放在A中,余數(shù)放在B中。 如果在做除法前B中的值是00H,也就是除數(shù)為0,那么0V=1。 例: A=11H,B=04H, 執(zhí)行DIV AB指令后,結(jié)果為:A=04H,B=1。,邏輯運(yùn)算與循環(huán)類指令,主要用于對2個(gè)操作數(shù)按位進(jìn)行邏輯操作,結(jié)果送到

12、 A或直接尋址單元。 主要操作 與、或、異或、移位、取反、清零等。 對標(biāo)志位的影響 除了目的操作數(shù)為ACC的指令影響奇偶標(biāo)志P外,一般不影響標(biāo)志位。,1 邏輯或指令(6條),ORL A,Rn ;ARnA ORL A,direct ;A(direct)A ORL A,Ri ;A(Ri)A ORL A,#data ;AdataA ORL direct,A ;(direct)A(direct) ORL direct,#data ;(direct)data(direct),例:71H和56H相或: 01110001 (71H) ) 01010110 (56H),01110111 即77H,后兩條指令,

13、若直接地址為I/O端口,則為“讀改寫”操作。,2 邏輯與指令 (6條),ANL A,Rn ;ARnA ANL A,direct ;A(direct)A ANL A,Ri ;A(Ri)A ANL A,#data ;AdataA ANL direct,A ;(direct)A(direct) ANL direct,#data ;(direct)data(direct),例:71H和56H相與: 01110001 (71H) )01010110 (56H),01010000 即50H,后兩條指令,若直接地址為I/O端口,則為“讀改寫”操作。,例:71H和56H相異或: 01110001 (71H)

14、) 01010110 (56H),3 邏輯異或指令(6條),XRL A,Rn ;A RnA XRL A,direct ;A (direct)A XRL A,Ri ;A (Ri)A XRL A,#data ;A dataA XRL direct,A ;(direct) A(direct) XRL direct,#data ;(direct) data(direct),00100111 即27H,后兩條指令,若直接地址為I/O端口,則為“讀改寫”操作。,4 取反與清0指令(2條),取反:CPL A ;/AA 例:若A=5CH, 執(zhí)行CPL A 結(jié)果:A=A3H,清0:CLR A ;0A,5 循環(huán)移

15、位指令(4條),RL A RR A RLC A RRC A,后兩條指令,影響P和CY標(biāo)志。,例:,若A=5CH,CY=1,執(zhí)行RLC A后,,對RLC、RRC指令,在CY=0時(shí) RLC相當(dāng)于乘以2 RRC相當(dāng)于除以2,結(jié)果:A=B9H,CY=0,P=1,綜合舉例:,ANL A,#0FH ;屏蔽A的高4位 SWAP A ANL P1,#0FH ;清P1口高4位 ORL P1,A ;P1口高4位輸出A的低4位;,把累加器A中的低4位狀態(tài),通過P1口的高4位輸出, P1口的低4位狀態(tài)不變。,數(shù)據(jù)傳送類指令,助記符 說明 MOV、MOVX、MOVC 傳送操作 XCH、XCHD、SWAP 交換操作 PU

16、SH、POP 堆棧操作 源操作數(shù)尋址方式: 立即尋址、直接尋址、寄存器尋址、 寄存器間接尋址、變址尋址。 目的操作數(shù)尋址方式: 直接尋址、寄存器尋址、寄存器間接尋址 除了目的操作數(shù)為ACC的指令影響奇偶標(biāo)志P外,一般不影 響標(biāo)志位。,8051單片機(jī)片內(nèi)數(shù)據(jù)傳送圖,1 以累加器為目的操作數(shù)的指令(4條),MOV A,Rn MOV A,direct MOV A,Ri MOV A,#data 這組指令功能將源操作數(shù)指定內(nèi)容送到A中。,2 以寄存器Rn為目的操作數(shù)的指令 (3條),MOV Rn,A MOV Rn,direct MOV Rn,#data 這組指令功能是把源操作數(shù)指定的內(nèi)容送入當(dāng)前工作寄存

17、 器,源操作數(shù)不變。,3 以直接地址為目的操作數(shù)的指令(5條),MOV direct,A MOV direct,Rn MOV direct1,direct2 MOV direct,Ri MOV direct,#data 這組指令功能是把源操作數(shù)指定的內(nèi)容送入由直接地址指出的片內(nèi)存儲單元。 例: MOV 20H,A MOV 20H,R1 MOV 20H,30H MOV 20H,R1 MOV 0A0H,#34H MOV P2,#34H,4 以間接地址為目的操作數(shù)的指令(3條),MOV Ri,A MOV Ri,direct MOV Ri,#data 功能:把源操作數(shù)指定的內(nèi)容送入以R0或R1中內(nèi)容為

18、 地址的片內(nèi)存儲單元。 例: MOV R0,A MOV R1,20H MOV R0,#34H,5 十六位數(shù)的傳遞指令(1條),MOV DPTR,#data16 8051是8位機(jī),這是唯一的一條16位立即數(shù)傳遞指令。 功能:將一個(gè)16位的立即數(shù)送入DPTR中去。其中高8位 送入DPH,低8位送入DPL。 例:MOV DPTR,#1234H 執(zhí)行完了之后DPH中的值為12H,DPL中的值為34H。 如果我們分別向DPH,DPL送數(shù),則結(jié)果也一樣。 如下面兩條指令: MOV DPH,#35H MOV DPL,#12H。 相當(dāng)于執(zhí)行了 MOV DPTR,#3512H。,6 累加器A與片外RAM之間的數(shù)

19、據(jù)傳遞類指令(4條),MOVX A,DPTR MOVX DPTR,A MOVX A,Ri MOVX Ri,A 說明: (1).在8051中,與外部RAM存儲器打交道的只可以是累加器A 。所有需要送入外部RAM的數(shù)據(jù)必需要通過A送去,而所有要讀入的外部RAM中的數(shù)據(jù)也必需通過A讀入。 在此我們可以看出內(nèi)外部RAM的區(qū)別了,內(nèi)部RAM間可以直接進(jìn)行數(shù)據(jù)的傳遞,而外部則不行。 比如,要將外部RAM中某一單元(設(shè)為0100H單元的數(shù)據(jù))送入另一個(gè)單元(設(shè)為0200H單元),也必須先將0100H單元中的內(nèi)容讀入A,然后再送到0200H單元中去。,(2).要讀或?qū)懲獠縍AM,必須要知道RAM的地址,采用D

20、PTR時(shí),地址被直接放在DPTR中的。采用Ri(R0或R1)時(shí),由于Ri只是8位的寄存器,所以只提供低8位地址。高8位地址由P2口來提供。 (3).使用時(shí)應(yīng)先將要讀或?qū)懙牡刂匪腿隓PTR或Ri中,然后再用讀寫命令。 例:將外部RAM中100H單元中的內(nèi)容送入外部RAM中200H單元中。 MOV DPTR,#0100H MOVX A,DPTR MOV DPTR,#0200H MOVX DPTR,A,7 讀程序存儲器指令(2條),MOVC A,A+DPTR MOVC A,A+PC 本組指令是將ROM中的數(shù)送入A中。本組指令也被稱為查表指 令,常用此指令來查一個(gè)已做好在ROM中的表格 說明:查找到的

21、結(jié)果被放在A中,因此,本條指令執(zhí)行前后,A 中的值不一定相同。 例:有一個(gè)數(shù)在R0中,要求用查表的方法確定它的平方值(此 數(shù)的取值范圍是0-5) MOV DPTR,#100H MOV A,R0 MOVC A,A+DPTR ORG 0100H DB 0,1,4,9,16,25,8 堆棧操作(2條),PUSH direct POP direct 第一條為壓入指令,將direct中的內(nèi)容送入堆棧中,第二條為 彈出指令,將堆棧中的內(nèi)容送回到direct中。 例: MOV SP,#10H MOV 40H,#50H PUSH 40H POP 30H 執(zhí)行第一條PUSH 40H指令是這樣的:將SP中的值加1

22、,變?yōu)?1H,然后將40H中的值送到11H單元中,因此執(zhí)行完本條指令后,內(nèi)存11H單元的值是50H,同樣,執(zhí)行POP 30H時(shí),是將11H中的值送入到30H單元中,即執(zhí)行完本條指令后,30H單元中的值變?yōu)?0H。,9 交換指令(5條),XCH A,Rn XCH A, direct XCH A, Ri XCHD A, Ri SWAP A 例: 已知A中的內(nèi)容為34H MOV R6, #29H XCH A, R6 SWAP A XCH A, R6 XCHD A, R0,程序轉(zhuǎn)移類指令,此類指令一般不影響PSW。 包括以下類型: 無條件轉(zhuǎn)移和條件轉(zhuǎn)移 相對轉(zhuǎn)移和絕對轉(zhuǎn)移 長轉(zhuǎn)移和短轉(zhuǎn)移 調(diào)用與返回指

23、令,無條件轉(zhuǎn)移類指令(4條),短轉(zhuǎn)移類指令:AJMP addr11 長轉(zhuǎn)移類指令:LJMP addr16 相對轉(zhuǎn)移指令:SJMP rel 間接轉(zhuǎn)移指令:JMP A+DPTR,(1)上面的前三條指令,統(tǒng)統(tǒng)理解成:PC值改變,即跳轉(zhuǎn)到一個(gè)標(biāo)號處。 那么他們的區(qū)別何在呢?,跳轉(zhuǎn)的范圍不同。,短轉(zhuǎn)移類指令:AJMP addr11 長轉(zhuǎn)移類指令:LJMP addr16 相對轉(zhuǎn)移指令:SJMP rel,轉(zhuǎn)移范圍: 2KB 64KB -128+127,指令構(gòu)成不同。 AJMP、LJMP后跟的是絕對地址, 而SJMP后跟的是相對地址。,指令長度不同 原則上,所有用SJMP或AJMP的地方都可以用 LJMP來替

24、代。,散轉(zhuǎn)指令:JMP A+DPTR,這條指令的用途也是跳轉(zhuǎn),轉(zhuǎn)到什么地方去呢?這可不能由標(biāo)號簡單地決定了。 轉(zhuǎn)移地址由A+DPTR形成,并直接送入PC。 指令對A、DPTR和標(biāo)志位均無影響。 本指令可代替眾多的判別跳轉(zhuǎn)指令,又稱為散轉(zhuǎn)指令,多用于多分支程序結(jié)構(gòu)中。,(2)第四條指令與前三條指令相比有所不同,條件轉(zhuǎn)移指令(8條),條件轉(zhuǎn)移指令是指在滿足一定條件時(shí)進(jìn)行相對轉(zhuǎn)移,否則程序繼續(xù)執(zhí)行本指令的下一條指令。,一、判A內(nèi)容是否為0轉(zhuǎn)移指令(2條),JZ rel ;如果A=0,則轉(zhuǎn)移,否則順序執(zhí)行。 JNZ rel ;如果A0,就轉(zhuǎn)移。 轉(zhuǎn)移到相對于當(dāng)前PC值的8位移量的地址去。即: 新的PC

25、值=當(dāng)前PC+偏移量rel 在編寫匯編語言源程序時(shí),可以直接寫成: JZ 標(biāo)號 ;即轉(zhuǎn)移到標(biāo)號處。,二、比較不等轉(zhuǎn)移指令(4條),CJNE A,#data,rel CJNE A,direct,rel CJNE Rn,#data,rel CJNE Ri,#data,rel 此類指令的功能是將兩個(gè)操作數(shù)比較,如果兩者相等,就順序執(zhí)行,如果不相等,就轉(zhuǎn)移。 同樣地,使用時(shí),可以將rel理解成標(biāo)號,即: CJNE A,#data,標(biāo)號 CJNE A,direct,標(biāo)號 CJNE Rn,#data,標(biāo)號 CJNE Ri,#data,標(biāo)號,利用這些指令,可以判斷兩數(shù)是否相等。 但有時(shí)還想得知兩數(shù)比較之后哪

26、個(gè)大,哪個(gè)小,本條指令也具有這樣的功能: 如果兩數(shù)不相等,則CPU還會用CY(進(jìn)位位)來反映哪個(gè)數(shù)大,哪個(gè)數(shù)小。 如果前面的數(shù)大,則CY=0,否則CY=1。 因此在程序轉(zhuǎn)移后再次利用CY就可判斷出哪個(gè)數(shù)大,哪個(gè)數(shù)小了。,三、減1不為0轉(zhuǎn)移指令(2條),DJNZ Rn,rel DJNZ direct,rel DJNZ指令的執(zhí)行過程是這樣的: 它將第一個(gè)參數(shù)中的值減1,然后看這個(gè)值是否等于0,如果等于0,就往下執(zhí)行,如果不等于0,就轉(zhuǎn)移到第二個(gè)參數(shù)所指定的地方去。 例: LOOP: DJNZ 10H,LOOP,例: MOV 23H,#0AH CLR A LOOP: ADD A,23H DJNZ 2

27、3H,LOOP SJMP $ 上述程序段的執(zhí)行過程是: 將23H單元中的數(shù)連續(xù)相加,存至A中,每加一次, 23H單元中的數(shù)值減1,直至減到0,共加(23H)次。,子程序調(diào)用與返回指令,一、調(diào)用指令(2條),LCALL addr16 ;長調(diào)用指令(3字節(jié)) ACALL addr11 ;短調(diào)用指令(2字節(jié)) 上面兩條指令都是在主程序中調(diào)用子程序,兩者的區(qū)別: 對短調(diào)用指令,被調(diào)用子程序入口地址必須與調(diào)用指令下一條指令的第一字節(jié)在相同的2KB存儲區(qū)之內(nèi)。使用時(shí)可以用標(biāo)號表示子程序首地址,二、返回指令 (2條),子程序執(zhí)行完后必須回到主程序,如何返回呢?只要執(zhí)行一條返回指令就可以了。 RET ;子程序

28、返回指令 RETI ;中斷子程序返回指令 兩者不能互換使用。,空操作指令(1條),NOP 空操作,就是什么事也不干,停一個(gè)周期,一般用作短時(shí)間的延時(shí)。,位操作指令,8051單片機(jī)的硬件結(jié)構(gòu)中,有一個(gè)位處理器(又稱布爾處理器),它有一套位變量處理的指令集,包括位變量傳送、邏輯運(yùn)算、控制程序轉(zhuǎn)移等。 在8051中,有一部份RAM和一部份SFR是具有位尋址功能的。 位操作區(qū):內(nèi)部RAM的20H-2FH這16個(gè)字節(jié)單元,即128個(gè)位單元(位地址空間位007FH); 可以位尋址的特殊功能寄存器。,以PSW中位4( RS1 )為例。 直接(位)地址方式:如 D4H; 點(diǎn)操作符號方式:如 PSW.4,D0H

29、.4; 位名稱方式:如 RS1; 用戶定義名方式:如用偽指令 bit SUB.REG bit RS1 定義后,可用SUB.REG代替RS1。,位地址表達(dá)方式,位傳送指令(2條),MOV C,bit ;bit C MOV bit,C ;C bit 這組指令的功能是實(shí)現(xiàn)位累加器(CY)和其它位地址之間的數(shù)據(jù)傳遞。 例:MOV C,P1.0 ;將P1.0的狀態(tài)送給C。 MOV P1.0,C ;將C中的狀態(tài)送到P1.0 ;引腳上去。,位清0和置位(4條),位清0指令 CLR C ;使CY=0 CLR bit ;使指令的位地址等于0。 例:CLR P1.0 ;即使P1.0變?yōu)? 位置1指令 SETB C

30、 ;使CY=1 SETB bit ;使指定的位地址等于1。 例:SETB P1.0 ;使P.0變?yōu)?,位邏輯運(yùn)算指令 (6條),位與指令 ANL C,bit ;Cy與指定位的值相與,結(jié)果送Cy ANL C,/bit ;先將指定的位地址中的值取出后取反,再和Cy相與,結(jié)果送回Cy。但注意:指定的位地址中的值本身并不發(fā)生變化。 例:ANL C,/P1.0,位取反指令 CPL C ;使Cy值取反。 CPL bit ;使指定的位的值取反。 例:CPL P1.0,位或指令 ORL C,bit ORL C,/bit,位條件轉(zhuǎn)移指令(5條),判Cy轉(zhuǎn)移指令 JC rel JNC rel 第一條指令的功能是如

31、果Cy=1就轉(zhuǎn)移,否則就順序執(zhí)行。 第二條指令則和第一條指令相反,即如果Cy=0就轉(zhuǎn)移,否則就順序執(zhí)行。,判位變量轉(zhuǎn)移指令 JB bit,rel JNB bit,rel JBC bit,rel 第一條指令:如果指定的(bit)=1,則轉(zhuǎn)移,否則順序執(zhí)行,第二條指令功能相反。 第三條指令是如果指定的(bit)=1,則轉(zhuǎn)移,并把該位清0,否則順序執(zhí)行。,匯編語言格式與偽指令,匯編語言源程序由以下兩種指令構(gòu)成 匯編語句(指令語句) 偽指令(指示性語句) 匯編語句的格式: 標(biāo)號: 操作碼 操作數(shù) ;注釋 3. 偽指令:控制匯編用的特殊指令,這些指令不屬于指令系統(tǒng),不產(chǎn)生機(jī)器代碼。,常用的偽指令,ORG

32、 定位目的程序的起始地址。 格式: ORG 表達(dá)式 表達(dá)式必須為16位地址值。 如:ORG 0000H END 匯編語言程序結(jié)束偽指令。 一定放在程序末尾!,EQU 賦值偽指令。 格式: 字符名稱 EQU 數(shù)值或匯編符號 例: AA EQU 30H K1 EQU 40H MOV A,AA ; (30H)A MOV A,K1 ;(40H)A,常用的偽指令,DB 從指定單元開始定義(存儲)若干個(gè)字節(jié)的數(shù)據(jù)或ASCII碼字符,常用于定義數(shù)據(jù)常數(shù)表。 格式:DB 字節(jié)常數(shù) 或 ASCII字符 例: ORG 1000H DB 34H,0DEH,A,B DB 0AH,0BH,20,常用的偽指令,常用的偽指

33、令,DW 從指定單元開始定義(存儲)若干個(gè)字的數(shù)據(jù) 或ASCII碼字符。 格式:DW 字常數(shù)或ASCII字符 例: ORG 2000H DW 1234H,B DW 0AH,20,常用的偽指令,BIT 位地址符號指令。 把位地址賦于規(guī)定的字符名稱。 格式:字符名稱 BIT 位地址 例: ABC BIT P1.1 QQ BIT P3.2,應(yīng)用程序設(shè)計(jì),在進(jìn)行應(yīng)用匯編程序設(shè)計(jì)時(shí),首先要確定算法,算法的優(yōu)劣很大程度上決定了程序的效率,另外還要盡可能畫出程序框圖,以便于分析程序流程。,定點(diǎn)數(shù)運(yùn)算子程序,定點(diǎn)數(shù):小數(shù)點(diǎn)固定的數(shù)。 可以把小數(shù)點(diǎn)固定在數(shù)值的最高位之前, 對于有符號的數(shù),小數(shù)點(diǎn)應(yīng)在符號位與最高

34、數(shù)值位之間,即: 符號位 數(shù)值部分 也可以把小數(shù)點(diǎn)固定在最低數(shù)值位后面,即: 符號位 數(shù)值部分,定點(diǎn)數(shù)表示方式,(1)原碼表示法,符號位為0表示正數(shù),符號位為1表示負(fù)數(shù),如: 二進(jìn)制數(shù)00110100表示十進(jìn)制數(shù)+52 二進(jìn)制數(shù)10110100表示十進(jìn)制數(shù)-52,(2)補(bǔ)碼表示法,正數(shù)的補(bǔ)碼表示與原碼相同, 即最高位為0, 其余位為數(shù)值位。負(fù)數(shù)用補(bǔ)碼表示時(shí), 最高位為1, 數(shù)值位要按位取反后再在最低位加1,才是該負(fù)數(shù)的數(shù)值。,例如: 十進(jìn)制數(shù)+51的二進(jìn)制補(bǔ)碼為00110011 十進(jìn)制數(shù) -51的二進(jìn)制補(bǔ)碼為11001101,例: 雙字節(jié)數(shù)取補(bǔ)子程序。 將(R4R5)中的雙字節(jié)數(shù)取補(bǔ),結(jié)果送R

35、4R5。 CMPT:MOV A,R5 CPL A ADD A,#1 MOV R5,A MOV A,R4 CPL A ADDC A,#0 MOV R4,A RET,例: 雙字節(jié)原碼數(shù)左移一位子程序。 將(R2R3)左移一位,結(jié)果送R2R3,不改變符號位, 不考慮溢出。 DRL1: MOV A,R3 CLR C RLC A MOV R3,A MOV A,R2 RLC A MOV ACC.7,C ;恢復(fù)符號位 MOV R2,A RET,例: 雙字節(jié)原碼右移一位子程序。 將(R2R3)右移一位,結(jié)果送R2R3,不改變符號位。 DRR1: MOV A,R2 MOV C,ACC.7 ;保護(hù)符號位 CLR

36、ACC.7 ;移入0 RRC A MOV R2,A MOV A,R3 RRC A MOV R3,A RET,例: 雙字節(jié)補(bǔ)碼右移一位子程序。 將(R2R3)右移一位,結(jié)果送R2R3,不改變符號位。 CRR1: MOV A,R2 MOV C,ACC.7 ;保護(hù)符號位 RRC A ;移入符號位 MOV R2 ,A MOV A,R3 RRC A MOV R3,A RET,例:雙字節(jié)無符號數(shù)加法子程序。 將(R2R3)和(R6R7)兩個(gè)無符號數(shù)相加,結(jié)果送R4R5。 NADD: MOV A,R3 ADD A,R7 MOV R5,A MOV A,R2 ADDC A,R6 MOV R4,A RET,例:雙字節(jié)無符號數(shù)減法子程序。 將(R2R3)和(R6R7)兩個(gè)雙字節(jié)數(shù)相減,結(jié)果送R4R5。 NSUB1: MOV A,R3 CLR C SUBB A,R7 MOV R5,A MOV A,R2 SUBB A,R6 MOV R4,A RET,例:雙字節(jié)原碼加減運(yùn)算子程序。 (R2R3)和(R6R7)為兩個(gè)原碼表示的數(shù),最高位為符號位,求(R2R3)(R6R7)結(jié)果送R4R5。程序中DADD為原碼加法子程序入口,DSUB為原碼減法子程序入口。出口時(shí)CY=1發(fā)生溢出,CY=0為正常。 DSUB: MOV A, R6 ;減法入口 CPL ACC.7 ;取反符號位 MOV R6, A DADD:

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論