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