版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、《單片微機原理及應(yīng)用》教學(xué)課件,指令與編程,本講重點: 尋址方式; MCS-51指令集; 偽指令; 匯編語言與簡單程序設(shè)計.,《單片微機原理及應(yīng)用》教學(xué)課件,第3章 MCS-51系列單片機指令系統(tǒng)及匯編語言程序設(shè)計,MCS-51單片機的尋址方式MCS-51單片機分類指令 MCS-51單片機匯編語言程序設(shè)計基礎(chǔ),《單片微機原理及應(yīng)用》教學(xué)課件,51系列單片機指令集含有111條指令,每條指令在執(zhí)行時要花去一定
2、的時間,以機器周期為單位。按指令執(zhí)行時間分類:單周期(64條);雙周期(45條);4周期(2條),按指令的功能分類,可分為5大類:數(shù)據(jù)傳送類(29條);算術(shù)運算類(24條)邏輯運算及移位類(24);控制轉(zhuǎn)移類(17條)位操作類(17條),每條指令在程序存儲器ROM中占據(jù)一定的空間,以字節(jié)為單位。按指令所占字節(jié)數(shù)分類:單字節(jié)(49條);雙字節(jié)(46條);3字節(jié)(16條),編譯:當(dāng)前源代碼編譯成二進制目標(biāo)文件(.obj文件或.he
3、x) 鏈接(link):將生成的.obj文件與庫文件.lib等文件鏈接,生成可執(zhí)行文件(.exe文件)。 一個現(xiàn)代編譯器的主要工作流程如下: 源程序(source code)( 低級.asm及高級)→預(yù)處理器(preprocessor)→編譯器(compiler)→匯編程序(assembler)→目標(biāo)程序(object code)→連接器(鏈接器,Linker)→可執(zhí)行程序(executables) obj文件是.編譯器編譯
4、后的結(jié)果.他沒有經(jīng)過鏈接也就是說.里面的代碼還沒有具體定位到單片機的存儲器的固定地址;因為c環(huán)境一般來說,都是編譯好好自動幫你鏈接的.所以看不見而已,由于匯編語言為某個具體微處理器設(shè)計的程序不能直接移植到另一個不同種類的微處理器上使用,移植性差;而高級語言程序可以在不同的微處理器上運行,是通用的,可移植性較好。現(xiàn)在大多數(shù)單片機程序開發(fā)環(huán)境都支持匯編和C51兩種語言的編輯和匯編。,指令格式及其操作尋址方式 一、基本概念1、指令
5、及其格式機器語言:由機器指令描述的程序語言。常以16進制表示。助記符語言:由助記符指令形成的程序語言,又稱匯編語言。匯編語言通過編譯后成為機器語言方可輸入程序存儲器中使用. [標(biāo)號:] 操作碼 操作數(shù)(目的操作數(shù),源操作數(shù))[ ;注釋] 指令功能 前目的后源 標(biāo) 號:稱符號地址,代表該指令第1字節(jié)所在的地址。 操作數(shù):表示參與運
6、算作的數(shù)或數(shù)的地址。注 釋:可有可無,必須以“;”開始。操作數(shù)的分類:數(shù)據(jù)或是地址 1.數(shù)據(jù):立即數(shù)。分8位和16位兩種,符號為#DATA表示。 2.地址:片內(nèi)的有地址的各類通用寄存器,片內(nèi)RAM區(qū)的可編程寄存器,片外的數(shù)據(jù)及程序存儲器區(qū)。,DATA:片內(nèi)RAM,特殊功能寄存器中的直接字節(jié)地址用DATA表示---直接尋址用R0,R1,DPTR間接指出的地址用@R0等表示.-----間接尋址(活地址)用
7、指示程序存儲器地址用@A+DPTR,@A+PC表示-----變址尋址.類別 可能的表示形式 指令例子與說明立即數(shù) 8位數(shù)#DATA MOV A,#03H 16位數(shù)#DATA16 MOV DPTR,#2400H 所編址的寄存器A,
8、 MUL AB B,C(位)AB,DPTR 地址 內(nèi)部數(shù)據(jù)RAM:Rn, ANL A,R3;(RN表示 DATA,@R0,@R1 R7~R0) 外部數(shù)據(jù)存儲器:@DPTR, MOVX A,@DATR
9、 @R0,@R1 SFR中:DATA(直接地址) MOV A,87H 程序存儲器:@A+DPTR MOVC A,@A+DPTR @A+PC 位 BIT(位地址及C),2、指令中的符號標(biāo)識Ri、Rn、#data、#data16(包含在指令中的16位立即數(shù))、a
10、ddr11、addr16direct:表示直接尋址的地址, 即8位內(nèi)部數(shù)據(jù)存儲器RAM的單元地址(0~127/255), 或特殊功能寄存器SFR的地址。 對于SFR可直接用其名稱來代替其直接地址。rel:相對地址, 以補碼形式表示的地址偏移量, 范圍為-128~+127, 主要用于無條件相對短轉(zhuǎn)移指令SJMP和所有的條件轉(zhuǎn)移指令中。bit:內(nèi)部數(shù)據(jù)存儲器RAM和特殊功能寄存器SFR中的可直接尋址位地址。 A:寄存器尋址的累加
11、器;ACC:直接尋址的累加器; @:間接尋址符號(X):X中的內(nèi)容((X)):由X的內(nèi)容作為地址的單元中的內(nèi)容(間接尋址) ←:箭頭左邊的內(nèi)容被右邊的內(nèi)容代替(數(shù)據(jù)傳送方向) $:本條指令的起始地址 / :位操作數(shù)前綴,表示取反。,51單片機指令的尋址方式,立即尋址直接尋址寄存器尋址寄存器間接尋址變址尋址(基址寄存器
12、+變址寄存器間接尋址)相對尋址位尋址,尋址方式:指令按地址獲得操作數(shù)的方式七種尋址方式,一條指令可能含多種尋址方式,尋址方式所要解決的主要問題就是如何在整個存儲器和寄存器的尋址空間內(nèi)快速地找到指定的地址單元。,1. 寄存器尋址,以通用寄存器的內(nèi)容為操作數(shù)的尋址方式。通用寄存器包括:A,B,DPTR,R0~R7。其中,R0~R7必須在工作寄存器組之中。 例如:MOV A,R1 ; (A) ←(R1)
13、 INC R3 ;(R3)+1→(R3) MOV A,B ; (A) ←(B) MOV 30H,R0 ;(30H)←(R0) 需要注意的是,A和B既是通用寄存器,又是具有直接地址的特殊功能寄存器。,寄存器尋址 以寄存器的內(nèi)容為操作數(shù)的尋址方式。(1)內(nèi)部RAM中的32個工作寄存器。但只能尋址當(dāng)前工作寄存器區(qū)的8個工作寄存器R0~R7; (2)部分SFR:A、B、C、DPTR;例: INC
14、 R3 ;(R3)←(R3)+1 R3即為寄存器尋址 ↑操作碼 ↑操作數(shù)本例中:R3的“門牌號”高3位為0,決定了尋址內(nèi)部RAM中 00H~1FH空間。對于Rn:具體寄存器由指令的低3位指定。對于A、B、C、DPTR:則為隱含在指令代碼中。,直接尋址:指令中直接給出了操作數(shù)所在單元的地址或名稱(操作數(shù)地址)
15、的尋址方式MOV A, direct 操作數(shù)地址(1)內(nèi)部數(shù)據(jù)存儲器的低128字節(jié),00H~7FH;(2)特殊功能寄存器,注意除A、B、DPTR外,其他SFR只能采用直接尋址方式。直接尋址是訪問片內(nèi)所有特殊功能寄存器的唯一尋址方式。(3)位尋址:所有可尋址位;例:MOV R1,1FH ;(R1) ←(1FH) MOV 30H,4AH ;(30H)←(4AH)指令中兩個操作數(shù)都可由直接尋址方式給出。,2. 直接
16、尋址,《單片微機原理及應(yīng)用》教學(xué)課件,在本單片機中規(guī)定:訪問特殊功能寄存器SFR只能采用直接尋址方式。例如:MOV A, SP ; (A) ←(SP) MOV A, 81H ; (A) ←(SP) MOV P1, #5AH ; (P1)←(#5AH) MOV 90H,#5AH ; (P1)←(#5AH) MOV B, 30H
17、 ; (B) ←(30H),,,相同,相同,《單片微機原理及應(yīng)用》教學(xué)課件,在本單片機中訪問特殊功能寄存器SFR只能采用直接尋址方式的原因:SFR分布在80H~0FFH范圍內(nèi),而52系列單片機有256字節(jié)的片內(nèi)RAM,其中的80H~0FFH的RAM與SFR所占地址重疊。,?MOV A, 90H 等效于 MOV A, P1 屬直接尋址 ?MOV A, @R0 ;[事先已知 (R0) = #90H ]
18、 執(zhí)行的操作:A ←(90H) 屬寄存器間接尋址, ?隨意寫的指令如:MOV A, 85H 則是非法的!,于是規(guī)定: 80H~0FFH范圍內(nèi)的RAM只能用寄存器間接尋址方式,而SFR只能用直接尋址方式。從而解決了地址沖突的問題。例如:,3. 立即尋址,立即尋址就是把操作數(shù)直接在指令中給出,即操作數(shù)包含在指令中,也就是說CPU不需要到存儲器其它地方尋找。立即操作數(shù)有8位和16位兩種形式,前面
19、加“#”來表示。例如:MOV A, #0FFH ;將立即數(shù)FFH傳送到累加器A中 MOV DPTR, #2000H ;將16位立即數(shù)2000H傳送到數(shù)據(jù)指針DPTR中 MOV 40H, # 60H ;將立即數(shù)60H傳送到40H內(nèi)部RAM單元中,注意:符號“#”表明其后跟的是立即數(shù), 立即數(shù)——就是數(shù)字量本身,《單片微機原理
20、及應(yīng)用》教學(xué)課件,寄存器間接尋址:寄存器中的內(nèi)容是一個地址,由該地址單元尋址到所需的操作數(shù),例:[ MOV R1,#30H ;(R1)← 立即數(shù)30H ],[ MOV R1,#80H ;(R1)← 立即數(shù)80H ] MOV @R1,#2FH ;(80H)←立即數(shù)2FH MOV A,@R1 ;(A)←((R1))=#2FH,4. 寄存器間接尋址,以寄存器中的內(nèi)容為地址,該地址中的內(nèi)容為操作數(shù)的尋址方式。能夠用于寄存器間接
21、尋址的寄存器有:R0,R1,DPTR,SP。其中,R0,R1必須在工作寄存器組之中,SP僅用于堆棧操作。 MOVX A, @R1 ;外部數(shù)據(jù)RAM中地址為P2R1的單元內(nèi)容→A MOVX @DPTR,A ;A→外部數(shù)據(jù)RAM中DPTR為地址的單元 PUSH ACC ;((SP)) ←(A) 寄存器間接尋址的存儲器空間包括:內(nèi)部數(shù)據(jù)RAM和外部數(shù)據(jù)RAM。 內(nèi)
22、部數(shù)據(jù)RAM共用128字節(jié),用一個字節(jié)的R0或R1可尋址整個空間。 (區(qū)分:MOV和MOVX,且外部RAM僅有數(shù)據(jù)傳送類指令) 外部數(shù)據(jù)RAM最大可達64K字節(jié),僅用R0或R1無法尋址整個空間。在MCS-51系列單片機指令中,對外部數(shù)據(jù)RAM作間接尋址有兩種方法:第一種由P2口提供高8位外部數(shù)據(jù)RAM地址,由R0或R1提供低8位地址,由此共同尋址64K空間;第二種是用16位的DPTR作寄存器間接尋址。,《單片微機
23、原理及應(yīng)用》教學(xué)課件,存儲器配置(片內(nèi)RAM),89C51片內(nèi)RAM 128字節(jié)(00H—7FH)89C52片內(nèi)RAM 256字節(jié)(00H—0FFH),,,,,00H,20H,2FH,7FH,1FH,30H,80H,FFH,52子系列才有的RAM區(qū),普通RAM區(qū),位尋址區(qū),工作寄存器區(qū),,SFR分布在80H-FFH其中92個位可位尋址,80H,FFH,,89C51 128字節(jié),,89C52 256字節(jié),只能直接尋址
24、,只能寄存器間接尋址,,,5. 變址尋址基址寄存器+變址寄存器間接尋址,以16位的程序計數(shù)器PC寄存器或 16位的數(shù)據(jù)指針寄存器DPTR為基址寄存器,以累加器 A 為變址寄存器,兩者中的“內(nèi)容”形成一個16位的“地址”,該“地址”所指的存儲單元中的內(nèi)容才是操作數(shù)。變址尋址只能對程序存儲器中的表格作尋址操作。程序存儲器中存放的是單片機的執(zhí)行代碼,有時還會有數(shù)據(jù)表,不希望在運行過程中被修改。對程序存儲器訪問的較多的是數(shù)據(jù)表中的數(shù)據(jù),即查表
25、操作。由于程序存儲器是只讀存儲器,因此變址尋址操作只有讀操作而無寫操作。,《單片微機原理及應(yīng)用》教學(xué)課件,設(shè):A中已存有#A4H,DPTR中已存有#1234H] MOVC A,@A+DPTR;(A)←((A)+(DPTR))操作:將A4H+1234H=12D8H單元中的數(shù)放進累加器A,MOVC A, @A+DPTR ;A+DPTR為地址的存儲器
26、 單元內(nèi)容→A MOVC A, @A+PC ;A+PC為地址的存儲器單元 內(nèi)容→AJMP @A+DPTR ;散轉(zhuǎn)指令,可根據(jù)A中不同內(nèi)容,實現(xiàn)跳向不同程序入口的跳轉(zhuǎn)。,6. 相對尋址,以當(dāng)前程序計數(shù)器PC的內(nèi)容為基址,加上指令給出的一字節(jié)補碼數(shù)形成新的PC值的尋址方
27、式。PC中的當(dāng)前值稱為基地址,一字節(jié)補碼數(shù)稱為偏移量,新的PC值稱為轉(zhuǎn)移目的地址。即:當(dāng)前PC值加上指令中規(guī)定的偏移量 rel,構(gòu)成實際的操作數(shù)地址 例如:JC 80H ;C=1跳轉(zhuǎn) 表示進位位C為0,則程序計數(shù)器PC中的內(nèi)容不改變,即不轉(zhuǎn)移。若進位位C為1,則PC中的當(dāng)前值為基地址加上偏移量80H后所得到的結(jié)果作為該轉(zhuǎn)移指令的目的地址。,相對尋址 ROM 程序浮動 以PC當(dāng)前值
28、為基地址,加上相對偏移量rel所得結(jié)果為轉(zhuǎn)移目標(biāo)地址。 rel:帶符號數(shù),單字節(jié)補碼,-128~+127 (80H—7FH) 。例:1000H:JC 80H ;判C轉(zhuǎn)移指令,2字節(jié) 當(dāng)CY=1時,目的地址 = 當(dāng)前PC值 + rel = 源地址 + 轉(zhuǎn)移指令字節(jié)數(shù) + rel,在實際編程中,“rel” 通常用標(biāo)號代替,7. 位尋址,對位地址中的內(nèi)容作位操作的尋址方式。單片機中只有內(nèi)部RAM和特殊功能寄存器的部分
29、單元有位地址(兩者統(tǒng)一編址,地址空間為00H~FFH),因此,位尋址只能對有位地址的這兩個空間作尋址操作。 即:指令中直接給出了操作數(shù)所在的位地址。 例如 SETB 20H ;1→20H位 MOV 32H,C ;進位位C→32H位 CLR P1.0 ;(P1.0) ← 0 SETB ACC.7 ;(
30、ACC.7)← 1 CPL C ;( C )← NOT( C ),《單片微機原理及應(yīng)用》教學(xué)課件,注意: 1)位地址里的數(shù)據(jù)只可能是一個 0 或 1 2)有的位地址十分明確,如 P1.0, ACC.7等, 有的位地址則“不太明確”,如: [MOV A,17H ; (A)←(17H),17H是字節(jié)地址] MOV ACC.0,17H ;(ACC.0)←(17H),這里ACC.0
31、 是位地址所以該指令中的17H是22H單元的第7位,《單片微機原理及應(yīng)用》教學(xué)課件,片內(nèi)RAM中有128個位可按位尋址的位,位地址:00H—7FH分布在:20H—2FH單元;另外,52系列在SFR中還有92個位可按位尋址,,,,,00H,20H,2FH,7FH,1FH,30H,80H,FFH,52子系列才有的RAM區(qū),普通RAM區(qū),位尋址區(qū),工作寄存器區(qū),27H,22H,21H,20H,26H,24H,25H,23H,28H,,
32、,07 06 05 04 03 02 01 00,,,,,,,,0F 0E 0D 0C 0B 0A 09 08,,,,,,,,17 16 15 14 13 12 11 10,,,,,,,,1F 1E 1D 1C 1B 1A 19 18,,,,,,,,27 26 25 24 23 22 21 20,,,,,,,,2F 2E 2D 2C 2B 2A 29 28,,,,,,,,37 36
33、 35 34 33 32 31 30,,,,,,,,3F 3E 3D 3C 3B 3A 39 38,,,,,,,,47 46 45 44 43 42 41 40,,,,,,,,,,2FH,7F 7E 7D 7C 7B 7A 79 78,,,,,,,,,位地址,,總共128個可按位尋址的位,單元地址,,17,D7 D6 D5 D4 D3 D2 D1 D0,表3-1 7種尋址方式及其尋址空間,對片外ROM
34、只能使用變址尋址;對于片外RAM只能使用寄存器間接尋址;內(nèi)部RAM使用頻繁,故尋址方式多,尤其是直接尋址,上面所講各種尋址方式都是針對源操作數(shù),實際上目的操作數(shù)的尋址方式只有寄存器尋址、直接尋址、間接尋址和位尋址共4種方式,,課間休息,《單片微機原理及應(yīng)用》教學(xué)課件,MCS-51指令集,功能分五類,共111條指令,《單片微機原理及應(yīng)用》教學(xué)課件,MCS-51指令集(五大類功能),數(shù)據(jù)傳送類指令: (29條)算術(shù)運算類
35、指令: (24條)邏輯運算及移位類指令: (24條)控制轉(zhuǎn)移類指令: (17條)位操作(布爾操作)類指令:(17條),《單片微機原理及應(yīng)用》教學(xué)課件,內(nèi)部存儲器間傳送: (MOV——16條)外部數(shù)據(jù)存儲器與累加器間傳送: (MOVX——4條)程序存儲器向累加器傳送: (MOVC——2條)數(shù)據(jù)交換:
36、(XCH,XCHD,SWAP——5條)堆棧操作: (PUSH,POP——2條),(一)數(shù)據(jù)傳送類指令(5種/29條) P.49,內(nèi)部RAM間的數(shù)據(jù)傳送(16條)(1)指令格式指令格式:MOV [目的字節(jié)],[源字節(jié)]功 能:把源字節(jié)指定的變量傳送到目的字節(jié)指定的存儲單元中,源字節(jié)內(nèi)容不變,目的字節(jié)內(nèi)容被覆蓋。(2)操作數(shù)操作數(shù):A,Rn,direct,@Ri,DPTR,#data,,傳送指令使
37、用注意事項: 片內(nèi)存儲器可以以直接尋址的方式將數(shù)據(jù)從一個單元送到另一個單元;片內(nèi)存儲器的任一單元可以與工作寄存器或間址寄存器指定的地址單元間相互傳送數(shù)據(jù),但是,工作寄存器之間不能直接傳送數(shù)據(jù),也不能通過間址寄存器與片內(nèi)存儲器傳送數(shù)據(jù);立即數(shù)可以送到以寄存器間接尋址、直接尋址的方式的片內(nèi)存儲器的任一單元或工作寄存器;堆棧操作只能采用直接尋址方式。 傳送類指令一般不影響標(biāo)志位,只有堆棧操作可以直接修改程序狀
38、態(tài)字PSW。另外,傳送目的操作數(shù)為ACC的指令將影響奇偶標(biāo)志P 。,以直接地址為目的操作數(shù)的指令(5條) MOV dir,dir MOV dir,#data MOV dir,A MOV dir,Rn MOV dir,@Ri 例:R0=50H,(50H)=10H,指令MOV 35H,@R0執(zhí)行后,(35H)=10H。
39、以間接地址為目的操作數(shù)的指令(3條) MOV @Ri,dir MOV @Ri,#data MOV @Ri,A,《單片微機原理及應(yīng)用》教學(xué)課件,外部數(shù)據(jù)存儲器與累加器間傳送 (4條):MOVX類指令可在累加器與以@DPTR或@Ri所代表的外部 RAM 之間進行數(shù)據(jù)傳送。,例如: MOVX A, @DPTR ——(A)? ((DPTR))MOVX A, @Ri
40、 ——(A)? ((Ri)) MOVX @DPTR, A ——((DPTR)) ?(A) MOVX @Ri, A ——((Ri)) ?(A),16位數(shù)據(jù)傳送指令(1條) MOV DPTR,#data16,例3-3:將外RAM 2010H中內(nèi)容送外RAM 2020單元中。分析:讀2010H中內(nèi)容→A→寫數(shù)據(jù)→2020H中流程如右圖:程序如下:MOV P2,#20
41、H ;輸出高8位地址MOV R0,#10H ;置讀低8位間接地址MOVX A,@R0 ;讀2010H中數(shù)據(jù)MOV R1,#20H ;置寫低8位間接地址MOVX @R1,A ;將A中數(shù)據(jù)寫入2020H中送片內(nèi)RAM2020單元呢?,例3-1:設(shè)(70H)= 60H,(60H)=20H,P1為輸入口,狀態(tài)為0B7H,執(zhí)行如下程序: MOV
42、R0,#70H ;(78H 70H) MOV A,@R0 ;(E6H) MOV R1,A ;(F9H) MOV B,@R1 ;(87H F0H) MOV @R0, P1 ;(A6 90H)結(jié)果:(70H)= 0B7H(B) = 20H
43、(R1) = 60H(R0) = 70H要求:掌握指令功能、查表求機器碼、尋址方式、結(jié)果,例3-2:給出下列指令的執(zhí)行結(jié)果,指出源操作數(shù)的尋址方式。 MOV20H,#25H MOV25H,#10H MOVP1,#0CAH MOVR0,#20H MOVA,@R0 MOVR1,A MOVB,@R1 MOV
44、@R1,P1 MOVP3,R1結(jié)果:(20H)=,(25H)=(P1)=,(R0)=, (A)=, (R1)=(B)=, (25H)= (P3)=,答案: (20H)=25H,(25H)=10H,(P1)=0CAH,(R0)=20H,(A)=25H,(R1)=25H,(B)=10H,(25H)=0CAH,(P3)=25H,《單片微機原
45、理及應(yīng)用》教學(xué)課件,程序存儲器向累加器傳送指令----查表指令(2條): MOVC A,@A+DPTR MOVC A,@A+PC ——通常稱為查表指令,尋址方式屬: “基址寄存器 + 變址寄存器間接尋址”,@A+DPTR或@A+PC指向程序存儲器中的某單元。擬傳送給累加器ACC 的數(shù)據(jù)就是程序中事先寫進去的表格數(shù)據(jù)。這些表格數(shù)據(jù)往往用偽指令 DB,DW 等定義在程序中。例:A=20H,DPTR=2000H,
46、MOVC A @A+DPTR 執(zhí)行后,程序存儲器2020H單元中的內(nèi)容送入A。,(2)用PC作為基寄存器例3-5:ORG 1000H1000H MOV A,#30H;1002H MOVCA,@A+PC;結(jié)果是:A ←(1033H)優(yōu)點:不改變PC的狀態(tài),根據(jù)A的內(nèi)容取表格常數(shù)。缺點(1)表格只能存放在查表指令以下的256個單元內(nèi)(近程查表)表格大小受到限制,且表格只能被
47、一段程序所用。(2)當(dāng)表格首地址與本指令間有其他指令時,須用調(diào)整偏移量,調(diào)整量為下一條指令的起始地址到表格首址之間的字節(jié)數(shù)。,例3-6:閱讀下列程序,給出運行結(jié)果 ,設(shè)(A)=3。1000HADD A,#02H ;加調(diào)整量 1002H MOVC A,@A+PC;查表 1003H NOP 1004H NOP 1005H TAB: DB 0
48、,1,4,9,16,25,36,49,64,81結(jié)果:(A)=09H,顯然,2條NOP指令沒有時,不需調(diào)整。,用DPTR作為基寄存器 例3-4:設(shè)外部ROM的2000H單元開始的連續(xù)10個字節(jié)中已存放有0~9的平方數(shù),要求根據(jù)A中的內(nèi)容(0~9)來查找對應(yīng)的平方值。START:MOVA, #3MOV DPTR,#TABLE MOVC A,@A+DPTR ;查
49、表 …ORG 2000H ↙2003單元內(nèi)容TABLE:DB 0,1,4,9,16,25,36,49,64,81結(jié)果:A ←(2003H),(A)=09H特點:與該指令存放的地址及常數(shù)表格存放的地址無關(guān),因此表格的大小和位置可以在64KB程序存儲器空間中任意安排,一個表格可以為各個程序塊公用。 (遠程查表)。,堆棧指針SP 總是指向棧頂,數(shù)據(jù)傳送類指令(續(xù))堆棧操作指令(2條):,
50、成對使用,例如:當(dāng)(SP)=60H,(A)=30H,(B)=70H時,執(zhí)行下列指令PUSHAcc;(SP)+1=61H→SP,(A)→61HPUSHB;(SP)+1=62H→SP,(B)→62H結(jié)果:(61H)=30H,(62H)=70H,(SP)=62H。執(zhí)行:POP DPH POP DPL 結(jié)果:(DPTR)=7030H,(SP)=60H,《單片微機原理及應(yīng)用》教學(xué)課件,堆
51、棧: 在片內(nèi)RAM中,常常要指定一個專門的區(qū)域來存放某些特別的數(shù)據(jù),它遵循順序存取和后進先出(LIFO/FILO)的原則,這個RAM區(qū)叫堆棧。,功用:1)子程序調(diào)用和中斷服務(wù)時CPU自動將當(dāng)前PC 值壓棧保存,返回時自動將PC值彈棧。2)保護現(xiàn)場/恢復(fù)現(xiàn)場3)數(shù)據(jù)傳輸,例3-7:已知:(A)=30H,(B)=70H 執(zhí)行: MOVSP,#60H;設(shè)棧底PUSHACC ;
52、PUSHB POPB 但如果是 POP ACC POPACC POP B呢?結(jié)果:(A)=30H,(B)=70H,例: 若在外部ROM/EPROM中2000H單元開始依次存放0~9的平方值, 數(shù)據(jù)指針(DPTR)=3A00H, 用查表指令取出
53、2003H單元的數(shù)據(jù)后, 要求保持DPTR中的內(nèi)容不變。MOV A, #03H ; (A) ← 03H , 74 03PUSH DPH ; 保護DPTR高8位入棧 , C0 83PUSH DPL ; 保護DPTR低8位入棧, C0 82MOV DPTR , #2000H ; (DPTR) ← 2000H, 90 20 00MOVC
54、 A, @A+DPTR ; (A) ← (2000H+03H) , 93POP DPL ; 彈出DPTR低8位 , D0 82POP DPH ; 彈出DPTR高8位, (先進后出) , 83,與A的數(shù)據(jù)交換指令數(shù)據(jù)交換指令共5條,完成累加器和內(nèi)部RAM單元之間的字節(jié)或半字節(jié)交換。(1)整字節(jié)交換:XCH A,Rn
55、 ;(A)←→(Rn)XCH A,direct ;(A)←→(direct)XCH A,@Ri ;(A)←→((Ri))(2)半字節(jié)交換:XCHD A,@Ri ;(A)0~3←→((Ri))0~3(3)累加器自身高低4位交換SWAP A ;(A)7~4←→(A)3~0,例3-9 設(shè)(A)=57H,(20H)=68H,(R0)=30H,
56、(30H)=39H,求下列指令的執(zhí)行結(jié)果(1)XCH A,20H ; 結(jié)果:(A)=68H,(20H)=57H(2)XCH A,@R0 ;結(jié)果: (A)=39H,(30H)=57H(3)XCH A,R0 ;結(jié)果: (A)=30H,(R0)=57H(4)XCHD A,@R0 ;結(jié)果: (A)=59H,(30H)=37H(5)SWAP
57、A ;結(jié)果: (A)=75H,將20H單元的內(nèi)容與A的內(nèi)容互換,然后將A的高4位存入R1指向的內(nèi)部RAM單元中的低4位,A的低4位存入該單元的高4位。XCH A, 20HSWAP AMOV @R1, A,例3-10:設(shè)內(nèi)部RAM 40H、41H 單元中連續(xù)存放有4個壓縮的 BCD碼數(shù)據(jù),試編程序?qū)⑦@4 個BCD碼倒序排列。分析:流程如右圖程序如下:MOV
58、A,41HSWAP AXCH A,40HSWAP AMOV 41H,A,《單片微機原理及應(yīng)用》教學(xué)課件,(二)算術(shù)運算類指令(續(xù)),加法運算: (ADD——4條)帶進位加法運算: (ADDC——4條)帶借位減法運算: (SUBB——4條),所有的加法(ADD)、帶進位加法(ADDC)、帶借位減法(SUBB)運算都是以 A
59、為一個加數(shù)或被減數(shù),最終結(jié)果也存進 A 。,加法(ADD)、帶進位加法(ADDC) 以及帶借位減法(SUBB)運算中,如果產(chǎn)生了進位或借位,將自動對PSW中的Cy標(biāo)志位置“1” 。,帶進位加法(ADDC):(A)?(A)+(Cy)+(第二操作數(shù))帶借位減法(SUBB):(A)?(A)-(Cy)-(第二操作數(shù)),?,?,?,該類指令的主要功能: (1) 對8位無符號數(shù)進行直接的運算。 (2) 借助溢出標(biāo)志對有符號的二進制整數(shù)進行加減運
60、算。 (3) 借助進位標(biāo)志,可以實現(xiàn)多字節(jié)的加減運算。 (4) 對壓縮的BCD數(shù)進行運算(壓縮BCD數(shù),是指在1個字節(jié)中存放2位BCD數(shù))。 (5) 算術(shù)運算指令對程序狀態(tài)字PSW中的Cy、AC、OV三個標(biāo)志都有影響,根據(jù)運算的結(jié)果可將它們置1或清除。但是加1和減1指令不影響這些標(biāo)志。,(二)算術(shù)運算類指令(續(xù)),加1/減1操作: (INC,DEC——9條)INC, DEC與用加/減法指令做加1/減1 操作不同之處在于INC
61、、DEC不影響標(biāo)志位.,單字節(jié)乘/除運算: (MUL,DIV——2條)兩個單字節(jié)數(shù)的乘/除法運算只在A與B之間進行。MUL AB: (A)與(B)相乘, 積為16位數(shù), (B)?積的高8位; (A)?積的低8位如果積大于255,則OV置1,否則OV清0。Cy標(biāo)志總是清0DIV AB: (A)除以(B),結(jié)果用2字節(jié)表示, (A)?商的整數(shù)部分;(B)?余數(shù)且Cy和溢出標(biāo)志位OV清“0
62、”.如果B的內(nèi)容為0(即除數(shù)為0),則存放結(jié)果的A、B中的內(nèi)容不定,并溢出標(biāo)志位OV置1。,設(shè)(A)=46H,(R2)=68H 執(zhí)行: ADD A,R2 0100 0110 +) 0110 1000 1010 1110 (A)=0AEH結(jié)果 CY=0, OV=1 , AC=0,P=1若將參與運算的兩數(shù)視為無符號數(shù),(
63、A)=174,說明和數(shù)正確,沒有超出0~255,CY=0;若將參與運算的兩數(shù)視為帶符號數(shù),(A)= - 82,兩個正數(shù)的和為負(fù)數(shù),說明和數(shù)錯誤,發(fā)生溢出, OV=1,,例:設(shè)(A)=D3H,(30H)=E8H 執(zhí)行: ADD A,30H 1101 0011 (D3) (—45)補 無符號數(shù) 211 +) 1110 1000 (E8) (—24)補
64、 232 11011 1011結(jié)果 CY=1,AC=0,P=0,OV=0沒有溢出,(A)=BBH (補碼真值-69,正確)求真值時,若D7 = 1,則通過對補碼再求補,添“-”而得; 操作數(shù)用戶既可看作無符號數(shù),也可看作有符號數(shù)。但計算機總是按照帶符號數(shù)法則運算并產(chǎn)生PSW標(biāo)志位的。進位標(biāo)志用來判斷無符號數(shù)的運算結(jié)果是否正確。若為無符號數(shù)相加CY
65、=1代表十進制數(shù)256, 但若是兩個帶符號數(shù)相加, CY沒有意義。此外還可用來實現(xiàn)多字節(jié)數(shù)的運算。 溢出標(biāo)志主要用來判斷有符號數(shù)的運算結(jié)果是否正確。表示位6和位7不同時有進位時,溢出標(biāo)志置位。表示運算結(jié)果超出了有符號數(shù)的有效范圍(-128~+127)。一個正數(shù)和一個負(fù)數(shù)相加是不可能產(chǎn)生溢出的, 只有兩個同符號數(shù)相加才有可能產(chǎn)生溢出, 表示運算結(jié)果出錯。,,例:,先做67H+A0H=107H,而107H顯然超過了0FFH,因此最終保存
66、在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,說明:由于51單片機是一種8位機,所以只能做8位的數(shù)學(xué)運算,但8位運算的范圍只
67、有0~255,這在實際工作中是不夠的,因此就要進行擴展,一般是將2個8位(兩字節(jié))的數(shù)學(xué)運算合起來,成為一個16位的運算,這樣,可以表達的數(shù)的范圍就可以達到0~65535。,設(shè):1067H存在R1R0中, 30A0H存在R3R2中,計算R1R0+R3R2,結(jié)果存在R5R4中。,MOV A,R0ADD A,R2 ;R0+R2→A和CYMOV R4,AMOV A,R1ADDC A,R3 ;R1+R3+CY→A和CYM
68、OV R5,A,例:設(shè)(A)=88H,(30H)=99H,CY=1 執(zhí)行:ADDC A,30H1000 1000 (88H) (-120)補 1001 1001 (99H) (-103)補 +) 1 10010 0010(符號位由1變0,實際上符號位移入進位標(biāo)志)結(jié)果:CY=1,AC=1,P=0,OV=1,(A)=22H(真值
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 第3章 指令系統(tǒng)
- 第3章 指令系統(tǒng)
- 第3章-指令系統(tǒng)
- 第3章 指令系統(tǒng).PDF
- 第3章 指令系統(tǒng).PDF
- 第3章-尋址方式指令系統(tǒng)
- 第5章 指令系統(tǒng)
- 第5章 指令系統(tǒng)
- 第3章 指令系統(tǒng).ppt.convertor
- 第3章單片機指令系統(tǒng)
- 第3章arm微處理器的指令系統(tǒng)
- 第3章 mcs-51 的指令系統(tǒng)new1
- 3指令系統(tǒng)
- (第3章_arm尋址方式與指令系統(tǒng))_9_10節(jié)-
- 指令系統(tǒng)
- 第三章 指令系統(tǒng)
- 單片機指令系統(tǒng)3
- 第五章 指令系統(tǒng)習(xí)題
- 考點指令系統(tǒng)
- 指令系統(tǒng)74755
評論
0/150
提交評論