




已閱讀5頁,還剩108頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
,第3章 MCS - 51單片機指令系統(tǒng),3.1 匯編語言 3.2 尋址方式 3.3 指令系統(tǒng),3.1 匯編語言,3.1.1 指令、指令系統(tǒng)、程序設計語言 指令:是CPU根據(jù)人的意圖來執(zhí)行某種操作的命令。 指令系統(tǒng):一臺計算機所能執(zhí)行的全部指令的集合。 要使計算機按照人的思維完成一項工作,就必須讓CPU按順序執(zhí)行各種操作,即一步步地執(zhí)行一條條的指令。這種按人的要求編排的指令操作序列稱為程序。編寫程序的過程叫做程序設計。 程序設計語言是實現(xiàn)人機交換信息的最基本工具,可以分為機器語言、匯編語言、高級語言。,機器語言:是以二進制代碼來描述指令功能的語言,計算機只能識別二進制代碼。 匯編語言:是用助記符、符號和數(shù)字等來表示指令的程序語言。匯編語言是便于人們識別、記憶、理解和使用的一種指令形式,它和機器語言指令一一對應,也是由計算機的硬件特性所決定的。 例如:“10+20”的例子可寫成: 匯編語言程序 機器語言程序 MOV A,#0AH 74 0AH ADD A,#14H 24 14H,現(xiàn)在描述計算機指令系統(tǒng)及實際應用中主要采用匯編語言形式。采用機器語言編寫的程序稱之為目標程序。采用匯編語言編寫的程序稱之為源程序。計算機能夠直接識別并執(zhí)行的只有機器語言。匯編語言程序不能被計算機直接識別并執(zhí)行,必須經(jīng)過一個中間環(huán)節(jié)把它翻譯成機器語言程序,這個中間過程叫做匯編。匯編有兩種方式:機器匯編和手工匯編。機器匯編是用專門的匯編程序,在計算機上進行翻譯;手工匯編是編程員把匯編語言指令逐條翻譯成機器語言指令?,F(xiàn)在主要使用機器匯編,但有時也用到手工匯編。,3.1.2 指令格式 MCS-51單片機指令系統(tǒng)具有功能強、指令短、執(zhí)行快等特點,共有111條指令。從功能上可劃分成數(shù)據(jù)傳送、算術(shù)操作、邏輯操作、控制程序轉(zhuǎn)移、位操作等五大類;從空間屬性上分為單字節(jié)指令(49條)、雙字節(jié)指令(46條)和最長的三字節(jié)指令(只有16條)。從時間屬性上可分成單機器周期指令(64條)、雙機器周期指令(45條)和只有乘、除法兩條4個機器周期的指令。,指令系統(tǒng)中的指令描述了不同的操作,不同操作對應不同的指令。在結(jié)構(gòu)上,每條指令通常由操作碼和操作數(shù)兩部分組成。操作碼表示計算機執(zhí)行該指令將進行何種操作,操作數(shù)表示參加操作的數(shù)的本身或操作數(shù)所在的地址。MCS-51單片機的指令有無操作數(shù)、單操作數(shù)、雙操作數(shù)三種情況。一條匯編語言指令中最多包含 4 個區(qū)段, 其格式如下所示: 標號: 操作碼 操作數(shù) ;注釋 4 個區(qū)段之間要用分隔符分開: 標號與操作碼之間用“: ”隔開, 操作碼與操作數(shù)之間用空格隔開, 操作數(shù)與注釋之間用“;”隔開, 如果操作數(shù)有兩個以上, 則在操作數(shù)之間要用逗號“,”隔開 (乘法指令和除法指令除外 )。,1. 單字節(jié)指令(49條) 單字節(jié)指令中的8位二進制代碼既包含了操作碼信息,也包含了操作數(shù)的信息。 a.指令碼中隱含著對某個寄存器的操作,例如: CLR AE4H b.指令碼中rrr三位指定了某個寄存器,例如: MOV A,Rn 2. 雙字節(jié)指令(46條) (11101rrr) 雙字節(jié)指令由兩個字節(jié)組成, 一個字節(jié)表示操作碼,另一個字節(jié)表示操作數(shù)或操作數(shù)所在的地址, 其指令格式: 操作碼助記符 立即數(shù)或地址 例如: MOV A, 10H74H 10H 3. 三字節(jié)指令(16條) 三字節(jié)指令中, 第一個字節(jié)為操作碼, 后兩個字節(jié)為操作數(shù)或操作數(shù)所在的地址, 其指令格式: 操作碼助記符 目的操作數(shù)源操作數(shù) 例如: MOV 40H, 30H75H 40H 30H,3.2 尋址方式,所謂尋址方式, 就是尋找操作數(shù)地址的方式, 在用匯編語言編程時, 數(shù)據(jù)的存放、傳送、 運算都要通過指令來完成。 編程者必須自始至終都要十分清楚操作數(shù)的位置, 以及如何將它們傳送到適當?shù)募拇嫫魅⑴c運算。每一種計算機都具有多種尋址方式。,3.2.1尋址方式中常用的符號注釋 Rn當前選定的工作寄存器組R0R7, 即n=07。 Ri當前選定的寄存器區(qū)中可作為地址指針的 2 個寄存器R0、 R1, i=0、1。 data8位立即數(shù),即包含在指令中的 8 位常數(shù)。 data1616位立即數(shù),即包含在指令中的 16 位常數(shù)。 direct 8 位內(nèi)部RAM單元的地址, 它可以是一個內(nèi)部數(shù)據(jù)區(qū) RAM單元(00H7FH)或特殊功能寄存器地址(I / O端口、 控制寄存器、 狀態(tài)寄存器 80H0FFH)。 addr1616 位的目的地址, 用于LJMP, LCALL指令, 可指向 64 KB程序存儲器地址空間。,addr1111位的目的地址, 用于AJMP, ACALL指令。目的地址必須與下一條指令的第一個字節(jié)在同一個 2 KB程序存儲器地址空間之內(nèi)。 rel 8 位帶符號的偏移量字節(jié), 用于SJMP和所有條件轉(zhuǎn)移指令中。 偏移量相對于下一條指令的第一個字節(jié)計算, 在128+127 范圍內(nèi)取值。 bit內(nèi)部數(shù)據(jù)RAM或特殊功能寄存器中的可直接尋址位。 rrr 工作寄存器地址,rrr=000111對應R0R7。 DPTR數(shù)據(jù)指針, 可用作 16 位的地址寄存器。,A累加器。 B寄存器, 用于 MUL和 DIV指令中。 C進位標志或進位位。 間接尋址寄存器或基址寄存器的前綴, 如Ri, DPTR。 /位操作數(shù)的前綴, 表示對該位取反后再參與操作,但不影響該位原值。 (X) X中的內(nèi)容。 (X) 由 X尋址的單元中的內(nèi)容。 指令操作流程,箭頭右邊的內(nèi)容被箭頭左邊的內(nèi)容所代替。,3.2.3 7種尋址方式 在 MCS -51單片機指令系統(tǒng)中, 有以下 7種尋址方式: (1)寄存器尋址; (2) 直接尋址; (3)立即尋址; (4) 寄存器間接尋址; (5) 基址寄存器加變址寄存器間接尋址; (6) 相對尋址; (7) 位尋址。,1. 寄存器尋址 在該尋址方式中, 參加操作的數(shù)存放在寄存器里。寄存器包括8個工作寄存器R0R7, 累加器A, 寄存器B、數(shù)據(jù)指針DPTR和布爾處理器的位累加器C。例如: MOV A,R0 ;(R0) A “INC Rn”指令機器碼格式為00001rrr。若rrr=010B,則Rn=R2,即 INC R2 ; (R2)+1 R2,表 3 1低3位操作碼與寄存器Rn的對應關(guān)系,指令功能:將R2工作寄存器的內(nèi)容加1后送回R2。如果(R2)=24H,且選定的工作寄存器組為第1組(RS1RS0=01B)。這該指令的執(zhí)行過程為:,圖 3 1寄存器尋址方式,2. 直接尋址 在指令中直接給出操作數(shù)的地址(片內(nèi)RAM單元的地址), 這種尋址方式就屬于直接尋址方式。在這種方式中, 指令的操作數(shù)部分直接是操作數(shù)的地址。 例如:MOV A,40H;(40H)A (E5H 40H),圖 3 2直接尋址方式,在MCS -51 單片機指令系統(tǒng)中, 直接尋址方式中可以訪問 2 種存儲器空間: (1) 內(nèi)部數(shù)據(jù)存儲器的低 128 個字節(jié)單元(00H7FH)。 (2) 特殊功能寄存器既可以使用它們的地址,也可以使用它們的名字。例如: MOV A,P1 MOV A, 90H;(P1口)A :累加器A、Acc和E0H等三種形式,分屬于兩種不同的尋址方式,但指令的執(zhí)行效果是完全相同的。例如: INC A(機器碼04H,屬于寄存器尋址)、INC Acc和INC 0EH (機器碼05E0H,屬于直接尋址)。 直接尋址的地址占一個字節(jié),所以,一條直接尋址方式的指令至少占內(nèi)存兩個單元。,3. 立即尋址 立即尋址方式是指操作數(shù)包含在指令字節(jié)中。 跟在指令操作碼后面的數(shù)就是參加運算的數(shù), 該操作數(shù)稱為立即數(shù)。 用“#”號表示。立即數(shù)有一字節(jié)和二字節(jié)兩種可能, 例如指令: MOV A, 3AH ;3AH A(74H 30H) MOV DPTR, 0DFFFH (90H DFH FFH) 上述兩條指令均為立即尋址方式, 第一條指令的功能是將立即數(shù) 3AH送累加器A中, 第二條指令的功能是將立即數(shù) 0DFFFH送數(shù)據(jù)指針DPTR中(0DFHDPH, 0FFHDPL)。,4. 寄存器間接尋址 在這種尋址方式中, 寄存器的內(nèi)容為操作數(shù)的地址。 寄存器間接尋址只能使用寄存器R0、R1 作為地址指針,尋址內(nèi)部RAM區(qū)的數(shù)據(jù); 當訪問外部RAM時, 可使用R0、 R1及DPTR作為地址指針。寄存器間接尋址符號為“”。 :(1)Ri可用于尋址片內(nèi)RAM007FH和片外RAM00FFH的空間; DPTR可尋址片外64KB區(qū)域。 (2)寄存器間址指令Ri不能尋址SFR,下面指令不能訪問SP: MOV R0,81H MOV A, R0,例如: 將片內(nèi)RAM65H單元的內(nèi)容47H送入A中,指令為: MOV A,R0 ;(R0) A (E6H) 其中R0中的內(nèi)容為65H。,圖 3 3寄存器間接尋址方式,5.變址尋址(基址寄存器變址寄存器間接尋址) 變址尋址是以基址寄存器DPTR或PC的內(nèi)容為基本地址,加上變址寄存器A的內(nèi)容作為操作數(shù)的地址。其中A的內(nèi)容為8位無符號數(shù)。這種尋址方式只能訪問程序存儲器,多用于查表操作,但不能改寫數(shù)據(jù)表格的內(nèi)容。例如: MOVC A, A+DPTR;(A)+(DPTR)A,圖 3 4變址尋址方式,6. 相對尋址 相對尋址是指以當前程序計數(shù)器的PC值加上指令中給出的偏移量rel,構(gòu)成實際的轉(zhuǎn)移地址。它用于訪問程序存儲器,只出現(xiàn)在相對轉(zhuǎn)移指令中。一般將相對轉(zhuǎn)移指令操作碼所在的地址稱為源地址,轉(zhuǎn)移后的地址稱為目的地址。 在使用相對尋址時要注意以下兩點: (1) 當前PC值是指相對轉(zhuǎn)移指令操作碼所在的地址(源地址)加上該指令的字節(jié)數(shù)。例如:JZ rel (60 rel)是一條累加器A為零就轉(zhuǎn)移的雙字節(jié)指令。若該指令的存儲地址為2050H,則執(zhí)行該指令時的當前PC值即為2052H。即當前PC值是指該相對轉(zhuǎn)移指令取指結(jié)束時的值。,(2) 偏移量rel是有符號的單字節(jié)數(shù)。以補碼表示,其值的范圍是-128+127(00HFFH),負數(shù)表示目的地址小于源地址,正數(shù)表示目的地址大于源地址。所以,相對轉(zhuǎn)移指令滿足條件后,轉(zhuǎn)移的地址(目的地址)為: 目的地址=當前PC值+rel = 源地址+指令字節(jié)數(shù)+rel 相對尋址的尋址空間為:程序存儲器相對轉(zhuǎn)移指令的PC當前值的256B范圍內(nèi)。,例如:執(zhí)行指令“JC rel”,設rel=75H,CY=1。 指令的機器碼為4075H,存儲單元地址為1000H和1001H。,圖 3 5變址尋址方式,7. 位尋址 位尋址是在位操作指令中直接給出位操作數(shù)的地址。 位地址在指令中用bit表示,如“CLR bit”。 尋址空間:片內(nèi)RAM中202FH的16個單元的128位;字節(jié)地址能被8整除的特殊功能寄存器SFR,共93位進行尋址。 位地址的兩種表示方式 : a.直接使用位地址,如“CLR D3H”; b.對于SFR,可以直接用寄存器名字加位數(shù)表示,如“CLR PSW.3”等。,3.2.3 尋址空間 表概括了每種尋址方式可涉及的存儲器空間。,表 3 2操作數(shù)尋址方式和有關(guān)空間,3.3 指令系統(tǒng),3.2.1 指令分類,按指令的功能, MCS -51 指令系統(tǒng)可分為下列 5 類: (1) 數(shù)據(jù)傳送類指令; (2) 算術(shù)運算類指令; (3) 邏輯運算類指令; (4) 控制轉(zhuǎn)移類指令; (5) 位操作指令。,3.3.1 數(shù)據(jù)傳送類指令 所謂“傳送”,是把源地址單元的內(nèi)容傳送到目的地址單元中去,而源地址單元內(nèi)容不變;或者源、目的單元內(nèi)容互換。 其格式如下: MOV ,;源操作數(shù)(或單元) 目的操作數(shù)單元 操作碼助記符是“MOV“,目的操作數(shù)和源操作數(shù)不同尋址方式的組合就派生出該類的全部指令。,1. 以累加器A為目的操作數(shù)的指令(4條) 匯編指令格式 機器碼格式 操作 MOV A, Rn ;11101rrr (Rn) A MOV A, direct ;E5 direct (direct) A MOV A, Ri ;1110011i (Ri) A MOV A, data ;74 data #data A 這組指令的功能是:把源操作數(shù)的內(nèi)容送入累加器A。例如: MOV A, 10H, 該指令執(zhí)行時將立即數(shù) 10H送入累加器A中。 :此類指令操作只會影響PSW的P位。,2. 以工作寄存器Rn為目的操作數(shù)的指令(3條) 匯編指令格式 機器碼格式 操作 MOV Rn, A ;11111rrr (A) Rn MOV Rn, direct ;10101rrr direct (direct) Rn MOV Rn, data ;01111rrrdata data Rn 這組指令的功能是: 把源操作數(shù)的內(nèi)容送入當前工作寄存器區(qū)的R0R7中的某一個寄存器。指令中Rn在內(nèi)部數(shù)據(jù)存儲器中的地址由當前的工作寄存器區(qū)選擇位RS1、RS0 確定, 可以是 00H07H、08H0FH、10H17H、18H1FH。 例如: MOV R0, A, 若當前RS1、RS0 設置為 00 (即工作寄存器 0 區(qū)), 執(zhí)行該指令時,將累加器A中的數(shù)據(jù)傳送至工作寄存器R0(內(nèi)部RAM 00H)單元中。,3. 以直接地址為目的操作數(shù)的指令(5條) 匯編指令格式 機器碼格式 操作 MOV direct, A ;F5 direct (A) direct MOV direct, Rn ;10001rrrdirect (Rn) direct MOV direct, direct1 ; 85 direct1 direct (direct1) direct MOV direct, Ri ;1000011idirect (Ri) direct MOV direct, data ;75 direct1 #data #data direct 這組指令的功能是把源操作數(shù)所指定的內(nèi)容送入由直接地址direct所指出的片內(nèi)存儲單元中。 : “MOV direct, direct1”指令在譯成機器碼時,源地址在前,目標地址在后。,4. 以間接地址為目的操作數(shù)的指令(3條) 匯編指令格式 機器碼格式 操作 MOV Ri, A ;1111011i (A) (Ri) MOV Ri, direct ;1010011idirect (direct) (Ri) MOV Ri, data ;0111011i data #data (Ri) : (Ri)表示Ri中的內(nèi)容為指定的片內(nèi)RAM低128字節(jié)單元,不能指定高128字節(jié)的SFR。,5. 16位數(shù)據(jù)傳送指令(1條) 匯編指令格式 機器碼格式 操作 MOV DPTR, data16 ;90dataHdataL #dataDPTR 這是唯一的16位立即數(shù)傳送指令,其功能是把16位常數(shù)送人DPTR。DPTR由DPH和DPL組成。這條指令執(zhí)行的結(jié)果是,將高8位立即數(shù)dataH送人DPH,低8位立即數(shù)dataL送人DPL。在譯成機器碼時,也是高位字節(jié)在前,低位字節(jié)在后。如“MOV DPTR,#1234H”的機器碼是901234H“,執(zhí)行結(jié)果為:,6.查表指令(2條) 匯編指令格式 機器碼格式 操作 MOVC A, A+PC ;83H 先(PC)+1PC,后(A)+(PC) A MOVC A, A+DPTR ;93H 先(PC)+1PC,后(A)+(DPTR) A 這是兩條很有用的查表指令, 可用來查找存放在程序存儲器中的常數(shù)表格。第一條指令是以PC作為基址寄存器, A內(nèi)的8位無符號數(shù)和 PC的內(nèi)容 ( 下一條指令的起始地址)相加后得到一個 16 位地址, 并將該地址指出的程序存儲器單元的內(nèi)容送到累加器A。 這條指令的優(yōu)點是不改變特殊功能寄存器和PC的狀態(tài), 只要根據(jù)A的內(nèi)容就可以取出表格中的常數(shù)。缺點是表格只能放在該條查表指令后面的 256 個單元之中, 表格的大小受到限制, 而且表格只能被一段程序所利用。稱近程查表。,執(zhí)行程序: 1000H:MOV A,#0DH ;(740DH) 0DH A,查表的偏移量 1002H:MOVC A, A+PC ;(83H) (0DH+1003H) A 1003H:MOV R0,A ; (F8H) (A) R0 結(jié)果為(A) =02H, (R0) =02H, (PC) =1004H。,例如:在程序存儲器中,數(shù)據(jù)表格為:,第二條指令是以DPTR作為基址寄存器, 累加器A的內(nèi)容作為無符號數(shù)與DPTR內(nèi)容相加, 得到一個 16 位的地址, 并把該地址指出的程序存儲器單元的內(nèi)容送到累加器A。這條指令的執(zhí)行結(jié)果只與指針DPTR及累加器A的內(nèi)容有關(guān), 與該指令存放的地址無關(guān), 因此, 表格的大小和位置可以在 64 KB程序存儲器中任意安排, 并且一個表格可以為各個程序塊所共用,稱為遠程查表。 若DPTR已賦值待用,裝入新值前必須保存其原值,可用棧操作指令保存。,執(zhí)行程序: 1000H:MOV A,#10H ;10H A,查表的偏移量 1002H:PUSH DPH ;DPH 入棧 1004H:PUSH DPL ; DPL 入棧 1006H:MOV DPTR,#7000H ;7000H DPTR 1009H:MOVC A, A+DPTR ;(10H+7000H) A 100AH:POP DPL ;DPL 出棧 100CH:POP DPH ; DPH 出棧 結(jié)果為(A) =02H, (PC) =100EH , (DPTR) =原值。,例如:在程序存儲器中,數(shù)據(jù)表格為:,7. 累加器A與外部數(shù)據(jù)存儲器RAM之間的傳送指令(4條) 匯編指令格式 機器碼格式 操作 MOVX A, Ri ;1110001i (Ri) A,且使RD=0 MOVX A, DPTR ;E0 H (DPTR) A,且使RD=0 MOVX Ri, A ;1111001i (A) (Ri) ,且使WR=0 MOVX DPTR, A ;F0H (A) (DPTR) ,且使WR=0 這組指令是:在累加器A與外部數(shù)據(jù)存儲器RAM單元或I/O口之間進行數(shù)據(jù)傳送, 前兩條指令執(zhí)行時, P3.7 引腳上輸出RD有效信號, 用作外部數(shù)據(jù)存儲器的讀選通信號; 后兩條指令執(zhí)行時, P3.6 引腳上輸出WR有效信號, 用作外部數(shù)據(jù)存儲器的寫選通信號。,DPTR為16位地址指針,所包含的16位地址信息由 P0 (低 8 位)和P2(高 8 位)輸出, 而數(shù)據(jù)信息由P0 口傳送, P0 口作分時復用的總線。尋址范圍達64KB。 由Ri作為間接尋址寄存器時, P0 口分時輸出Ri指定的 8 位地址信息及傳輸 8 位數(shù)據(jù)。此時,P2口可作為通用I/O。尋址范圍達256B。 MCS-51單片機沒有專門的輸入/輸出指令,它只能用這種方式與外部設備打交道。,8. 棧操作指令(2條) 匯編指令格式 機器碼格式 操作 1)PUSH direct ; E0direct 先(SP)+1SP,后(direct) (SP) 2)POP direct ;D0direct 先(SP) direct,后(SP)-1 (SP) 在特殊功能寄存器中有一個堆棧指針SP, 它指出棧頂?shù)奈恢谩?壓棧指令的功能是: 首先將堆棧指針SP的內(nèi)容加1, 然后將直接地址所指出的內(nèi)容送入SP指出的內(nèi)部RAM單元; 出棧指令的功能是: 將SP所指出的內(nèi)部RAM單元的內(nèi)容送入由直接地址所指出的字節(jié)單元, 接著將堆棧指針SP的內(nèi)容減 1。 :這兩條指令不影響標志位。棧操作指令是直接尋址指令,注意指令的書寫格式。,例如: 進入中斷服務子程序時, 把程序狀態(tài)寄存器PSW、 累加器A、 數(shù)據(jù)指針DPTR進棧保護。設當前SP為 60H。則程序段 PUSH PSW PUSH ACC PUSH DPL PUSH DPH 執(zhí)行后, SP內(nèi)容修改為 64H, 而61H、62H、63H、64H單元中依次棧入PSW、A、DPL、DPH的內(nèi)容。當中斷服務程序結(jié)束之前, 如下程序段(SP保持 64H不變),POP DPH POP DPL POP ACC POP PSW 執(zhí)行之后, SP內(nèi)容修改為 60H, 而64H、 63H、 62H、 61H單元中的內(nèi)容依次彈出到DPH、DPL、A、PSW中。 MCS -51 提供一個向上升的堆棧, 因此SP設置初值時要充分考慮堆棧的深度, 要留出適當?shù)膯卧臻g, 滿足堆棧的使用。,9. 交換指令(4條) 1)字節(jié)交換指令 匯編指令格式 機器碼格式 操作 XCH A, Rn ;11001rrr (A) (Rn) XCH A, direct ;11000101direct (direct) (A) XCH A, Ri ;1100011i (A) (Ri) 這三條指令是將累加器A的內(nèi)容與所指定的工作寄存器Rn內(nèi)容、直接尋址或間接尋址的單元內(nèi)容相互交換。,圖 3 7 字節(jié)交換操作,2)半字節(jié)交換指令 匯編指令格式 機器碼格式 操作 XCHD A, Ri ;1101011i (A03) (Ri) 03) 這條指令是半字節(jié)交換指令, 是將累加器 A內(nèi)容的低 4 位和Ri間接尋址所指出的內(nèi)部RAM單元內(nèi)容的低 4 位相互交換。高4位內(nèi)容不變。該操作只影響標志位P。,圖 3 8 字節(jié)交換操作,表 3.3 數(shù)據(jù)傳送類指令一覽表,表 3.3 數(shù)據(jù)傳送類指令一覽表,3.3.2 算術(shù)運算類指令 算術(shù)運算類指令共有24條, 可分為加法、 帶進位加法、 帶借位減法、乘法、除法、加1、減1及十進制調(diào)整指令共8組。 它主要完成加、 減、 乘、 除四則運算, 以及增量、 減量和二十進制調(diào)整操作, 對8位無符號數(shù)可進行直接運算; 借助溢出標志, 可對帶符號數(shù)進行2的補碼運算; 借助進位標志, 可進行多字節(jié)加減運算, 也可以對壓縮BCD碼(即單字節(jié)中存放兩位BCD碼)進行運算。 算術(shù)運算結(jié)果將使進位CY、半進位AC、溢出位OV三個標志位置1或清0,只有加1和減1指令不影響這些標志位。,1. 加法類指令(4條) 匯編指令格式 機器碼格式 操作 ADD A, Rn ;00101rrr (A) + (Rn) A ADD A, direct ;25direct (A) + (direct) A ADD A, Ri ;0010011i (A) + (Ri) A ADD A, data ;24 data (A) + #data A 上述指令的執(zhí)行結(jié)果將影響標志位CY、AC、OV、P。當“和”的第7位和第3位有進位時,分別將CY和AC標志位置1,否則清0。OV=C7C6。,這4條指令使得累加器A可以和內(nèi)部RAM的任何一個單元的內(nèi)容進行相加, 也可以和一個8位立即數(shù)相加, 相加結(jié)果存放在A中。 無論是哪一條加法指令, 參加運算的都是兩個8位二進制數(shù)。 對用戶來說, 這些8位數(shù)可當作無符號數(shù)(0255), 也可以當作帶符號數(shù)(-128+127), 即補碼數(shù)。 例如: 對于二進制數(shù)11010011, 用戶可認為它是無符號數(shù), 即為十進制數(shù)211, 也可以認為它是帶符號數(shù), 即為十進制負數(shù)-45。若是帶符號運算,要考慮溢出標志位OV。 但計算機在作加法運算時, 總按以下規(guī)定進行:,例如: 120 和 100 之和為 220, 顯然大于 127, 相加時,0 1 1 1 1 0 0 0 120 0 1 1 0 0 1 0 0 100 1 1 0 1 1 1 0 0 220,+,符號位(最高位)由 0 變 1, 兩個正數(shù)相加結(jié)果變負, 實際上它是和數(shù)的最高位, 符號位移入了進位標志, 此時位 6 有進位而位 7 無進位, 置位溢出標志OV, 結(jié)果溢出。,同樣, 120和100 相加, 結(jié)果應為220, 顯然小于128, 相加時,1 0 0 0 1 0 0 0 -120 1 0 0 1 1 1 0 0 -100,+,1 0 0 1 0 0 1 0 0 -220,符號位由1變?yōu)?, 兩個負數(shù)相加結(jié)果變?yōu)檎龜?shù), 這是因為符號位移入進位標志, 位 6 無進位而位 7 有進位, 置位溢出標志OV, 由此可判斷結(jié)果溢出。,2. 帶進位加法指令(4條) 匯編指令格式 機器碼格式 操作 ADDC A, Rn ;00111rrr (A) +CY+ (Rn) A ADDC A, direct ;35direct (A) +CY + (direct) A ADDC A, Ri ;0011011i (A) +CY + (Ri) A ADDC A, data ;34 data (A) +CY + #data A 這組指令的功能與普通加法指令類似, 唯一的不同之處是, 在執(zhí)行加法時, 還要將上一次進位標志CY的內(nèi)容也一起加進去, 對于標志位的影響也與普通加法指令相同。 本指令常用于多字節(jié)加法。,3. 帶借位減法指令(4條) 匯編指令格式 機器碼格式 操作 SUBB A, Rn ;10011rrr (A) CY(Rn) A SUBB A, direct ;95direct (A) CY (direct) A SUBB A, Ri ;1001011i (A) CY (Ri) A SUBB A, data ;94 data (A) CY #data A 這組指令的功能是: 將累加器A的內(nèi)容與源操作數(shù)及進位位CY的值相減, 結(jié)果送回到累加器A中。 在執(zhí)行減法過程中,如果位7(D7)有借位, 則進位標志CY置“1”, 否則清“0”; 如果位 3(D3)有借位, 則輔助進位標志AC置“1”, 否則清“0”; 如位 6 有借位而位 7 沒有借位, 或位 7 有借位而位 6 沒有借位, 則溢出標志OV置“1”, 否則清“0”。 若要進行不帶借位的減法操作, 則必須先將CY清“0”。,4. 乘法指令(1條) 乘法指令完成單字節(jié)的乘法, 只有一條指令: 匯編指令格式 機器碼格式 操作 MUL AB ;A4H (A) *(B) (B)158 (A) 70 這條指令的功能是: 將累加器A的內(nèi)容與寄存器B的內(nèi)容相乘, 乘積的低 8 位存放在累加器A中, 高 8 位存放于寄存器B中。如果乘積超過0FFH, 則溢出標志OV置“1”, 否則清“0”。 進位標志CY總是被清“0”。,5.除法指令(1條) 除法指令完成單字節(jié)的除法, 只有一條指令: 匯編指令格式 機器碼格式 操作 DIV AB ;84H (A)/(B) 商放A,余數(shù)放B 這條指令的功能是: 將累加器 A中的內(nèi)容除以寄存器B中的8位無符號整數(shù), 所得商的整數(shù)部分存放在累加器A中, 余數(shù)部分存放在寄存器 B中, 清“0”進位標志CY和溢出標志OV。 若原來B中的內(nèi)容為 0, 則執(zhí)行該指令后A與B中的內(nèi)容不定, 并將溢出標志OV置“1”。在任何情況下, 進位標志CY總是被清“0”。,6. 加1指令(5條) 匯編指令格式 機器碼格式 操作 INC A ;04H (A) + 1 A INC Rn ;00001rrr (Rn) +1 Rn INC direct ;05direct (direct) +1 direct INC Ri ;0000011i (Ri) +1 (Ri) INC DPTR ;A3H (DPTR) +1DPTR 這組指令的功能是:將指令中操作數(shù)所指出的單元內(nèi)容加1。若原來的內(nèi)容為0FFH, 則加 1 后將產(chǎn)生溢出, 使操作數(shù)的內(nèi)容變成00H, 但不影響任何標志。最后一條指令是對16 位的數(shù)據(jù)指針寄存器DPTR執(zhí)行加 1 操作, 指令執(zhí)行時, 先對低 8 位指針 DPL的內(nèi)容加 1, 當產(chǎn)生溢出時就對高 8 位指針DPH加 1, 但不影響任何標志。,7. 減1指令(4條) 匯編指令格式 機器碼格式 操作 DEC A ;14H (A) - 1 A DEC Rn ;00011rrr (Rn) -1 Rn DEC direct ;15direct (direct) -1 direct DEC Ri ;0001011i (Ri) -1 (Ri) 這組指令的功能是:將指令中操作數(shù)所指出的單元內(nèi)容減1。若原來的內(nèi)容為00H, 則減 1 后將產(chǎn)生溢出, 使操作數(shù)的內(nèi)容變成0FFH, 但不影響任何標志。,8. 十進制調(diào)整指令(1條) 匯編指令格式 機器碼格式 操作 DA A ;D4H 將累加器的內(nèi)容調(diào)整為BCD數(shù) 這條指令跟在ADD、 ADDC指令之后,將相加后存放在累加器A中的結(jié)果進行十進制調(diào)整, 實現(xiàn)十進制加法運算功能。且只能用于壓縮BCD數(shù)相加結(jié)果的調(diào)整。 本指令是對累加器A中的BCD數(shù)的加法結(jié)果進行調(diào)整。兩個壓縮型BCD數(shù)按二進制相加后,必須經(jīng)本指令調(diào)整才能得到壓縮型BCD數(shù)的和的正確值。 :它只能跟在加法指令之后, 不能對直接減法指令的結(jié)果進行調(diào)整。若兩BCD數(shù)相減,則應將減數(shù)先化為100的補數(shù),兩數(shù)相加,再用“DA A”調(diào)整。且其結(jié)果不影響溢出標志位。,執(zhí)行該指令時:判斷 A中的低 4 位是否大于 9 和輔助進位標志 AC是否為“1”, 若兩者有一個條件滿足, 則低 4 位內(nèi)容加 6 ,以得到低 4 位正確的BCD數(shù)值。 同樣, A中的高4位大于9或進位標志CY為“1”兩者有一個條件滿足時, 高4位加6。如果加6調(diào)整后,高4位產(chǎn)生進位,則置位CY;反之,不清除CY。如果CY為1,表示和的BCD數(shù)100。這對多字節(jié)十進制加法有用,不影響OV標志。 若AC=1,CY=1同時發(fā)生(8999188),或者高4位雖等于9但低4位修正后有進位,則A應加66H修正(4359102)。 由此可見,執(zhí)行“DA A”后,CPU根據(jù)累加器A的原始值和PSW的狀態(tài),由硬件自動對累加器A進行加06H、60H或66H的操作。,例如:設累加器A內(nèi)容為01010110B(56的BCD數(shù)),寄存器R3內(nèi)容為01100111B(67的BCD數(shù)),CY內(nèi)容為1。程序如下: ADDC A, R3 DA A 第一條指令執(zhí)行帶進位的純二進制加法,相加后累加器A的內(nèi)容為0BEH; 結(jié)果不是BCD數(shù)124,且CY=0,AC=0;然后執(zhí)行“DA A”, 因為高4位值為11,大于9,低4位值為14,也大于 9, 因此內(nèi)部要進行加66操作, 結(jié)果為124的BCD數(shù)。即,0 1 0 1 0 1 1 0 56 0 1 1 0 0 1 1 1 67 0 0 0 0 0 0 0 1 01,1 0 1 1 1 1 1 0 BE 0 1 1 0 0 1 1 0 66,+,+,1 0 0 1 0 0 1 0 0 124,表 3.4 算術(shù)運算指令,表 3.4 算術(shù)運算指令,表 3.5 影響標志位的指令,表 3.6 影響標志位的指令,3.3.3 邏輯操作類指令 邏輯操作指令可以對兩個8位二進制數(shù)進行與、或、非和異或等邏輯運算、常用來對數(shù)據(jù)進行邏輯處理,使之適合于傳送、存儲和輸出打印等。在這類指令中,除了以累加器A為目標寄存器指令外,其余指令均不會改變PSW中的任何標志位。,1. 簡單操作指令 1)累加器A清0指令 匯編指令格式 機器碼格式 操作 CLR A ;E4H 0 A 對累加器A清“0”,只影響標志位P。 2)累加器A取反指令 匯編指令格式 機器碼格式 操作 CPL A ; F4H (A) A 對累加器A按位取反,不影響標志位。,2. 移位指令 1)累加器A循環(huán)左移指令 匯編指令格式 機器碼格式 操作 RL A ;23H 2)累加器A循環(huán)右移指令 匯編指令格式 機器碼格式 操作 RR A ; 03H 3)累加器A連同進位位循環(huán)左移指令 匯編指令格式 機器碼格式 操作 RLC A ;33H 4)累加器A連同進位位循環(huán)右移指令 匯編指令格式 機器碼格式 操作 RRC A ; 13H 通常用“RLC A”指令將累加器A的內(nèi)容作乘2運算。,3. 累加器半字節(jié)交換指令 匯編指令格式 機器碼格式 操作 SWAP A ;C4H (A03) (A47) 這條指令的功能是將累加器A的高低兩個半字節(jié)交換。 例如(A)=FAH。 執(zhí)行指令“SWAP A”的結(jié)果為(A)=AFH。,4. 邏輯”與”指令 匯編指令格式 機器碼格式 操作 ANL A, Rn ; 01011rrr (A) (Rn) A ANL A, direct ; 55direct (A) (direct) A ANL A, Ri ; 0101011i (A) (Rn) A ANL A, data ; 54#data (A) #data A ANL direct, A ; 52direct (direct) (A) direct ANL direct, data ; 53direct #data (direct)#datadirect 這組指令的功能是: 將兩個操作數(shù)的內(nèi)容按位進行邏輯“與”操作, 并將結(jié)果送回目的操作數(shù)的單元中。 后兩條指令中,若直接地址是I/O端口,則為“讀修改寫”操作。,5. 邏輯”或”指令 匯編指令格式 機器碼格式 操作 ORL A, Rn ; 01001rrr (A) (Rn) A ORL A, direct ; 45direct (A) (direct) A ORL A, Ri ; 0100011i (A) (Rn) A ORL A, data ; 44#data (A) #data A ORL direct, A ; 42direct (direct) (A) direct ORL direct, data ; 43direct #data (direct)#datadirect 這組指令的功能是: 將兩個操作數(shù)的內(nèi)容按位進行邏輯“或”操作, 并將結(jié)果送回目的操作數(shù)的單元中。 后兩條指令中,若直接地址是I/O端口,則為“讀修改寫”操作。,6. 邏輯”異或”指令 匯編指令格式 機器碼格式 操作 XRL A, Rn ; 01101rrr (A) (Rn) A XRL A, direct ; 65direct (A) (direct) A XRL A, Ri ; 0110011i (A) (Rn) A XRL A, data ; 64#data (A) #data A XRL direct, A ; 62direct (direct) (A) direct XRL direct, data ; 63direct #data (direct)#datadirect 這組指令的功能是: 將兩個操作數(shù)的內(nèi)容按位進行邏輯“異或”操作, 并將結(jié)果送回目的操作數(shù)的單元中。 后兩條指令中,若直接地址是I/O端口,則為“讀修改寫”操作。,表3.7 邏輯操作指令表,表3.7 邏輯操作指令表,3.3.4 控制程序轉(zhuǎn)移類指令 控制轉(zhuǎn)移指令共有 17 條, 不包括按布爾變量控制程序轉(zhuǎn)移指令(見表 3.5)。其中有 64 KB范圍內(nèi)的長調(diào)用、 長轉(zhuǎn)移指令; 有 2 KB范圍內(nèi)的絕對調(diào)用和絕對轉(zhuǎn)移指令; 有全空間的長相對轉(zhuǎn)移及一頁范圍內(nèi)的短相對轉(zhuǎn)移指令; 還有多種條件轉(zhuǎn)移指令。由于MCS -51 提供了較豐富的控制轉(zhuǎn)移指令, 因此在編程上相當靈活方便。這類指令用到的助記符共有 10 種: AJMP、LJMP、SJMP、JMP、ACALL、LCALL、JZ、JNZ、CJNE、DJNZ。,1. 無條件轉(zhuǎn)移指令 無條件轉(zhuǎn)移指令是指,當程序執(zhí)行到該指令時,程序必須無條件轉(zhuǎn)移到指令所提供的地址處繼續(xù)執(zhí)行。無條件轉(zhuǎn)移指令有短轉(zhuǎn)移、長轉(zhuǎn)移、相對轉(zhuǎn)移和間接轉(zhuǎn)移(散轉(zhuǎn))指令。,1) 短轉(zhuǎn)移指令 匯編指令格式 機器碼格式 操作 AJMP addr11 ;a10a9a800001a7a0 先(PC)+2 PC, addr11 PC100 , (PC1511)不變 該指令執(zhí)行后,程序轉(zhuǎn)移的目的地址是由AJMP指令所在位置的地址PC值加上該指令字節(jié)數(shù)2,構(gòu)成當前PC值。取當前PC值的高5位與指令中提供的11位直接地址形成轉(zhuǎn)移的目的地址,即,PC15 PC14 PC13 PC12 PC11a10 a9 a8 a7 a6 a5 a4 a3 a2 a1 a0,轉(zhuǎn)移目的地址(PC),由于11位地址的范圍是0000000000011111111111,即2 KB范圍,而目的地址的高5位是由PC當前值,所以程序可轉(zhuǎn)移的位置只能是和PC當前值在同一2 KB范圍內(nèi)。本指令轉(zhuǎn)移可以向前也可以向后,指令執(zhí)行后不影響狀態(tài)標志位。 例如:若AJMP指令地址(PC)=2300H。執(zhí)行指令AJMP 0FFH后,結(jié)果為:轉(zhuǎn)移目的地址(PC)=20FFH,程序向前轉(zhuǎn)到20FFH單元開始執(zhí)行。 又如:若AJMP指令地址(PC)=2FFFH。執(zhí)行指令AJMP 0FFH后,結(jié)果為:轉(zhuǎn)移目的地址(PC)=30FFH,程序向后轉(zhuǎn)到30FFH單元開始執(zhí)行。 由上可見:若addr11相同,則AJMP指令的機器碼相同,但轉(zhuǎn)移的目的地址卻可能不同,這是因為轉(zhuǎn)移的目的地址是由PC當前值的高5位與addr11共同決定的。,圖 3.9 AJMP轉(zhuǎn)換示意圖,圖 3.10 LJMP轉(zhuǎn)換示意圖,2) 長轉(zhuǎn)移指令 匯編指令格式 機器碼格式 操作 LJMP addr16 ; 02 a158 a70 addr16 PC LJMP指令執(zhí)行后,程序無條件地轉(zhuǎn)向16位目標地址(addr16)處執(zhí)行,不影響任何標志位。由于指令中提供16位目標地址,所以執(zhí)行這條指令可以使程序從當前地址轉(zhuǎn)移到64 KB程序存儲器地址空間的任意地址,故得名為“長轉(zhuǎn)移“。該指令的缺點是執(zhí)行時間長,字節(jié)多。,3) 相對轉(zhuǎn)移(相對短轉(zhuǎn)移)指令 匯編指令格式 機器碼格式 操作 SJMP rel ; 80 rel 先(PC)+2 PC,后(PC)+rel PC 指令的操作數(shù)rel用8位帶符號數(shù)補碼表示,占指令的一個字節(jié)。因為8位補碼的取值范圍為-128+127,所以該指令的轉(zhuǎn)移范圍是:相對PC當前值向前轉(zhuǎn)128字節(jié),向后轉(zhuǎn)127字節(jié)。即 轉(zhuǎn)移目的地址= SJMP指令所在地址+2+rel 如在2100H單元有SJMP指令,若rel = 5AH(正數(shù)),則轉(zhuǎn)移目的地址為215CH(向后轉(zhuǎn));若rel = F0H(負數(shù)),則轉(zhuǎn)移目的地址為20F2H(向前轉(zhuǎn))。,用匯編語言編程時,指令中的相對地址rel往往用欲轉(zhuǎn)移至的地址的標號(符號地址)表示。機器匯編時,能自動算出相對地址值;但手工匯編時,需自己計算相對地址值rel。rel的計算公式如下: 向前轉(zhuǎn)移:rel = FEH - (SJMP指令地址與目的地址差的絕對值) 向后轉(zhuǎn)移:rel = (SJMP指令地址與目的地址差的絕對值) -2 若rel = FEH,即目的地址就是SJMP指令的地址,在匯編指令中的偏移地址可用 $ 符號表示。若在程序的末尾加上SJMP $(機器碼為80 FEH),則程序就不會再向后執(zhí)行,造成單指令的無限循環(huán),進
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2030中國自動無人機飛行軟件行業(yè)產(chǎn)業(yè)運行態(tài)勢及投資規(guī)劃深度研究報告
- 2025至2030中國自動化光學檢查行業(yè)發(fā)展趨勢分析與未來投資戰(zhàn)略咨詢研究報告
- 2025至2030中國膝關(guān)節(jié)軟骨修復與再生行業(yè)市場占有率及投資前景評估規(guī)劃報告
- 2025至2030中國胰島素德特米爾行業(yè)產(chǎn)業(yè)運行態(tài)勢及投資規(guī)劃深度研究報告
- 2025至2030中國肉鴨配合料行業(yè)深度研究及發(fā)展前景投資評估分析
- 2025至2030中國聚氯乙烯電纜行業(yè)市場占有率及投資前景評估規(guī)劃報告
- 2025至2030中國羊膜穿刺針行業(yè)發(fā)展趨勢分析與未來投資戰(zhàn)略咨詢研究報告
- 2025至2030中國網(wǎng)球拍線行業(yè)發(fā)展趨勢分析與未來投資戰(zhàn)略咨詢研究報告
- 環(huán)保工程應急響應及風險控制措施
- 2025至2030中國細胞破壞器設備行業(yè)產(chǎn)業(yè)運行態(tài)勢及投資規(guī)劃深度研究報告
- GB/T 20946-2007起重用短環(huán)鏈驗收總則
- GB/T 18391.3-2009信息技術(shù)元數(shù)據(jù)注冊系統(tǒng)(MDR)第3部分:注冊系統(tǒng)元模型與基本屬性
- GB/T 10610-2009產(chǎn)品幾何技術(shù)規(guī)范(GPS)表面結(jié)構(gòu)輪廓法評定表面結(jié)構(gòu)的規(guī)則和方法
- 熠搜家庭戶用光伏電站推介
- 濟源幼兒園等級及管理辦法
- 房地產(chǎn)開發(fā)全流程培訓講義課件
- DB44-T 2163-2019山地自行車賽場服務 基本要求-(高清現(xiàn)行)
- 云南省特種設備檢驗檢測收費標準
- DB15T 933-2015 內(nèi)蒙古地區(qū)極端高溫、低溫和降雨標準
- 工傷責任保險單
- 固體廢物采樣培訓
評論
0/150
提交評論