




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、教學(xué)基本要求: (1)、了解單片機(jī)的指令系統(tǒng)、編程語(yǔ)言等基本概念; (2)、熟悉單片機(jī)匯編語(yǔ)言指令格式中符號(hào)的意義; (3)、熟悉單片機(jī)匯編語(yǔ)言指令系統(tǒng)每條指令的功能; (4)、掌握單片機(jī)指令系統(tǒng)的7種尋址方式; (5)、掌握單片機(jī)指令系統(tǒng)每類指令的用法。 教學(xué)重點(diǎn): (1)、單片機(jī)指令系統(tǒng)的尋址方式; (2)、片內(nèi)、外RAM單元之間的數(shù)據(jù)傳送; (3)、加法運(yùn)算指令組的用法; (4)、邏輯運(yùn)算指令組的用法; (5)、控制轉(zhuǎn)移指令組的用法。,第3章 80C51單片機(jī)指令系統(tǒng),教學(xué)難點(diǎn): (1)、寄存器間接尋址、變址尋址、相對(duì)尋址等概念; (2)、堆棧操作指令的應(yīng)用。 (3)、十進(jìn)制調(diào)整指令DA
2、 A的應(yīng)用; (4)、控制轉(zhuǎn)移指令轉(zhuǎn)移目的地址、偏移量rel的計(jì)算; (5)、子程序調(diào)用、返回指令的用法。,3.1 單片機(jī)指令系統(tǒng)概述,1、指令系統(tǒng)概述 指令:是供用戶使用的單片機(jī)的軟件資源,是單片機(jī)所能接受 的軟件工作者的命令的最小工作單位。 指令系統(tǒng):單片機(jī)所能執(zhí)行的指令集合。 機(jī)器語(yǔ)言:指令以二進(jìn)制碼來(lái)表示。 匯編語(yǔ)言:指令以助記符形式來(lái)表示。 機(jī)器語(yǔ)言程序:使用機(jī)器語(yǔ)言編寫的程序。 匯編語(yǔ)言程序:使用匯編語(yǔ)言編寫的程序。 注意:MCS-51單片機(jī)指令系統(tǒng)不具有通用性,因此,用其編寫 的匯編語(yǔ)言程序也不具有通用性,不能移植。,MCS-51系列單片機(jī)的匯編語(yǔ)言指令系統(tǒng)共有111條指令,其中
3、49條為單字節(jié)指令,45條為雙字節(jié)指令,17條為三字節(jié)指令。 從指令執(zhí)行的時(shí)間來(lái)看,單機(jī)器周期指令64條,雙機(jī)器周期指令45條,四機(jī)器周期指令2條。 MCS-51單片機(jī)的指令系統(tǒng)共有33個(gè)功能,用匯編語(yǔ)言編程時(shí),只需44個(gè)助記符。 (1)、數(shù)據(jù)傳送類指令(29條) (2)、算術(shù)運(yùn)算類指令(24條) (3)、邏輯運(yùn)算及移位類指令(24條) (4)、控制轉(zhuǎn)移類指令(17條) (5)、位操作類指令(17條),2、MCS-51單片機(jī)指令格式,指令格式:即指令的表示方法,其內(nèi)容包括指令的長(zhǎng)度和指令內(nèi)部信息的安排。 采用助記符表示的匯編語(yǔ)言指令格式如下:,標(biāo)號(hào): 操作碼助記符 目的操作數(shù),源操作數(shù) ;注釋
4、,(1)一條指令中標(biāo)號(hào)、操作數(shù)、注釋部分可有可無(wú),但操作碼部分必不可少。 (2)標(biāo)號(hào)是程序員根據(jù)編程需要給指令設(shè)定的符號(hào)地址,標(biāo)號(hào)由18個(gè)字符組成,不能用系統(tǒng)規(guī)定的寄存器名,也不能用指令系統(tǒng)中的助記符名稱,它的第一個(gè)字符必須是英文字,不能是數(shù)字或其它符號(hào),標(biāo)號(hào)后必須用冒號(hào)“:”。,(3)操作碼表示指令的操作種類,用來(lái)規(guī)定指令進(jìn)行什么操作,常用操作碼的英文名稱或縮寫形式來(lái)表示,操作碼后必須有一個(gè)或多哥空格“ ”作間隔符。 例如:MOV 表示數(shù)據(jù)傳送操作,ADD 表示加法操作。 (4)操作數(shù)表示指令操作的對(duì)象,它可能是一個(gè)具體的數(shù)據(jù),也可能是指出到哪里取得數(shù)據(jù)的地址或符號(hào)。 一條指令中,可能沒(méi)有(
5、RET指令),也可能有一個(gè)(CPL A指令)、兩個(gè)(MOV A,#00H指令, MOV 30H,#50H指令)或三個(gè)(CJNE A,#00H,NEXT)操作數(shù)。 根據(jù)操作數(shù)的位置的不同,可分為目的(左)操作數(shù)和源(右)操作數(shù),操作數(shù)之間也以逗號(hào)“,”相隔(乘法指令MUL AB和除法指令DIV AB除外)。,(5)注釋是對(duì)指令的解釋說(shuō)明,用以提高程序的可讀性。注釋前必須加分號(hào)“;”。 (6)書寫匯編語(yǔ)言指令必須注意以上規(guī)則。,3、指令格式中符號(hào)意義說(shuō)明,Rn:當(dāng)前寄存器組的8個(gè)通用寄存器R0R7(n=07)。 Ri:當(dāng)前寄存器組中的2個(gè)寄存器RO,R1,可作地址指針,即間接尋址的寄存器(i=0,
6、1)。 direct:內(nèi)部RAM的8位地址,既可以是內(nèi)部RAM的低128個(gè)單元地址(0127),也可以是專用寄存器的單元地址或符號(hào),如I/O端口,控制寄存器,狀態(tài)寄存器等(128255)。 #data:包含在指令中的8位立即數(shù)。 #data16:包含在指令中的16位立即數(shù)。 addr16:表示16位目的地址,只限于在LCALL和LJMP指令中使用,目的地址范圍是64KB的程序存儲(chǔ)器地址空間。,addr11:表示11位目的地址,只限于在ACALL和AJMP指令中使用,目的的地址必須存放在與下一條指令第一個(gè)字節(jié)同一個(gè)2KB程序存儲(chǔ)器地址空間之內(nèi)。 Rel:相對(duì)轉(zhuǎn)移指令中的偏移量,為8位帶符號(hào)補(bǔ)碼數(shù)
7、。 DPTR:數(shù)據(jù)指針,可用作16位的地址寄存器。 Bit:內(nèi)部RAM或?qū)S眉拇嫫髦械闹苯訉ぶ肺弧?A:累加器(直接尋址方式的累加器表示為Acc) B:B寄存器,用于MUL和DIV指令中。 C:進(jìn)位標(biāo)志位或布爾處理機(jī)中的累加位。 :為間址寄存器或基址寄存器的前綴標(biāo)志。 /:位操作數(shù)的前綴,表示對(duì)該位狀態(tài)取反。 (X):某寄存器或某單元中的內(nèi)容。,(X):由X間接尋址的單元中的內(nèi)容。 :表示將箭頭右邊的內(nèi)容傳送至箭頭的左邊。,3.2 80C51單片機(jī)指令尋址方式,MCS-51單片機(jī)指令系統(tǒng)中的大多數(shù)指令執(zhí)行時(shí)都需要使用操作數(shù),而在單片機(jī)中只有指定了操作數(shù)的存儲(chǔ)單元才能得到操作數(shù),因此,要得到操作
8、數(shù),就只需找到操作數(shù)存放的單元即可。 所謂尋址方式:即如何確定參與操作的數(shù)的真正單元。 根據(jù)操作數(shù)單元指定方法的不同,就有了不同的尋址方式。 MCS-51單片機(jī)共有7種尋址方式。 由于指令中的操作數(shù)有目的(左)操作數(shù)和源(右)操作數(shù)之分,因此,在講解尋址方式時(shí),均以源(右)操作數(shù)為例。 (1)寄存器尋址方式 a)、寄存器尋址就是指操作數(shù)在寄存器中,因此,指定了寄存器就得到了操作數(shù)。,b)寄存器尋址的指令中,以符號(hào)名稱來(lái)表示寄存器。 例: 假設(shè)原來(lái)(A)=30H,(R1)=40H,現(xiàn)執(zhí)行指令MOV A, R1; 指令功能:將R1中的內(nèi)容(操作數(shù))送A中; 指令執(zhí)行過(guò)程:A(R1); 指令執(zhí)行結(jié)果
9、:(A)=(R1)=40H。 c)尋址范圍:1)當(dāng)前工作寄存器組R0R7; 2)部分專用寄存器A,AB,DPIR等。 例:MOV P1, A; 將累加器A的內(nèi)容送到P1口 MOV P1, R4;將寄存器R4的內(nèi)容送到P1口 CLR A; 將累加器A清0 CPL A; 將累加器A中的內(nèi)容取反 MUL AB; 將累加器A的內(nèi)容與寄存器B的內(nèi)容相乘,(2)直接尋址方式 a)直接尋址即指令所需的操作數(shù)直接以操作數(shù)存放的單元地址的形式給出。 例:假設(shè)內(nèi)部RAM 3AH單元的內(nèi)容是88H,累加器A的內(nèi)容是10H,現(xiàn)執(zhí)行指令 MOV A,3AH。 指令功能:將3AH中的內(nèi)容(操作數(shù))送A中; 指令執(zhí)行過(guò)程:
10、A(3AH); 指令執(zhí)行結(jié)果:(A)=(3AH)=88H。 b)采用直接尋址的指令一般是雙字節(jié)或三字節(jié)指令。 c)直接尋址是訪問(wèn)專用寄存器的唯一方法。 d)尋址范圍: 1)內(nèi)部RAM低128個(gè)單元,低128單元地址在指令中須以,直接單元地址形式給出; 2)專用寄存器,專用寄存器除以單元地址形式給出外,還可以以寄存器符號(hào)的形式給出。 例:MOV P1, 20H;將內(nèi)部RAM 20H單元的內(nèi)容傳送到P1口 MOV A, P0; 將P0口的內(nèi)容傳送到A MOV A, 80H;將P0口的內(nèi)容傳送到A (3)寄存器間接尋址方式 a)寄存器間接尋址是指指令所需的操作數(shù)是通過(guò)寄存器間接得到的,寄存器中存放的
11、則是操作數(shù)存放的單元地址。 例:假設(shè)內(nèi)部RAM 3AH單元的內(nèi)容是65H,寄存器R0的內(nèi)容是3AH,現(xiàn)執(zhí)行指令 MOV A, R0。 指令功能:先將R0的內(nèi)容3AH作為內(nèi)部RAM的單元地址,再將,內(nèi)部RAM單元地址為3AH中的內(nèi)容65H(操作數(shù))送A中。 指令執(zhí)行過(guò)程: A(R0)或 A(3AH) 指令執(zhí)行結(jié)果:(A)=(R0)=(3AH)=65H。 b)間址寄存器:R0、R1、DPTR、SP。 指令中應(yīng)在間址寄存器名之前加前綴,SP除外。 c)尋址范圍: 1)內(nèi)部RAM低128單元,可使用R0,R1作間址寄存器,其通用形式為Ri(I=0或1)。 例:MOV A, R1 ;將R1指示的地址單元
12、中內(nèi)容傳送至A中。 假設(shè)(R1)=40H,(40H)=90H,即把內(nèi)部RAM中40H單元中的內(nèi)容90H送到A。,2)外部(片外)RAM 64KB單元,可使用DPTR作間址寄存器,其形式為DPTR。 例:MOVX A, DPTR;將DPTR指示的外部RAM地址單元中的內(nèi)容傳送至A。 假設(shè)(DPTR)=1000H,(1000H)=80H,即把外部RAM 1000H單元中的內(nèi)容80H送到A。 3)外部(片外)RAM的低256單元(0000H00FFH),它是一個(gè)特殊的尋址區(qū),既可以使用DPTR作間址寄存器尋址,也可以使用R0或R1作間址寄存器尋址。 例:假設(shè)外部RAM 0020H單元中的內(nèi)容是45H
13、,現(xiàn)需將其送A中。 MOV DPTR, #0020H; MOVX A, DPTR 或 MOV R0, #20H; MOVX A, R0;,4)在執(zhí)行堆棧操作指令(PUSH,POP)時(shí),也算為寄存器間接尋址 ,即以堆棧指針(SP)作間址寄存器的間接尋址方式。 例:PUSH ACC;將A中的內(nèi)容壓入堆棧 POP ACC;將堆棧中的內(nèi)容彈出,送到A (4)立即尋址方式 a)立即尋址即指令所需的操作數(shù)已在指令中直接給出。 通常,把直接出現(xiàn)在指令中的操作數(shù)稱之為立即數(shù)。為了與直接尋址指令中的直接單元地址相區(qū)別,一般應(yīng)在立即數(shù)前面加“#”標(biāo)志。 b)采用立即尋址的指令,一般為雙字節(jié)。第一個(gè)字節(jié)為指令的操作
14、碼,第二個(gè)字節(jié)為立即數(shù)。 c)尋址范圍:程序存儲(chǔ)器空間。,例:MOV A, #40H; 指令功能:將程序存儲(chǔ)器中某單元的內(nèi)容3AH (立即數(shù))送A中 指令執(zhí)行過(guò)程: A3AH 指令執(zhí)行結(jié)果:(A)=3AH d)除8位立即數(shù)外,MCS-51指令系統(tǒng)中還有一條16位立即尋址指令,即:MOV DPTR,#data16,其功能是把16位立即數(shù)送數(shù)據(jù)指針DPTR。 例:MOV DPTR, #1000H; 指令功能:將程序存儲(chǔ)器中某單元的內(nèi)容1000H(立即數(shù))送DPTR中 MOV P1, #55H;將立即數(shù)55H送P1口 MOV 20H, #55H;將立即數(shù)55H送20H單元 MOV R0, #20H
15、;將立即數(shù)20H送寄存器R0,(5)變址尋址方式 a)變址尋址用于訪問(wèn)程序存儲(chǔ)器中的常數(shù)或數(shù)據(jù)表格。 變址尋址即是以DPTR或PC作為基址寄存器,以累加器A為變址寄存器,并以兩者的內(nèi)容相加形成16位地址作為目的操作數(shù)地址,以達(dá)到訪問(wèn)程序存儲(chǔ)器中的常數(shù)或數(shù)據(jù)表格的目的。 b)尋址范圍:程序存儲(chǔ)器空間。 c)指令數(shù)目:三條,均為一字節(jié)指令 MOVC A, A+DPTR; 指令執(zhí)行過(guò)程: A(A)+(DPTR) 指令執(zhí)行結(jié)果:(A)=(A)+(DPTR) MOVC A, A+PC; 指令執(zhí)行過(guò)程: A(A)+(PC),指令執(zhí)行結(jié)果:(A)=(A)+(PC) JMP A+DPTR 指令執(zhí)行過(guò)程: PC
16、(A)+(DPTR) 指令執(zhí)行結(jié)果:(PC)=(A)+(DPTR) d)注意:三條指令中A的內(nèi)容均為8位二進(jìn)制無(wú)符號(hào)數(shù)。,(6)位尋址方式 a)位尋址即對(duì)二進(jìn)制數(shù)據(jù)位進(jìn)行尋址。 b)尋址范圍: 1)、內(nèi)部RAM中的位尋址區(qū)(單元地址20H2FH),128個(gè)位,位地址是00H7FH。位地址區(qū)中的位有兩種表示方法: 直接使用位地址表示;單元地址加位數(shù)表示 例:MOV C, 20H;將位地址為20H的位狀態(tài)傳送給累加位C。 例:MOV C, 24H.0;將位地址為20H的位狀態(tài)傳累加位C。 例:SETB 3DH;將內(nèi)部RAM位尋址區(qū)中的3DH位置1。 假設(shè)內(nèi)部RAM 27H單元的內(nèi)容是00H,執(zhí)行S
17、ETB 3DH后,由于3DH對(duì)應(yīng)內(nèi)部RAM 27H的第5位,因此該位變?yōu)?,也就是27H單元的內(nèi)容變?yōu)?0H。該指令的執(zhí)行過(guò)程如圖所示。,2)、專用寄存器的可尋址位 可供位尋址的專用寄存器有11個(gè),PSW,IP IE,PO,P1,P2,P3,SCON,A,TCON,B,實(shí)有可尋址位83位。 專用寄存器的可尋址位有四種表示方法: 直接使用位地址表示 例:MOV C,D5H;將PSW中位地址為D5H的位狀態(tài)傳給累加位C 單元地址加位數(shù)表示 例:MOV C,D0H.5;將PSW中位地址為D5H的位狀態(tài)傳給累加位C 位名稱表示 例:MOV C, F0;將PSW中位地址為D5H的位狀態(tài)傳給累加位C 專用
18、寄存器符號(hào)加位數(shù)表示 例:MOV C,PSW.5;將PSW中位地址為D5H的位狀態(tài)傳給累加位C,(7)相對(duì)尋址方式 a)相對(duì)尋址是為解決程序轉(zhuǎn)移而設(shè)置的,為轉(zhuǎn)移指令所用。 相對(duì)尋址是將程序計(jì)數(shù)器PC的當(dāng)前值與指令中給出的地址偏移量(rel)相加,其和為轉(zhuǎn)移指令的目的地址。 注意:PC當(dāng)前值是指執(zhí)行完該轉(zhuǎn)移指令后的PC值,即轉(zhuǎn)移指令的PC值加上轉(zhuǎn)移指令的字節(jié)數(shù)。 轉(zhuǎn)移指令轉(zhuǎn)移到的目的地址=轉(zhuǎn)移指令PC當(dāng)前值+偏移量rel =轉(zhuǎn)移指令首地址+轉(zhuǎn)移指令字節(jié)數(shù)+rel。 偏移量rel是一個(gè)帶符號(hào)的8位二進(jìn)制補(bǔ)碼數(shù),所能表示數(shù)的范圍為-128+127。 b)尋址范圍:程序存儲(chǔ)器空間 具體地說(shuō),相對(duì)轉(zhuǎn)移是
19、以轉(zhuǎn)移指令所在地址為基點(diǎn),向前,(地址增加方向)最大可轉(zhuǎn)移(127+轉(zhuǎn)移指令字節(jié)數(shù))個(gè)單元地址,向后(地址減少方向)最大可轉(zhuǎn)移(128-轉(zhuǎn)移指令字節(jié)數(shù))個(gè)單元地址。,3.3 80C51單片機(jī)指令分類介紹,MCS-51單片機(jī)指令系統(tǒng)包括111條指令,按功能可以劃分為以下5類: 數(shù)據(jù)傳送類指令(29條); 算術(shù)運(yùn)算類指令(24條); 邏輯運(yùn)算類指令(24條); 控制轉(zhuǎn)移類指令(17條); 位操作類指令(17條);,3.3.1 數(shù)據(jù)傳送類指令,a)指令數(shù)目:29條; b)指令通用格式: 助記符操作碼 目的操作數(shù), 源操作數(shù); c)指令功能:數(shù)據(jù)傳送,屬于數(shù)據(jù)復(fù)制性質(zhì); d)助記符類型(8種): MO
20、V, MOVC, MOVX XCH, XCHD, SWAP, PUSH, POP e)尋址方式 源操作數(shù):寄存器,寄存器間接、直接、立即、變址尋址; 目的操作數(shù):寄存器,寄存器間接、直接尋址,1、內(nèi)部RAM數(shù)據(jù)傳送指令組 a)立即數(shù)傳送指令,例:MOV A, #20H; 指令執(zhí)行后(A)=20H 例:MOV 20H, #20H;指令執(zhí)行后(20H)=20H 例:MOV SP, #60H;指令執(zhí)行后(SP)=60H 例:MOV B, #30H;指令執(zhí)行后(B)=30H,例:MOV R1, #20H; 指令執(zhí)行后(R1)=20H 例:MOV R0, #20H; 指令執(zhí)行后(R0)=20H MOV
21、R0, #30H; 指令執(zhí)行后((R0))=30H或(20H)=30H 例:MOV DPTR, #1020H; 指令執(zhí)行后(DPTR)= 1020H; (DPH)=10H, (DPL)=20H 本指令是三字節(jié)指令,第一個(gè)字節(jié)是操作碼信息,第二、第三字節(jié)分別是操作數(shù)(立即數(shù))的高、低8位信息,其二進(jìn)制目標(biāo)代碼存放格式如下:,b)內(nèi)部RAM單元之間的數(shù)據(jù)傳送指令,例:MOV 30H, 20H; 指令執(zhí)行后(30H)=(20H) 例:MOV P1, 20H; 指令執(zhí)行后(P1)=(20H) 例:MOV P2, P0; 指令執(zhí)行后(P2)=(P0) 例:MOV 40H, P3; 指令執(zhí)行后(40H)=
22、(P3) 例:MOV 0A0H, R7; 指令執(zhí)行后(P2)=(R7) 例:MOV PSW, R1; 指令執(zhí)行后(PSW)=(R1),例:MOV R2, 20H; 指令執(zhí)行后(R2)=(20H) 例:MOV R3, B; 指令執(zhí)行后(R3)=(B) 例:MOV 40H, R0; 指令執(zhí)行后(40H)=(R0) 例:MOV P0, R1; 指令執(zhí)行后(P0)= (R1) 例:MOV R0, 0A0H;指令執(zhí)行后(R0)=(P2) 例:MOV R1, 30H; 指令執(zhí)行后(R1)=(30H) c)通過(guò)累加器的數(shù)據(jù)傳送指令,例:MOV A, R0; 指令執(zhí)行后(A)=(R0) 例:MOV R3, A
23、; 指令執(zhí)行后(R3)=(A) 例:MOV A, B; 指令執(zhí)行后(A)=(B) 例:MOV A, 40H; 指令執(zhí)行后(A)= (40H) 例:MOV PSW, A; 指令執(zhí)行后(PSW)= (A) 例:MOV 60H, A; 指令執(zhí)行后(60H)= (A) 例:MOV A, R0; 指令執(zhí)行后(A)= (R0) 例:MOV R1, A; 指令執(zhí)行后(R1)=(A),(3)外部RAM數(shù)據(jù)傳送指令組,例:將外部RAM 2000H單元的內(nèi)容20H送至A中。 MOV DPTR, #2000H;外部RAM 2000H單元地址作為16位立 即數(shù)送數(shù)據(jù)指針DPTR MOVX A, DPTR; 外部RAM
24、 2000H單元的內(nèi)容20H送A (A)=(DPTR)=(2000H)=20H,例:將累加器A中的內(nèi)容40H送至外部RAM 4000H單元中。 MOV DPTR, #4000H;外部RAM 4000H單元地址作為16位立 即數(shù)送數(shù)據(jù)指針DPTR MOVX DPTR, A ; A的內(nèi)容40H送外部RAM 4000H單元 (DPTR)=(4000H)=(A)=40H,例:將外部RAM 0050H單元的內(nèi)容20H送至A中。 a)MOV DPTR, #0050H;外部RAM 0050H單元地址作為16位立 即數(shù)送數(shù)據(jù)指針DPTR MOVX A, DPTR; 外部RAM 0050H單元的內(nèi)容20H送A
25、(A)=(DPTR)=(2000H)=20H b)MOV R0, #50H; 外部RAM 0050H單元地址作為8位立 即數(shù)送間址寄存器R0 MOVX A, R0; 外部RAM 0050H單元的內(nèi)容20H送A (A)=(R0)=(50H)=20H 例:將累加器A中的內(nèi)容40H送至外部RAM 0050H單元中。 a)MOV DPTR, #0050H;外部RAM 0050H單元地址作為16位立 即數(shù)送數(shù)據(jù)指針DPTR,MOVX DPTR, A ; A的內(nèi)容40H送外部RAM 0050H單元 (DPTR)=(0050H)=(A)=40H b)MOV R1, #50H; 外部RAM 0050H單元地址
26、作為8位立 即數(shù)送間址寄存器R1 MOVX R1, A; A的內(nèi)容40H送外部RAM 0050H單元 (R1)=(50H)=(A)=40H,例:將內(nèi)部RAM 60H單元的內(nèi)容40H送至外部RAM 4000H單元中。 MOV A, 60H; 將60H單元的內(nèi)容40H先送A中,(A)=40H MOV DPTR, #4000H;外部RAM 4000H單元地址送DPTR MOVX DPTR, A ; A的內(nèi)容40H送外部RAM 4000H單元 (DPTR)=(4000H)=(A)=40H,例:將外部RAM 4000H單元的內(nèi)容40H送至內(nèi)部RAM 60H單元中。 MOV DPTR, #4000H;外部
27、RAM 4000H單元地址送DPTR MOVX A, DPTR ;外部RAM 4000H單元的內(nèi)容40H送A (A)=(DPTR)=(4000H)=40H MOV 60H, A ;將A的內(nèi)容40H送60H單元,(60H)=40H,例:將外部RAM 4000H單元內(nèi)容40H送至外部RAM 0050H單元中。 MOV DPTR, #4000H;外部RAM 4000H單元地址送DPTR MOVX A, DPTR ;外部RAM 4000H單元的內(nèi)容40H送A (A)=(DPTR)=(4000H)=40H MOV R0, #50H ;外部RAM 0050H單元地址送間址寄存器R0 MOVX R0,A;
28、外部RAM(0050H)=(A)=40H,例:將內(nèi)部RAM 60H單元內(nèi)容40H送至內(nèi)部RAM 50H單元中。 a)MOV 50H, 60H;內(nèi)部RAM 60H單元內(nèi)容40H送至內(nèi)部RAM 50H單元中,(50H)=(60H)=40H b)MOV A,60H;先將內(nèi)部RAM 60H單元內(nèi)容40H送A,(A)=40H MOV 50H,A;再將A的內(nèi)容送內(nèi)部RAM 50H單元,(50H)=40H,注意: 1)外部RAM與外部RAM單元之間、外部RAM與內(nèi)部RAM單元之間的數(shù)據(jù)傳送必須采用寄存器間接尋址的方式,而且必須通過(guò)累加器A進(jìn)行; 2)MCS-51指令系統(tǒng)中沒(méi)有專用的存儲(chǔ)器讀寫指令,實(shí)際上外部
29、數(shù)據(jù)存儲(chǔ)器數(shù)據(jù)傳送指令就是外部RAM的讀寫指令; 3)內(nèi)部RAM單元之間的數(shù)據(jù)傳送可有多種尋址方式。,(4)程序存儲(chǔ)器數(shù)據(jù)傳送指令組,程序存儲(chǔ)器數(shù)據(jù)傳送指令組既可用于內(nèi)部程序存儲(chǔ)器,也可用于外部程序存儲(chǔ)器。 程序存儲(chǔ)器數(shù)據(jù)傳送指令組的指令只有兩條,均為單字節(jié)指令,采用變址尋址方式。數(shù)據(jù)只能從程序存儲(chǔ)器單向讀出,而且也必須通過(guò)累加器A進(jìn)行傳送。 MOVC A, A+DPTR; MOVC A, A+PC 這兩條指令用于訪問(wèn)程序存儲(chǔ)器中的數(shù)據(jù)表格,因此也稱之為查表指令。其功能非常重要,將在第四章匯編語(yǔ)言程序設(shè)計(jì)中講解。,(5)數(shù)據(jù)交換指令組,數(shù)據(jù)交換主要在內(nèi)部RAM單元與A之間、A的高、低4位之間進(jìn)
30、行,有整字節(jié)和半字節(jié)兩種交換。,例:假設(shè)(A)=38H,(R0)=54H,執(zhí)行指令XCH A, R0; 結(jié)果為(A)= 54H,(R0)= 38H。 例:假設(shè)(A)=88H,(30H)=45HH,執(zhí)行指令XCH A, 30H; 結(jié)果為(A)= 45H,(30H)= 88H。,例:假設(shè)(A)=34H,(R1)=50H,(50H)= 56H, 執(zhí)行指令XCH A, R1; 結(jié)果為(A)= 56H,((R1))=(50H)=34H。 例:假設(shè)(A)=34H,(R1)=50H,(50H)= 56H, 執(zhí)行指令XCHD A, R1 ; 結(jié)果為(A)= 36H, ((R1))=(50H)=54H。 例:假
31、設(shè)(A)=34H,執(zhí)行指令SWAP A; 結(jié)果為(A)= 43H。 思考題:分析下列程序段執(zhí)行的過(guò)程及結(jié)果: 假設(shè)內(nèi)部RAM 2AH、2BH單元中連續(xù)存放有4個(gè)BCD碼(1個(gè)BCD碼占4個(gè)二進(jìn)制位),MOV R0, #2AH; MOV A, R0; SWAP A; MOV R0, A; MOV R1, #2BH; MOV A, R1; SWAP A; XCH A, R0; MOV R1, A; 程序段執(zhí)行后的最終結(jié)果: (2AH)= ;(2BH)= ;(A)= ;,思考題:解 MOV R0, #2AH;(R0)=2AH MOV A, R0; (A)=a3a2 SWAP A; (A)=a2a3
32、MOV R0, A; (R0)=(2AH)=a2a3 MOV R1, #2BH;(R1)=2BH MOV A, R1; (A)=a1a0 SWAP A; (A)=a0a1 XCH A, R0; (A)=a2a3,(R0)=(2AH)=a0a1 MOV R1, A; (R1)=(2BH)=(A)=a2a3 程序段執(zhí)行后的最終結(jié)果: (2AH)= a0a1 ;(2BH)= a2a3 ;(A)= a2a3 ;,(6)堆棧操作指令組,堆棧操作指令組只有兩條指令:進(jìn)棧指令和出棧指令。 a)進(jìn)棧指令: PUSH direct; 功能:為內(nèi)部RAM低128單元或?qū)S眉拇嫫鲀?nèi)容送至棧頂單元。 指令操作過(guò)程:S
33、P(SP)+1;(SP)(direct) b)出棧指令: POP direct; 功能:棧頂單元內(nèi)容送內(nèi)部RAM低128單元或?qū)S眉拇嫫鳌?指令操作過(guò)程: direct((SP));(SP)(SP)-1 注意:進(jìn)棧指令和出棧指令均采用寄存器間接尋址方式,間址寄存器是SP,,例:將片外RAM 2500H單元的內(nèi)容88H送到片內(nèi)RAM 40H單元, MOV DPTR, #2500H; (DPTR)=2500H MOVX A, DPTR; (A)=(DPTR)=88H MOV SP, #60H; (SP)=60H PUSH ACC; (SP)=61H,(61H)=88H POP 40H; (40H)
34、=88H,(SP)=60H,例:分析以下程序段的執(zhí)行結(jié)果 MOV SP, #60H;(SP)=60H MOV A, #30H;(A)=30H MOV B, #40H;(B)=40H PUSH ACC; PUSH B POP DPH; POP DPL; 執(zhí)行結(jié)果: (DPH)= (DPL)=,例: 單片機(jī)應(yīng)用系統(tǒng)程序設(shè)計(jì)時(shí),經(jīng)常需要用到中斷服務(wù)程序和各類子程序,在執(zhí)行中斷服務(wù)程序和子程序前, 常常需要把程序狀態(tài)寄存器PSW、 累加器A、 數(shù)據(jù)指針DPTR的內(nèi)容保護(hù)起來(lái)(現(xiàn)場(chǎng)進(jìn)棧保護(hù)),在中斷服務(wù)程序和子程序執(zhí)行結(jié)束之前,再恢復(fù)它們的內(nèi)容(現(xiàn)場(chǎng)出?;謴?fù))。以下程序段可實(shí)現(xiàn)上述功能。 MOV SP,
35、 #60H; PUSH PSW; PUSH ACC; PUSH DPL; PUSH DPH; ,POP DPH; POP DPL; POP ACC; POP PSW; 注意:堆棧深度、堆棧平衡,數(shù)據(jù)進(jìn)棧、出棧的先后次序。,3.3.2 算術(shù)運(yùn)算類指令,a)指令數(shù)目:24條; b)指令通用格式: 助記符操作碼 目的操作數(shù), 源操作數(shù); c)指令功能:數(shù)據(jù)算術(shù)運(yùn)算(加 減 乘 除),此類指令對(duì)程序狀態(tài)字PSW的進(jìn)位位(CY),輔助進(jìn)位位(AC),溢出位(OV)三種標(biāo)志位有影響,即對(duì)它們自動(dòng)置位或復(fù)位,但是,加1和減1指令不影響這些標(biāo)志; d)助記符類型(8種): ADD、ADDC、SUBB、INC、
36、DEC、DA、MUL、DIV e)注意: 算術(shù)運(yùn)算類指令都是針對(duì)8位二進(jìn)制無(wú)符號(hào)數(shù)的。,(1)加法指令組,a)將A中的數(shù)與源操作數(shù)所指出的內(nèi)容相加,其相加結(jié)果仍存在A中。 b)8位二進(jìn)制數(shù)加法運(yùn)算指令的一個(gè)加數(shù)總是累加器A。 c)運(yùn)算影響PSW的位狀態(tài) 相加過(guò)程中,若位3有進(jìn)位,則AC置1,否則,AC清0,若位7有進(jìn)位,則CY置1,否則,CY清0。,d)、對(duì)于無(wú)符號(hào)數(shù)相加,若CY置位,說(shuō)明和產(chǎn)生溢出,即大于255。 e)、對(duì)于有符號(hào)數(shù)相加,當(dāng)位6或位7之中只有一位進(jìn)位時(shí),溢出標(biāo)志位OV置位,說(shuō)明和產(chǎn)生了溢出,結(jié)果出錯(cuò)。 OV位只對(duì)有符號(hào)數(shù)加法有意義,對(duì)于無(wú)符號(hào)數(shù)加法無(wú)意義。 溢出表達(dá)式:OV=
37、D6cyD7cy D6cy:位6向位7的進(jìn)位 D7cy:位7向cy的進(jìn)位 例:假設(shè)(A)=C2H,(R0)=A9H,執(zhí)行ADD A, R0 11000010 +10101001 101101011,OV=D6cyD7cy=01=1 若C2H,A9H為無(wú)符號(hào)數(shù),則(A)=6BH,(AC)=0,(CY)=1,則表示溢出,結(jié)果大于255。 若C2H,A9H為有符號(hào)數(shù),則OV=1,表示有溢出,結(jié)果出錯(cuò),因?yàn)閮蓚€(gè)負(fù)數(shù)相加不可能得到正數(shù)的和。 例:假設(shè)(A)=78H,(10H)=64H,執(zhí)行指令A(yù)DD A, 10H,求兩無(wú)符號(hào)數(shù)之和,并說(shuō)明PSW的有關(guān)標(biāo)志位狀態(tài)。 01111000 +) 01100100
38、 11011100 PSW: OV=D6cyD7cy=10=1,CY=0, AC=0。 練習(xí)題:(A)=53H,(R0)=FCH,執(zhí)行指令:ADD A, R0,(2)帶進(jìn)位加法指令組,a)把源操作數(shù)所指示的內(nèi)容和A中的內(nèi)容及進(jìn)位標(biāo)志CY相加,結(jié)果存入A中。運(yùn)算前一個(gè)加數(shù)必定在A中,運(yùn)算后和存于A中。 b)此類指令運(yùn)算結(jié)果同樣對(duì)PSW中相關(guān)位有影響,影響規(guī)則與加法指令組相同。 c)它一般用于多字節(jié)數(shù)的加法運(yùn)算,低字節(jié)相加的和可能產(chǎn)生進(jìn)位,可通過(guò)帶進(jìn)位加法指令將低字節(jié)的進(jìn)位加到高字節(jié)上去,高字節(jié)求和時(shí),必須使用帶進(jìn)位的加法指令。,例:假設(shè)(A)=AEH,(20H)=81H,(CY)=1,求兩數(shù)之和
39、,及PSW相關(guān)位內(nèi)容,執(zhí)行指令A(yù)DDC A, 20H。 10101110 10000001 +) 1 100110000 OV=D6cyD7cy=01=1;CY=1 AC=1 (A)=30H 練習(xí)題:假設(shè)(A)=85H, (20H)=FFH, CY=1求兩數(shù)之和,及PSW相關(guān)位內(nèi)容,執(zhí)行指令A(yù)DDC A, 20H。,(3)帶減位加法指令組,a)把A中的內(nèi)容和源操作數(shù)所指示的內(nèi)容及進(jìn)位標(biāo)志CY相減,結(jié)果存入A中。運(yùn)算前被減數(shù)必定在A中,運(yùn)算后差存于A中。 b)此類指令運(yùn)算結(jié)果同樣對(duì)PSW中相關(guān)位有影響,影響規(guī)則與加法指令組相同。其中,OV位只對(duì)有符號(hào)數(shù)減法有意義。 c)減法運(yùn)算只有帶借位減法指令
40、,而沒(méi)有不帶借位減法指令。如需進(jìn)行不帶借位的減法運(yùn)算,只需在用SUBB指令前先用CLR C指令把CY清0即可。,例:假設(shè)(A)=C9H,(R2)=54H,(CY)=1,求兩數(shù)之差,及PSW相關(guān)位內(nèi)容,執(zhí)行指令SUBB A, R2。 11001001 01010100 -) 1 01110100 OV=D6cyD7cy=10=1 若C9H,54H為無(wú)符號(hào)數(shù),則由于CY=0,無(wú)溢出,結(jié)果正確。 若C9H,54H為有符號(hào)數(shù),則由于OV=1,有溢出,結(jié)果出錯(cuò)。 練習(xí)題: 假設(shè)(A)=DBH,(R4)=73H,(CY)=1,求兩數(shù)之差,及PSW相關(guān)位內(nèi)容,執(zhí)行指令SUBB A, R4。,(4)加1指令組
41、,a)將操作數(shù)所指定單元或寄存器中的內(nèi)容加1,其結(jié)果送回原操作數(shù)單元。 b)此組指令的操作不影響PSW的狀態(tài)。 例:假設(shè)(A)=FFH,(DPTR)=10FFH,(CY)=0,執(zhí)行指令: INC A; (A)=00H, (CY)=0 INC DPTR; (DPTR)=1100H; (CY)=0,(5)減1指令組,a)將操作數(shù)所指定單元或寄存器中的內(nèi)容減1,其結(jié)果送回原操作數(shù)單元。 b)此組指令的操作不影響PSW的狀態(tài)。 c)沒(méi)有DPTR減1指令。 例:假設(shè)(40H)=00H,(R1)=50H, (50H)=60H,(CY)=1執(zhí)行指令:DEC 40H; (40H)=0FFH, (CY)=1 D
42、EC R1; (R1)=(50H)=5FH,(CY)=1,例:內(nèi)部RAM40H和41H單元分別存放兩個(gè)8位二進(jìn)制無(wú)符號(hào)加數(shù),求兩數(shù)相加之和,和存放在內(nèi)部RAM42H單元中。假設(shè)兩數(shù)之和仍是8位二進(jìn)制數(shù)。 解:,例:內(nèi)部RAM40H和41H單元分別存放兩個(gè)8位二進(jìn)制無(wú)符號(hào)加數(shù),求兩數(shù)相加之和,和存放在內(nèi)部RAM42H單元中。假設(shè)兩數(shù)之和仍是8位二進(jìn)制數(shù)。(注意比較兩種編程方法的優(yōu)劣性) 解(1)MOV A, 40H; (A)=(40H) ADD A, 41H; (A)=(40H)+(41H) MOV 42H, A; (42H)= (40H)+(41H) (2)MOV R0, #40H; 設(shè)置數(shù)據(jù)
43、指針,(R0)=40H MOV A, R0; 取第一個(gè)加數(shù),(A)=(40H) INC R0; 修改數(shù)據(jù)指針,(R0)=41H ADD A, R0;兩數(shù)相加(A)=(40H)+(41H) INC R0; 修改數(shù)據(jù)指針,(R0)=42H MOV R0, A;存兩數(shù)和(42H)=(40H)+(41H),例:兩個(gè)三字節(jié)二進(jìn)制無(wú)符號(hào)數(shù)相加,被加數(shù)放在內(nèi)部RAM 20H22H單元(低字節(jié)存放在低地址單元,高字節(jié)存放在高地址單元,即低位在前,高位在后),加數(shù)放在2AH2CH單元,和放在20H22H單元,最高位如有進(jìn)位,則放在23H單元中。 解:數(shù)據(jù)類型(二、十進(jìn)制數(shù),有、無(wú)符號(hào)數(shù));數(shù)據(jù)結(jié)構(gòu)(升、降序排列
44、),被加數(shù) N1 高字節(jié)(8位) 中字節(jié)(8位) 低字節(jié)(8位) 加數(shù) N2 高字節(jié)(8位) 中字節(jié)(8位) 低字節(jié)(8位) +)進(jìn)位位(CY) 進(jìn)位位(CY) 進(jìn)位位(CY) 和 N3 進(jìn)位 高字節(jié)(8位) 中字節(jié)(8位) 低字節(jié)(8位) MOV A, 20H;(A)=被加數(shù)N1低字節(jié) ADD A, 2AH;(A)=被加數(shù)N1低字節(jié)+加數(shù)N2低字節(jié) 低字節(jié)和的進(jìn)位在CY中 MOV 20H,A; (20H)=和N3低字節(jié) MOV A, 21H;(A)=被加數(shù)N1中字節(jié) ADDC A, 2BH;(A)=被加數(shù)N1中字節(jié)+加數(shù)N2中字節(jié)+ 低字節(jié)和的進(jìn)位,中字節(jié)和的進(jìn)位在CY中,MOV 21H,A
45、; (21H)=和N3中字節(jié) MOV A, 22H;(A)=被加數(shù)N1高字節(jié) ADDC A, 2CH; MOV 22H,A; (22H)=和N3高字節(jié) MOV A, #00H; ADDC A, #00H;高字節(jié)和的進(jìn)位位處理 MOV 23H,A; 保存處理后的高字節(jié)和的進(jìn)位 思考題: 1)如果N1、N2、N3的數(shù)據(jù)結(jié)構(gòu)為高字節(jié)存放在低地址單元,低字節(jié)存放在高地址單元,應(yīng)如何修改程序? 2)上述程序,如果利用數(shù)據(jù)指針,采用寄存器間接尋址的方式,應(yīng)如何修改程序?,思考題:1),解:MOV A, 22H;(A)=被加數(shù)N1低字節(jié) ADD A, 2CH;(A)=被加數(shù)N1低字節(jié)+加數(shù)N2低字節(jié) 低字節(jié)
46、和的進(jìn)位在CY中 MOV 22H,A; (22H)=和N3低字節(jié) MOV A, 21H;(A)=被加數(shù)N1中字節(jié),ADDC A, 2BH;(A)=被加數(shù)N1中字節(jié)+加數(shù)N2中字節(jié)+ 低字節(jié)和的進(jìn)位,中字節(jié)和的進(jìn)位在CY中 MOV 21H,A; (21H)=和N3中字節(jié) MOV A, 20H;(A)=被加數(shù)N1高字節(jié) ADDC A, 2AH;(A)=被加數(shù)N1高字節(jié)+加數(shù)N2高字節(jié)+ 中字節(jié)和的進(jìn)位,高字節(jié)和的進(jìn)位在CY中 MOV 20H,A; (20H)=和N3高字節(jié) ADDC A, #00H;高字節(jié)和的進(jìn)位位處理 MOV 1FH,A; 保存處理后的高字節(jié)和的進(jìn)位,思考題:2) 解:MOV R
47、0, #20H;設(shè)置被加數(shù)N1數(shù)據(jù)指針,(R0)=20H MOV R1, #2AH;設(shè)置加數(shù)N2數(shù)據(jù)指針,(R1)=2AH MOV A, R0; 取被加數(shù)N1低字節(jié),(A)=(20H) ADD A, R1; N1低字節(jié)和N2低字節(jié)相加 MOV R0, A; 和的低字節(jié)存于20H INC R0; 修改N1數(shù)據(jù)指針,(R0)=21H INC R1; 修改N2數(shù)據(jù)指針,(R1)=2BH MOV A, R0; 取被加數(shù)N1中字節(jié),(A)=(21H) ADDC A, R1; N1、N2中字節(jié)、低字節(jié)進(jìn)位相加 MOV R0, A; 和的中字節(jié)存于21H INC R0; 修改N1數(shù)據(jù)指針,(R0)=22H,
48、INC R1; 修改N2數(shù)據(jù)指針,(R1)=2CH MOV A, R0; 取被加數(shù)N1高字節(jié),(A)=(22H) ADDC A, R1; N1、N2高字節(jié)、中字節(jié)進(jìn)位相加 MOV R0, A; 和的高字節(jié)存于22H ADDC A, #00H;高字節(jié)和的進(jìn)位位處理 INC R0; MOV R0, A; 保存處理后的高字節(jié)和的進(jìn)位 思考題: 3)上述程序,如果改變N1、N2、N3的數(shù)據(jù)結(jié)構(gòu)(高字節(jié)存放在低地址單元,低字節(jié)存放在高地址單元),應(yīng)如何修改程序?,思考題:3) 解:MOV R0, #22H;設(shè)置被加數(shù)N1數(shù)據(jù)指針,(R0)=22H MOV R1, #2CH;設(shè)置加數(shù)N2數(shù)據(jù)指針,(R1)
49、=2CH MOV A, R0; 取被加數(shù)N1低字節(jié),(A)=(22H) ADD A, R1; N1低字節(jié)和N2低字節(jié)相加 MOV R0, A; 和的低字節(jié)存于22H DEC R0; 修改N1數(shù)據(jù)指針,(R0)=21H DEC R1; 修改N2數(shù)據(jù)指針,(R1)=2BH,MOV A, R0; 取被加數(shù)N1中字節(jié),(A)=(21H) ADDC A, R1; N1、N2中字節(jié)、低字節(jié)進(jìn)位相加 MOV R0, A; 和的中字節(jié)存于21H DEC R0; 修改N1數(shù)據(jù)指針,(R0)=20H DEC R1; 修改N2數(shù)據(jù)指針,(R1)=2AH MOV A, R0; 取被加數(shù)N1高字節(jié),(A)=(20H)
50、ADDC A, R1; N1、N2高字節(jié)、中字節(jié)進(jìn)位相加 MOV R0, A; 和的高字節(jié)存于20H ADDC A, #00H;高字節(jié)和的進(jìn)位位處理 DEC R0; MOV R0, A; 保存處理后的高字節(jié)和的進(jìn)位,(6)乘除指令組,a)乘法指令 MUL AB 1)實(shí)現(xiàn)兩個(gè)8位無(wú)符號(hào)二進(jìn)制數(shù)的乘法操作,被乘數(shù)在A中,乘數(shù)在B中,乘積為16位,高8位送B,低8位送A。 2)此指令影響PSW的狀態(tài),CY位總被清0,當(dāng)乘積大于255,則OV=1,否則清0。 例:(A)=4EH, (B)=5DH, 執(zhí)行指令 MUL AB 01001110 ) 01011101 1110001010110 (B)=1C
51、H (A)=56H, OV=1, CY=0,b)乘法指令 DIV AB 1)實(shí)現(xiàn)兩個(gè)8位無(wú)符號(hào)二進(jìn)制數(shù)除法,被除數(shù)在A,除數(shù)在B,A商,B余數(shù)。 2)此指令影響PSW位狀態(tài), CY位總被清0。當(dāng)除數(shù)為0(B=0)OV=1,表示除法沒(méi)有意義。 例:(A)=11H,(B)=04H,執(zhí)行指令 DIV AB 其結(jié)果(A)=01H, B=1, CY=OV=0,(7)十進(jìn)制調(diào)整指令 DA A,指令功能:用于對(duì)BCD碼十進(jìn)制數(shù)加法運(yùn)算的結(jié)果進(jìn)行修正。 a)十進(jìn)制調(diào)整問(wèn)題 指令系統(tǒng)中,只有針對(duì)二進(jìn)制數(shù)的加法指令(ADD、ADDC),而沒(méi)有專門用于十進(jìn)制數(shù)(BCD碼)的加法指令,因此,十進(jìn)制數(shù)(BCD碼)的加法
52、運(yùn)算只能借助于二進(jìn)制數(shù)的加法指令,但二進(jìn)制數(shù)加法指令不能完全適用于十進(jìn)制數(shù)(BCD碼)加法運(yùn)算。 6+3=9 8+7=15 8+9=17 0110 1000 1000 )0011 )0111 )1001 1001 1111 1 0001 (9) (11),12+34=46 18+26=44 71+64=135 95+87=182 00010010 00011000 01110001 10010101 )00110100 )00100110 )01100100 )10000111 01000110 00111110 11010101 1 00011100 (46) b)出錯(cuò)原因 BCD碼是4位二
53、進(jìn)制編碼,4位二進(jìn)制數(shù)共有16個(gè)編碼,但BCD碼只用了其中10個(gè)(00001001),剩下6個(gè)(10101111)沒(méi)用,為無(wú)效碼。 在BCD碼加法運(yùn)算中,凡結(jié)果進(jìn)入或者跳過(guò)無(wú)效編碼區(qū)時(shí),其結(jié)果就是錯(cuò)誤的。,c)調(diào)整方法: 1)1位BCD碼加法運(yùn)算出錯(cuò)調(diào)整 1位BCD碼加法運(yùn)算出錯(cuò)情況有兩種: 相加結(jié)果大于9,進(jìn)入無(wú)效編碼區(qū); 相加結(jié)果有進(jìn)位(AC),跳過(guò)無(wú)效編碼區(qū)。 以上兩種情況均使相加結(jié)果比正確值小6,調(diào)整方法就是加6。 6+3=9 8+7=15 8+9=17 0110 1000 1000 )0011 )0111 )1001 1001 1111 1 0001 )0110(6) )0110(6
54、) 10101(15) 10111(17),2)2位(字節(jié))BCD碼加法運(yùn)算出錯(cuò)調(diào)整 2位(字節(jié))BCD碼加法運(yùn)算出錯(cuò)情況有三種: 相加結(jié)果高4位或低4位大于9,進(jìn)入無(wú)效編碼區(qū); 相加結(jié)果高4位或低4位產(chǎn)生進(jìn)位,跳過(guò)無(wú)效編碼區(qū); 相加結(jié)果高4位為9,低4位大于9,這樣低位加6修正時(shí)產(chǎn)生的進(jìn)位會(huì)使高位大于9,進(jìn)入無(wú)效編碼區(qū)。 A的低4位大于9或(AC)=1,則進(jìn)行低4位加6修正: A (A)+06H A的高4位大于9或(CY)=1,則進(jìn)行高4位加6修正: A (A)+60H A的高4位等于9,低4位大于9,則進(jìn)行高4位和低4位分別加6修正 A (A)+66H,12+34=46 18+26=44
55、71+64=135 95+87=182 00010010 00011000 01110001 10010101 )00110100 )00100110 )01100100 )10000111 01000110 00111110 11010101 1 00011100 )00000110 )01100000 )01100110 01000100 1 00110101 1 10000010 (不需修正) (加06H修正) (加60H修正) (加66H修正) (46) (44) (135) (182) 例 (A)=56H,(R5)=67H,均為BCD碼,執(zhí)行指令 ADD A, R5; DA A; (
56、CY)=1,(A)=23H,,思考題: 兩個(gè)三字節(jié)十進(jìn)制無(wú)符號(hào)數(shù)相加,被加數(shù)放在內(nèi)部RAM 20H22H單元(低字節(jié)存放在低地址單元,高字節(jié)存放在高地址單元,即低位在前,高位在后),加數(shù)放在2AH2CH單元,和放在20H22H單元,最高位如有進(jìn)位,則放在23H單元中,3.3.3 邏輯運(yùn)算及移位類指令,a)指令數(shù)目:24條; b)指令功能:數(shù)據(jù)邏輯運(yùn)算,移位操作; d)助記符類型(9種): ANL,ORL,XRL,RL,RLC,RR,RRC,CLR,CPL。 (1)邏輯與運(yùn)算指令組,a)功能: 前4條指令將A的內(nèi)容與操作數(shù)所指出的內(nèi)容進(jìn)行按位邏輯與,結(jié)果送A,影響P位。 后2條指令將直接地址單元
57、中的內(nèi)容和源操作數(shù)所指出的內(nèi)容按位進(jìn)行邏輯與,結(jié)果送直接地址單元。 b)注意: 若直接地址是P0P3時(shí),這是一條“讀-修改-寫”端口指令。 當(dāng)直接地址的內(nèi)容與立即數(shù)操作時(shí),可以對(duì)內(nèi)部RAM的任何一個(gè)單元或SFR以及端口的指定位進(jìn)行清0操作。 ANL direct, #data ANL A, #data,例:(A)=1FH,(30H)=83H,執(zhí)行ANL A,30H 00011111 ) 10000011 00000011 指令執(zhí)行結(jié)果:(A)=03H, (30H)=83H, (P)=0 例:將內(nèi)部20H單元的低4位清0,高4位保持不變。假設(shè)(20H)=87H,執(zhí)行ANL 20H,#0FOH。 10000111 )11110000 10000000 指令執(zhí)行結(jié)果:(20H)=80H 思考題:將P0口奇數(shù)位口線的狀態(tài)變?yōu)?。,(2)邏輯或運(yùn)算指令組,a)功能: 前4條指令將A的內(nèi)容與源操作數(shù)所指示的內(nèi)容按位進(jìn)行邏輯或運(yùn)算,結(jié)果存A中,執(zhí)行指令后影響P。 后2條指令將直接地址的內(nèi)容與A的內(nèi)容或立即數(shù)按
溫馨提示
- 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ù)網(wǎng)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025初二下學(xué)期班主任心理健康自助計(jì)劃
- 2025財(cái)務(wù)經(jīng)理制造業(yè)財(cái)務(wù)工作總結(jié)及計(jì)劃
- 班主任青藍(lán)工程能力提升計(jì)劃
- 基于跨模態(tài)語(yǔ)義一致性和半監(jiān)督的跨模態(tài)行人重識(shí)別算法研究
- 文創(chuàng)產(chǎn)品消費(fèi)者感知價(jià)值對(duì)消費(fèi)行為意向的影響研究
- “教、學(xué)、評(píng)”一致性下的高中地理單元教學(xué)設(shè)計(jì)研究
- 高中生演講稿寫作能力培養(yǎng)研究
- 2025小學(xué)二年級(jí)語(yǔ)文上冊(cè)個(gè)性化輔導(dǎo)計(jì)劃
- 廣東外語(yǔ)外貿(mào)大學(xué)《自然保護(hù)地學(xué)》2023-2024學(xué)年第一學(xué)期期末試卷
- 天津農(nóng)學(xué)院《基礎(chǔ)俄語(yǔ)二》2023-2024學(xué)年第一學(xué)期期末試卷
- 2025至2030全球及中國(guó)隔膜式氫氣壓縮機(jī)行業(yè)項(xiàng)目調(diào)研及市場(chǎng)前景預(yù)測(cè)評(píng)估報(bào)告
- 2025年包頭包鋼集團(tuán)招聘筆試備考題庫(kù)(帶答案詳解)
- 初級(jí)保育員培訓(xùn)課件
- 2025年遼寧、吉林、黑龍江、內(nèi)蒙古四省高考物理真題(含答案)
- DB4201∕T 694-2024 押運(yùn)行業(yè)安全生產(chǎn)標(biāo)準(zhǔn)化基本規(guī)范
- 2025至2030中國(guó)精神病醫(yī)院行業(yè)發(fā)展分析及發(fā)展趨勢(shì)分析與未來(lái)投資戰(zhàn)略咨詢研究報(bào)告
- 裝載機(jī)司機(jī)安全培訓(xùn)試題及答案
- 2025年中國(guó)拉臂式車廂可卸式垃圾車市場(chǎng)調(diào)查研究報(bào)告
- 2025年春季學(xué)期班主任工作總結(jié)【課件】
- 2025年中國(guó)二手球鞋行業(yè)市場(chǎng)全景分析及前景機(jī)遇研判報(bào)告
- 2025年天津市中考語(yǔ)文試卷(含標(biāo)準(zhǔn)答案)
評(píng)論
0/150
提交評(píng)論