




已閱讀5頁(yè),還剩108頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
,第3章 MCS - 51單片機(jī)指令系統(tǒng),3.1 匯編語(yǔ)言 3.2 尋址方式 3.3 指令系統(tǒng),3.1 匯編語(yǔ)言,3.1.1 指令、指令系統(tǒng)、程序設(shè)計(jì)語(yǔ)言 指令:是CPU根據(jù)人的意圖來(lái)執(zhí)行某種操作的命令。 指令系統(tǒng):一臺(tái)計(jì)算機(jī)所能執(zhí)行的全部指令的集合。 要使計(jì)算機(jī)按照人的思維完成一項(xiàng)工作,就必須讓CPU按順序執(zhí)行各種操作,即一步步地執(zhí)行一條條的指令。這種按人的要求編排的指令操作序列稱(chēng)為程序。編寫(xiě)程序的過(guò)程叫做程序設(shè)計(jì)。 程序設(shè)計(jì)語(yǔ)言是實(shí)現(xiàn)人機(jī)交換信息的最基本工具,可以分為機(jī)器語(yǔ)言、匯編語(yǔ)言、高級(jí)語(yǔ)言。,機(jī)器語(yǔ)言:是以二進(jìn)制代碼來(lái)描述指令功能的語(yǔ)言,計(jì)算機(jī)只能識(shí)別二進(jìn)制代碼。 匯編語(yǔ)言:是用助記符、符號(hào)和數(shù)字等來(lái)表示指令的程序語(yǔ)言。匯編語(yǔ)言是便于人們識(shí)別、記憶、理解和使用的一種指令形式,它和機(jī)器語(yǔ)言指令一一對(duì)應(yīng),也是由計(jì)算機(jī)的硬件特性所決定的。 例如:“10+20”的例子可寫(xiě)成: 匯編語(yǔ)言程序 機(jī)器語(yǔ)言程序 MOV A,#0AH 74 0AH ADD A,#14H 24 14H,現(xiàn)在描述計(jì)算機(jī)指令系統(tǒng)及實(shí)際應(yīng)用中主要采用匯編語(yǔ)言形式。采用機(jī)器語(yǔ)言編寫(xiě)的程序稱(chēng)之為目標(biāo)程序。采用匯編語(yǔ)言編寫(xiě)的程序稱(chēng)之為源程序。計(jì)算機(jī)能夠直接識(shí)別并執(zhí)行的只有機(jī)器語(yǔ)言。匯編語(yǔ)言程序不能被計(jì)算機(jī)直接識(shí)別并執(zhí)行,必須經(jīng)過(guò)一個(gè)中間環(huán)節(jié)把它翻譯成機(jī)器語(yǔ)言程序,這個(gè)中間過(guò)程叫做匯編。匯編有兩種方式:機(jī)器匯編和手工匯編。機(jī)器匯編是用專(zhuān)門(mén)的匯編程序,在計(jì)算機(jī)上進(jìn)行翻譯;手工匯編是編程員把匯編語(yǔ)言指令逐條翻譯成機(jī)器語(yǔ)言指令。現(xiàn)在主要使用機(jī)器匯編,但有時(shí)也用到手工匯編。,3.1.2 指令格式 MCS-51單片機(jī)指令系統(tǒng)具有功能強(qiáng)、指令短、執(zhí)行快等特點(diǎn),共有111條指令。從功能上可劃分成數(shù)據(jù)傳送、算術(shù)操作、邏輯操作、控制程序轉(zhuǎn)移、位操作等五大類(lèi);從空間屬性上分為單字節(jié)指令(49條)、雙字節(jié)指令(46條)和最長(zhǎng)的三字節(jié)指令(只有16條)。從時(shí)間屬性上可分成單機(jī)器周期指令(64條)、雙機(jī)器周期指令(45條)和只有乘、除法兩條4個(gè)機(jī)器周期的指令。,指令系統(tǒng)中的指令描述了不同的操作,不同操作對(duì)應(yīng)不同的指令。在結(jié)構(gòu)上,每條指令通常由操作碼和操作數(shù)兩部分組成。操作碼表示計(jì)算機(jī)執(zhí)行該指令將進(jìn)行何種操作,操作數(shù)表示參加操作的數(shù)的本身或操作數(shù)所在的地址。MCS-51單片機(jī)的指令有無(wú)操作數(shù)、單操作數(shù)、雙操作數(shù)三種情況。一條匯編語(yǔ)言指令中最多包含 4 個(gè)區(qū)段, 其格式如下所示: 標(biāo)號(hào): 操作碼 操作數(shù) ;注釋 4 個(gè)區(qū)段之間要用分隔符分開(kāi): 標(biāo)號(hào)與操作碼之間用“: ”隔開(kāi), 操作碼與操作數(shù)之間用空格隔開(kāi), 操作數(shù)與注釋之間用“;”隔開(kāi), 如果操作數(shù)有兩個(gè)以上, 則在操作數(shù)之間要用逗號(hào)“,”隔開(kāi) (乘法指令和除法指令除外 )。,1. 單字節(jié)指令(49條) 單字節(jié)指令中的8位二進(jìn)制代碼既包含了操作碼信息,也包含了操作數(shù)的信息。 a.指令碼中隱含著對(duì)某個(gè)寄存器的操作,例如: CLR AE4H b.指令碼中rrr三位指定了某個(gè)寄存器,例如: MOV A,Rn 2. 雙字節(jié)指令(46條) (11101rrr) 雙字節(jié)指令由兩個(gè)字節(jié)組成, 一個(gè)字節(jié)表示操作碼,另一個(gè)字節(jié)表示操作數(shù)或操作數(shù)所在的地址, 其指令格式: 操作碼助記符 立即數(shù)或地址 例如: MOV A, 10H74H 10H 3. 三字節(jié)指令(16條) 三字節(jié)指令中, 第一個(gè)字節(jié)為操作碼, 后兩個(gè)字節(jié)為操作數(shù)或操作數(shù)所在的地址, 其指令格式: 操作碼助記符 目的操作數(shù)源操作數(shù) 例如: MOV 40H, 30H75H 40H 30H,3.2 尋址方式,所謂尋址方式, 就是尋找操作數(shù)地址的方式, 在用匯編語(yǔ)言編程時(shí), 數(shù)據(jù)的存放、傳送、 運(yùn)算都要通過(guò)指令來(lái)完成。 編程者必須自始至終都要十分清楚操作數(shù)的位置, 以及如何將它們傳送到適當(dāng)?shù)募拇嫫魅⑴c運(yùn)算。每一種計(jì)算機(jī)都具有多種尋址方式。,3.2.1尋址方式中常用的符號(hào)注釋 Rn當(dāng)前選定的工作寄存器組R0R7, 即n=07。 Ri當(dāng)前選定的寄存器區(qū)中可作為地址指針的 2 個(gè)寄存器R0、 R1, i=0、1。 data8位立即數(shù),即包含在指令中的 8 位常數(shù)。 data1616位立即數(shù),即包含在指令中的 16 位常數(shù)。 direct 8 位內(nèi)部RAM單元的地址, 它可以是一個(gè)內(nèi)部數(shù)據(jù)區(qū) RAM單元(00H7FH)或特殊功能寄存器地址(I / O端口、 控制寄存器、 狀態(tài)寄存器 80H0FFH)。 addr1616 位的目的地址, 用于LJMP, LCALL指令, 可指向 64 KB程序存儲(chǔ)器地址空間。,addr1111位的目的地址, 用于AJMP, ACALL指令。目的地址必須與下一條指令的第一個(gè)字節(jié)在同一個(gè) 2 KB程序存儲(chǔ)器地址空間之內(nèi)。 rel 8 位帶符號(hào)的偏移量字節(jié), 用于SJMP和所有條件轉(zhuǎn)移指令中。 偏移量相對(duì)于下一條指令的第一個(gè)字節(jié)計(jì)算, 在128+127 范圍內(nèi)取值。 bit內(nèi)部數(shù)據(jù)RAM或特殊功能寄存器中的可直接尋址位。 rrr 工作寄存器地址,rrr=000111對(duì)應(yīng)R0R7。 DPTR數(shù)據(jù)指針, 可用作 16 位的地址寄存器。,A累加器。 B寄存器, 用于 MUL和 DIV指令中。 C進(jìn)位標(biāo)志或進(jìn)位位。 間接尋址寄存器或基址寄存器的前綴, 如Ri, DPTR。 /位操作數(shù)的前綴, 表示對(duì)該位取反后再參與操作,但不影響該位原值。 (X) X中的內(nèi)容。 (X) 由 X尋址的單元中的內(nèi)容。 指令操作流程,箭頭右邊的內(nèi)容被箭頭左邊的內(nèi)容所代替。,3.2.3 7種尋址方式 在 MCS -51單片機(jī)指令系統(tǒng)中, 有以下 7種尋址方式: (1)寄存器尋址; (2) 直接尋址; (3)立即尋址; (4) 寄存器間接尋址; (5) 基址寄存器加變址寄存器間接尋址; (6) 相對(duì)尋址; (7) 位尋址。,1. 寄存器尋址 在該尋址方式中, 參加操作的數(shù)存放在寄存器里。寄存器包括8個(gè)工作寄存器R0R7, 累加器A, 寄存器B、數(shù)據(jù)指針DPTR和布爾處理器的位累加器C。例如: MOV A,R0 ;(R0) A “INC Rn”指令機(jī)器碼格式為00001rrr。若rrr=010B,則Rn=R2,即 INC R2 ; (R2)+1 R2,表 3 1低3位操作碼與寄存器Rn的對(duì)應(yīng)關(guān)系,指令功能:將R2工作寄存器的內(nèi)容加1后送回R2。如果(R2)=24H,且選定的工作寄存器組為第1組(RS1RS0=01B)。這該指令的執(zhí)行過(guò)程為:,圖 3 1寄存器尋址方式,2. 直接尋址 在指令中直接給出操作數(shù)的地址(片內(nèi)RAM單元的地址), 這種尋址方式就屬于直接尋址方式。在這種方式中, 指令的操作數(shù)部分直接是操作數(shù)的地址。 例如:MOV A,40H;(40H)A (E5H 40H),圖 3 2直接尋址方式,在MCS -51 單片機(jī)指令系統(tǒng)中, 直接尋址方式中可以訪問(wèn) 2 種存儲(chǔ)器空間: (1) 內(nèi)部數(shù)據(jù)存儲(chǔ)器的低 128 個(gè)字節(jié)單元(00H7FH)。 (2) 特殊功能寄存器既可以使用它們的地址,也可以使用它們的名字。例如: MOV A,P1 MOV A, 90H;(P1口)A :累加器A、Acc和E0H等三種形式,分屬于兩種不同的尋址方式,但指令的執(zhí)行效果是完全相同的。例如: INC A(機(jī)器碼04H,屬于寄存器尋址)、INC Acc和INC 0EH (機(jī)器碼05E0H,屬于直接尋址)。 直接尋址的地址占一個(gè)字節(jié),所以,一條直接尋址方式的指令至少占內(nèi)存兩個(gè)單元。,3. 立即尋址 立即尋址方式是指操作數(shù)包含在指令字節(jié)中。 跟在指令操作碼后面的數(shù)就是參加運(yùn)算的數(shù), 該操作數(shù)稱(chēng)為立即數(shù)。 用“#”號(hào)表示。立即數(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ù); 當(dāng)訪問(wèn)外部RAM時(shí), 可使用R0、 R1及DPTR作為地址指針。寄存器間接尋址符號(hào)為“”。 :(1)Ri可用于尋址片內(nèi)RAM007FH和片外RAM00FFH的空間; DPTR可尋址片外64KB區(qū)域。 (2)寄存器間址指令Ri不能尋址SFR,下面指令不能訪問(wèn)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位無(wú)符號(hào)數(shù)。這種尋址方式只能訪問(wèn)程序存儲(chǔ)器,多用于查表操作,但不能改寫(xiě)數(shù)據(jù)表格的內(nèi)容。例如: MOVC A, A+DPTR;(A)+(DPTR)A,圖 3 4變址尋址方式,6. 相對(duì)尋址 相對(duì)尋址是指以當(dāng)前程序計(jì)數(shù)器的PC值加上指令中給出的偏移量rel,構(gòu)成實(shí)際的轉(zhuǎn)移地址。它用于訪問(wèn)程序存儲(chǔ)器,只出現(xiàn)在相對(duì)轉(zhuǎn)移指令中。一般將相對(duì)轉(zhuǎn)移指令操作碼所在的地址稱(chēng)為源地址,轉(zhuǎn)移后的地址稱(chēng)為目的地址。 在使用相對(duì)尋址時(shí)要注意以下兩點(diǎn): (1) 當(dāng)前PC值是指相對(duì)轉(zhuǎn)移指令操作碼所在的地址(源地址)加上該指令的字節(jié)數(shù)。例如:JZ rel (60 rel)是一條累加器A為零就轉(zhuǎn)移的雙字節(jié)指令。若該指令的存儲(chǔ)地址為2050H,則執(zhí)行該指令時(shí)的當(dāng)前PC值即為2052H。即當(dāng)前PC值是指該相對(duì)轉(zhuǎn)移指令取指結(jié)束時(shí)的值。,(2) 偏移量rel是有符號(hào)的單字節(jié)數(shù)。以補(bǔ)碼表示,其值的范圍是-128+127(00HFFH),負(fù)數(shù)表示目的地址小于源地址,正數(shù)表示目的地址大于源地址。所以,相對(duì)轉(zhuǎn)移指令滿(mǎn)足條件后,轉(zhuǎn)移的地址(目的地址)為: 目的地址=當(dāng)前PC值+rel = 源地址+指令字節(jié)數(shù)+rel 相對(duì)尋址的尋址空間為:程序存儲(chǔ)器相對(duì)轉(zhuǎn)移指令的PC當(dāng)前值的256B范圍內(nèi)。,例如:執(zhí)行指令“JC rel”,設(shè)rel=75H,CY=1。 指令的機(jī)器碼為4075H,存儲(chǔ)單元地址為1000H和1001H。,圖 3 5變址尋址方式,7. 位尋址 位尋址是在位操作指令中直接給出位操作數(shù)的地址。 位地址在指令中用bit表示,如“CLR bit”。 尋址空間:片內(nèi)RAM中202FH的16個(gè)單元的128位;字節(jié)地址能被8整除的特殊功能寄存器SFR,共93位進(jìn)行尋址。 位地址的兩種表示方式 : a.直接使用位地址,如“CLR D3H”; b.對(duì)于SFR,可以直接用寄存器名字加位數(shù)表示,如“CLR PSW.3”等。,3.2.3 尋址空間 表概括了每種尋址方式可涉及的存儲(chǔ)器空間。,表 3 2操作數(shù)尋址方式和有關(guān)空間,3.3 指令系統(tǒng),3.2.1 指令分類(lèi),按指令的功能, MCS -51 指令系統(tǒng)可分為下列 5 類(lèi): (1) 數(shù)據(jù)傳送類(lèi)指令; (2) 算術(shù)運(yùn)算類(lèi)指令; (3) 邏輯運(yùn)算類(lèi)指令; (4) 控制轉(zhuǎn)移類(lèi)指令; (5) 位操作指令。,3.3.1 數(shù)據(jù)傳送類(lèi)指令 所謂“傳送”,是把源地址單元的內(nèi)容傳送到目的地址單元中去,而源地址單元內(nèi)容不變;或者源、目的單元內(nèi)容互換。 其格式如下: MOV ,;源操作數(shù)(或單元) 目的操作數(shù)單元 操作碼助記符是“MOV“,目的操作數(shù)和源操作數(shù)不同尋址方式的組合就派生出該類(lèi)的全部指令。,1. 以累加器A為目的操作數(shù)的指令(4條) 匯編指令格式 機(jī)器碼格式 操作 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í)將立即數(shù) 10H送入累加器A中。 :此類(lèi)指令操作只會(huì)影響PSW的P位。,2. 以工作寄存器Rn為目的操作數(shù)的指令(3條) 匯編指令格式 機(jī)器碼格式 操作 MOV Rn, A ;11111rrr (A) Rn MOV Rn, direct ;10101rrr direct (direct) Rn MOV Rn, data ;01111rrrdata data Rn 這組指令的功能是: 把源操作數(shù)的內(nèi)容送入當(dāng)前工作寄存器區(qū)的R0R7中的某一個(gè)寄存器。指令中Rn在內(nèi)部數(shù)據(jù)存儲(chǔ)器中的地址由當(dāng)前的工作寄存器區(qū)選擇位RS1、RS0 確定, 可以是 00H07H、08H0FH、10H17H、18H1FH。 例如: MOV R0, A, 若當(dāng)前RS1、RS0 設(shè)置為 00 (即工作寄存器 0 區(qū)), 執(zhí)行該指令時(shí),將累加器A中的數(shù)據(jù)傳送至工作寄存器R0(內(nèi)部RAM 00H)單元中。,3. 以直接地址為目的操作數(shù)的指令(5條) 匯編指令格式 機(jī)器碼格式 操作 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)存儲(chǔ)單元中。 : “MOV direct, direct1”指令在譯成機(jī)器碼時(shí),源地址在前,目標(biāo)地址在后。,4. 以間接地址為目的操作數(shù)的指令(3條) 匯編指令格式 機(jī)器碼格式 操作 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條) 匯編指令格式 機(jī)器碼格式 操作 MOV DPTR, data16 ;90dataHdataL #dataDPTR 這是唯一的16位立即數(shù)傳送指令,其功能是把16位常數(shù)送人DPTR。DPTR由DPH和DPL組成。這條指令執(zhí)行的結(jié)果是,將高8位立即數(shù)dataH送人DPH,低8位立即數(shù)dataL送人DPL。在譯成機(jī)器碼時(shí),也是高位字節(jié)在前,低位字節(jié)在后。如“MOV DPTR,#1234H”的機(jī)器碼是901234H“,執(zhí)行結(jié)果為:,6.查表指令(2條) 匯編指令格式 機(jī)器碼格式 操作 MOVC A, A+PC ;83H 先(PC)+1PC,后(A)+(PC) A MOVC A, A+DPTR ;93H 先(PC)+1PC,后(A)+(DPTR) A 這是兩條很有用的查表指令, 可用來(lái)查找存放在程序存儲(chǔ)器中的常數(shù)表格。第一條指令是以PC作為基址寄存器, A內(nèi)的8位無(wú)符號(hào)數(shù)和 PC的內(nèi)容 ( 下一條指令的起始地址)相加后得到一個(gè) 16 位地址, 并將該地址指出的程序存儲(chǔ)器單元的內(nèi)容送到累加器A。 這條指令的優(yōu)點(diǎn)是不改變特殊功能寄存器和PC的狀態(tài), 只要根據(jù)A的內(nèi)容就可以取出表格中的常數(shù)。缺點(diǎn)是表格只能放在該條查表指令后面的 256 個(gè)單元之中, 表格的大小受到限制, 而且表格只能被一段程序所利用。稱(chēng)近程查表。,執(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。,例如:在程序存儲(chǔ)器中,數(shù)據(jù)表格為:,第二條指令是以DPTR作為基址寄存器, 累加器A的內(nèi)容作為無(wú)符號(hào)數(shù)與DPTR內(nèi)容相加, 得到一個(gè) 16 位的地址, 并把該地址指出的程序存儲(chǔ)器單元的內(nèi)容送到累加器A。這條指令的執(zhí)行結(jié)果只與指針DPTR及累加器A的內(nèi)容有關(guān), 與該指令存放的地址無(wú)關(guān), 因此, 表格的大小和位置可以在 64 KB程序存儲(chǔ)器中任意安排, 并且一個(gè)表格可以為各個(gè)程序塊所共用,稱(chēng)為遠(yuǎn)程查表。 若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) =原值。,例如:在程序存儲(chǔ)器中,數(shù)據(jù)表格為:,7. 累加器A與外部數(shù)據(jù)存儲(chǔ)器RAM之間的傳送指令(4條) 匯編指令格式 機(jī)器碼格式 操作 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ù)存儲(chǔ)器RAM單元或I/O口之間進(jìn)行數(shù)據(jù)傳送, 前兩條指令執(zhí)行時(shí), P3.7 引腳上輸出RD有效信號(hào), 用作外部數(shù)據(jù)存儲(chǔ)器的讀選通信號(hào); 后兩條指令執(zhí)行時(shí), P3.6 引腳上輸出WR有效信號(hào), 用作外部數(shù)據(jù)存儲(chǔ)器的寫(xiě)選通信號(hào)。,DPTR為16位地址指針,所包含的16位地址信息由 P0 (低 8 位)和P2(高 8 位)輸出, 而數(shù)據(jù)信息由P0 口傳送, P0 口作分時(shí)復(fù)用的總線(xiàn)。尋址范圍達(dá)64KB。 由Ri作為間接尋址寄存器時(shí), P0 口分時(shí)輸出Ri指定的 8 位地址信息及傳輸 8 位數(shù)據(jù)。此時(shí),P2口可作為通用I/O。尋址范圍達(dá)256B。 MCS-51單片機(jī)沒(méi)有專(zhuān)門(mén)的輸入/輸出指令,它只能用這種方式與外部設(shè)備打交道。,8. 棧操作指令(2條) 匯編指令格式 機(jī)器碼格式 操作 1)PUSH direct ; E0direct 先(SP)+1SP,后(direct) (SP) 2)POP direct ;D0direct 先(SP) direct,后(SP)-1 (SP) 在特殊功能寄存器中有一個(gè)堆棧指針SP, 它指出棧頂?shù)奈恢谩?壓棧指令的功能是: 首先將堆棧指針SP的內(nèi)容加1, 然后將直接地址所指出的內(nèi)容送入SP指出的內(nèi)部RAM單元; 出棧指令的功能是: 將SP所指出的內(nèi)部RAM單元的內(nèi)容送入由直接地址所指出的字節(jié)單元, 接著將堆棧指針SP的內(nèi)容減 1。 :這兩條指令不影響標(biāo)志位。棧操作指令是直接尋址指令,注意指令的書(shū)寫(xiě)格式。,例如: 進(jìn)入中斷服務(wù)子程序時(shí), 把程序狀態(tài)寄存器PSW、 累加器A、 數(shù)據(jù)指針DPTR進(jìn)棧保護(hù)。設(shè)當(dāng)前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)容。當(dāng)中斷服務(wù)程序結(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 提供一個(gè)向上升的堆棧, 因此SP設(shè)置初值時(shí)要充分考慮堆棧的深度, 要留出適當(dāng)?shù)膯卧臻g, 滿(mǎn)足堆棧的使用。,9. 交換指令(4條) 1)字節(jié)交換指令 匯編指令格式 機(jī)器碼格式 操作 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é)交換指令 匯編指令格式 機(jī)器碼格式 操作 XCHD A, Ri ;1101011i (A03) (Ri) 03) 這條指令是半字節(jié)交換指令, 是將累加器 A內(nèi)容的低 4 位和Ri間接尋址所指出的內(nèi)部RAM單元內(nèi)容的低 4 位相互交換。高4位內(nèi)容不變。該操作只影響標(biāo)志位P。,圖 3 8 字節(jié)交換操作,表 3.3 數(shù)據(jù)傳送類(lèi)指令一覽表,表 3.3 數(shù)據(jù)傳送類(lèi)指令一覽表,3.3.2 算術(shù)運(yùn)算類(lèi)指令 算術(shù)運(yùn)算類(lèi)指令共有24條, 可分為加法、 帶進(jìn)位加法、 帶借位減法、乘法、除法、加1、減1及十進(jìn)制調(diào)整指令共8組。 它主要完成加、 減、 乘、 除四則運(yùn)算, 以及增量、 減量和二十進(jìn)制調(diào)整操作, 對(duì)8位無(wú)符號(hào)數(shù)可進(jìn)行直接運(yùn)算; 借助溢出標(biāo)志, 可對(duì)帶符號(hào)數(shù)進(jìn)行2的補(bǔ)碼運(yùn)算; 借助進(jìn)位標(biāo)志, 可進(jìn)行多字節(jié)加減運(yùn)算, 也可以對(duì)壓縮BCD碼(即單字節(jié)中存放兩位BCD碼)進(jìn)行運(yùn)算。 算術(shù)運(yùn)算結(jié)果將使進(jìn)位CY、半進(jìn)位AC、溢出位OV三個(gè)標(biāo)志位置1或清0,只有加1和減1指令不影響這些標(biāo)志位。,1. 加法類(lèi)指令(4條) 匯編指令格式 機(jī)器碼格式 操作 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é)果將影響標(biāo)志位CY、AC、OV、P。當(dāng)“和”的第7位和第3位有進(jìn)位時(shí),分別將CY和AC標(biāo)志位置1,否則清0。OV=C7C6。,這4條指令使得累加器A可以和內(nèi)部RAM的任何一個(gè)單元的內(nèi)容進(jìn)行相加, 也可以和一個(gè)8位立即數(shù)相加, 相加結(jié)果存放在A中。 無(wú)論是哪一條加法指令, 參加運(yùn)算的都是兩個(gè)8位二進(jìn)制數(shù)。 對(duì)用戶(hù)來(lái)說(shuō), 這些8位數(shù)可當(dāng)作無(wú)符號(hào)數(shù)(0255), 也可以當(dāng)作帶符號(hào)數(shù)(-128+127), 即補(bǔ)碼數(shù)。 例如: 對(duì)于二進(jìn)制數(shù)11010011, 用戶(hù)可認(rèn)為它是無(wú)符號(hào)數(shù), 即為十進(jìn)制數(shù)211, 也可以認(rèn)為它是帶符號(hào)數(shù), 即為十進(jìn)制負(fù)數(shù)-45。若是帶符號(hào)運(yùn)算,要考慮溢出標(biāo)志位OV。 但計(jì)算機(jī)在作加法運(yùn)算時(shí), 總按以下規(guī)定進(jìn)行:,例如: 120 和 100 之和為 220, 顯然大于 127, 相加時(shí),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,+,符號(hào)位(最高位)由 0 變 1, 兩個(gè)正數(shù)相加結(jié)果變負(fù), 實(shí)際上它是和數(shù)的最高位, 符號(hào)位移入了進(jìn)位標(biāo)志, 此時(shí)位 6 有進(jìn)位而位 7 無(wú)進(jìn)位, 置位溢出標(biāo)志OV, 結(jié)果溢出。,同樣, 120和100 相加, 結(jié)果應(yīng)為220, 顯然小于128, 相加時(shí),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,符號(hào)位由1變?yōu)?, 兩個(gè)負(fù)數(shù)相加結(jié)果變?yōu)檎龜?shù), 這是因?yàn)榉?hào)位移入進(jìn)位標(biāo)志, 位 6 無(wú)進(jìn)位而位 7 有進(jìn)位, 置位溢出標(biāo)志OV, 由此可判斷結(jié)果溢出。,2. 帶進(jìn)位加法指令(4條) 匯編指令格式 機(jī)器碼格式 操作 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 這組指令的功能與普通加法指令類(lèi)似, 唯一的不同之處是, 在執(zhí)行加法時(shí), 還要將上一次進(jìn)位標(biāo)志CY的內(nèi)容也一起加進(jìn)去, 對(duì)于標(biāo)志位的影響也與普通加法指令相同。 本指令常用于多字節(jié)加法。,3. 帶借位減法指令(4條) 匯編指令格式 機(jī)器碼格式 操作 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ù)及進(jìn)位位CY的值相減, 結(jié)果送回到累加器A中。 在執(zhí)行減法過(guò)程中,如果位7(D7)有借位, 則進(jìn)位標(biāo)志CY置“1”, 否則清“0”; 如果位 3(D3)有借位, 則輔助進(jìn)位標(biāo)志AC置“1”, 否則清“0”; 如位 6 有借位而位 7 沒(méi)有借位, 或位 7 有借位而位 6 沒(méi)有借位, 則溢出標(biāo)志OV置“1”, 否則清“0”。 若要進(jìn)行不帶借位的減法操作, 則必須先將CY清“0”。,4. 乘法指令(1條) 乘法指令完成單字節(jié)的乘法, 只有一條指令: 匯編指令格式 機(jī)器碼格式 操作 MUL AB ;A4H (A) *(B) (B)158 (A) 70 這條指令的功能是: 將累加器A的內(nèi)容與寄存器B的內(nèi)容相乘, 乘積的低 8 位存放在累加器A中, 高 8 位存放于寄存器B中。如果乘積超過(guò)0FFH, 則溢出標(biāo)志OV置“1”, 否則清“0”。 進(jìn)位標(biāo)志CY總是被清“0”。,5.除法指令(1條) 除法指令完成單字節(jié)的除法, 只有一條指令: 匯編指令格式 機(jī)器碼格式 操作 DIV AB ;84H (A)/(B) 商放A,余數(shù)放B 這條指令的功能是: 將累加器 A中的內(nèi)容除以寄存器B中的8位無(wú)符號(hào)整數(shù), 所得商的整數(shù)部分存放在累加器A中, 余數(shù)部分存放在寄存器 B中, 清“0”進(jìn)位標(biāo)志CY和溢出標(biāo)志OV。 若原來(lái)B中的內(nèi)容為 0, 則執(zhí)行該指令后A與B中的內(nèi)容不定, 并將溢出標(biāo)志OV置“1”。在任何情況下, 進(jìn)位標(biāo)志CY總是被清“0”。,6. 加1指令(5條) 匯編指令格式 機(jī)器碼格式 操作 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。若原來(lái)的內(nèi)容為0FFH, 則加 1 后將產(chǎn)生溢出, 使操作數(shù)的內(nèi)容變成00H, 但不影響任何標(biāo)志。最后一條指令是對(duì)16 位的數(shù)據(jù)指針寄存器DPTR執(zhí)行加 1 操作, 指令執(zhí)行時(shí), 先對(duì)低 8 位指針 DPL的內(nèi)容加 1, 當(dāng)產(chǎn)生溢出時(shí)就對(duì)高 8 位指針DPH加 1, 但不影響任何標(biāo)志。,7. 減1指令(4條) 匯編指令格式 機(jī)器碼格式 操作 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。若原來(lái)的內(nèi)容為00H, 則減 1 后將產(chǎn)生溢出, 使操作數(shù)的內(nèi)容變成0FFH, 但不影響任何標(biāo)志。,8. 十進(jìn)制調(diào)整指令(1條) 匯編指令格式 機(jī)器碼格式 操作 DA A ;D4H 將累加器的內(nèi)容調(diào)整為BCD數(shù) 這條指令跟在ADD、 ADDC指令之后,將相加后存放在累加器A中的結(jié)果進(jìn)行十進(jìn)制調(diào)整, 實(shí)現(xiàn)十進(jìn)制加法運(yùn)算功能。且只能用于壓縮BCD數(shù)相加結(jié)果的調(diào)整。 本指令是對(duì)累加器A中的BCD數(shù)的加法結(jié)果進(jìn)行調(diào)整。兩個(gè)壓縮型BCD數(shù)按二進(jìn)制相加后,必須經(jīng)本指令調(diào)整才能得到壓縮型BCD數(shù)的和的正確值。 :它只能跟在加法指令之后, 不能對(duì)直接減法指令的結(jié)果進(jìn)行調(diào)整。若兩BCD數(shù)相減,則應(yīng)將減數(shù)先化為100的補(bǔ)數(shù),兩數(shù)相加,再用“DA A”調(diào)整。且其結(jié)果不影響溢出標(biāo)志位。,執(zhí)行該指令時(shí):判斷 A中的低 4 位是否大于 9 和輔助進(jìn)位標(biāo)志 AC是否為“1”, 若兩者有一個(gè)條件滿(mǎn)足, 則低 4 位內(nèi)容加 6 ,以得到低 4 位正確的BCD數(shù)值。 同樣, A中的高4位大于9或進(jìn)位標(biāo)志CY為“1”兩者有一個(gè)條件滿(mǎn)足時(shí), 高4位加6。如果加6調(diào)整后,高4位產(chǎn)生進(jìn)位,則置位CY;反之,不清除CY。如果CY為1,表示和的BCD數(shù)100。這對(duì)多字節(jié)十進(jìn)制加法有用,不影響OV標(biāo)志。 若AC=1,CY=1同時(shí)發(fā)生(8999188),或者高4位雖等于9但低4位修正后有進(jìn)位,則A應(yīng)加66H修正(4359102)。 由此可見(jiàn),執(zhí)行“DA A”后,CPU根據(jù)累加器A的原始值和PSW的狀態(tài),由硬件自動(dòng)對(duì)累加器A進(jìn)行加06H、60H或66H的操作。,例如:設(shè)累加器A內(nèi)容為01010110B(56的BCD數(shù)),寄存器R3內(nèi)容為01100111B(67的BCD數(shù)),CY內(nèi)容為1。程序如下: ADDC A, R3 DA A 第一條指令執(zhí)行帶進(jìn)位的純二進(jìn)制加法,相加后累加器A的內(nèi)容為0BEH; 結(jié)果不是BCD數(shù)124,且CY=0,AC=0;然后執(zhí)行“DA A”, 因?yàn)楦?位值為11,大于9,低4位值為14,也大于 9, 因此內(nèi)部要進(jìn)行加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ù)運(yùn)算指令,表 3.4 算術(shù)運(yùn)算指令,表 3.5 影響標(biāo)志位的指令,表 3.6 影響標(biāo)志位的指令,3.3.3 邏輯操作類(lèi)指令 邏輯操作指令可以對(duì)兩個(gè)8位二進(jìn)制數(shù)進(jìn)行與、或、非和異或等邏輯運(yùn)算、常用來(lái)對(duì)數(shù)據(jù)進(jìn)行邏輯處理,使之適合于傳送、存儲(chǔ)和輸出打印等。在這類(lèi)指令中,除了以累加器A為目標(biāo)寄存器指令外,其余指令均不會(huì)改變PSW中的任何標(biāo)志位。,1. 簡(jiǎn)單操作指令 1)累加器A清0指令 匯編指令格式 機(jī)器碼格式 操作 CLR A ;E4H 0 A 對(duì)累加器A清“0”,只影響標(biāo)志位P。 2)累加器A取反指令 匯編指令格式 機(jī)器碼格式 操作 CPL A ; F4H (A) A 對(duì)累加器A按位取反,不影響標(biāo)志位。,2. 移位指令 1)累加器A循環(huán)左移指令 匯編指令格式 機(jī)器碼格式 操作 RL A ;23H 2)累加器A循環(huán)右移指令 匯編指令格式 機(jī)器碼格式 操作 RR A ; 03H 3)累加器A連同進(jìn)位位循環(huán)左移指令 匯編指令格式 機(jī)器碼格式 操作 RLC A ;33H 4)累加器A連同進(jìn)位位循環(huán)右移指令 匯編指令格式 機(jī)器碼格式 操作 RRC A ; 13H 通常用“RLC A”指令將累加器A的內(nèi)容作乘2運(yùn)算。,3. 累加器半字節(jié)交換指令 匯編指令格式 機(jī)器碼格式 操作 SWAP A ;C4H (A03) (A47) 這條指令的功能是將累加器A的高低兩個(gè)半字節(jié)交換。 例如(A)=FAH。 執(zhí)行指令“SWAP A”的結(jié)果為(A)=AFH。,4. 邏輯”與”指令 匯編指令格式 機(jī)器碼格式 操作 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 這組指令的功能是: 將兩個(gè)操作數(shù)的內(nèi)容按位進(jìn)行邏輯“與”操作, 并將結(jié)果送回目的操作數(shù)的單元中。 后兩條指令中,若直接地址是I/O端口,則為“讀修改寫(xiě)”操作。,5. 邏輯”或”指令 匯編指令格式 機(jī)器碼格式 操作 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 這組指令的功能是: 將兩個(gè)操作數(shù)的內(nèi)容按位進(jìn)行邏輯“或”操作, 并將結(jié)果送回目的操作數(shù)的單元中。 后兩條指令中,若直接地址是I/O端口,則為“讀修改寫(xiě)”操作。,6. 邏輯”異或”指令 匯編指令格式 機(jī)器碼格式 操作 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 這組指令的功能是: 將兩個(gè)操作數(shù)的內(nèi)容按位進(jìn)行邏輯“異或”操作, 并將結(jié)果送回目的操作數(shù)的單元中。 后兩條指令中,若直接地址是I/O端口,則為“讀修改寫(xiě)”操作。,表3.7 邏輯操作指令表,表3.7 邏輯操作指令表,3.3.4 控制程序轉(zhuǎn)移類(lèi)指令 控制轉(zhuǎn)移指令共有 17 條, 不包括按布爾變量控制程序轉(zhuǎn)移指令(見(jiàn)表 3.5)。其中有 64 KB范圍內(nèi)的長(zhǎng)調(diào)用、 長(zhǎng)轉(zhuǎn)移指令; 有 2 KB范圍內(nèi)的絕對(duì)調(diào)用和絕對(duì)轉(zhuǎn)移指令; 有全空間的長(zhǎng)相對(duì)轉(zhuǎn)移及一頁(yè)范圍內(nèi)的短相對(duì)轉(zhuǎn)移指令; 還有多種條件轉(zhuǎn)移指令。由于MCS -51 提供了較豐富的控制轉(zhuǎn)移指令, 因此在編程上相當(dāng)靈活方便。這類(lèi)指令用到的助記符共有 10 種: AJMP、LJMP、SJMP、JMP、ACALL、LCALL、JZ、JNZ、CJNE、DJNZ。,1. 無(wú)條件轉(zhuǎn)移指令 無(wú)條件轉(zhuǎn)移指令是指,當(dāng)程序執(zhí)行到該指令時(shí),程序必須無(wú)條件轉(zhuǎn)移到指令所提供的地址處繼續(xù)執(zhí)行。無(wú)條件轉(zhuǎn)移指令有短轉(zhuǎn)移、長(zhǎng)轉(zhuǎn)移、相對(duì)轉(zhuǎn)移和間接轉(zhuǎn)移(散轉(zhuǎn))指令。,1) 短轉(zhuǎn)移指令 匯編指令格式 機(jī)器碼格式 操作 AJMP addr11 ;a10a9a800001a7a0 先(PC)+2 PC, addr11 PC100 , (PC1511)不變 該指令執(zhí)行后,程序轉(zhuǎn)移的目的地址是由AJMP指令所在位置的地址PC值加上該指令字節(jié)數(shù)2,構(gòu)成當(dāng)前PC值。取當(dāng)前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當(dāng)前值,所以程序可轉(zhuǎn)移的位置只能是和PC當(dāng)前值在同一2 KB范圍內(nèi)。本指令轉(zhuǎn)移可以向前也可以向后,指令執(zhí)行后不影響狀態(tài)標(biāo)志位。 例如:若AJMP指令地址(PC)=2300H。執(zhí)行指令A(yù)JMP 0FFH后,結(jié)果為:轉(zhuǎn)移目的地址(PC)=20FFH,程序向前轉(zhuǎn)到20FFH單元開(kāi)始執(zhí)行。 又如:若AJMP指令地址(PC)=2FFFH。執(zhí)行指令A(yù)JMP 0FFH后,結(jié)果為:轉(zhuǎn)移目的地址(PC)=30FFH,程序向后轉(zhuǎn)到30FFH單元開(kāi)始執(zhí)行。 由上可見(jiàn):若addr11相同,則AJMP指令的機(jī)器碼相同,但轉(zhuǎn)移的目的地址卻可能不同,這是因?yàn)檗D(zhuǎn)移的目的地址是由PC當(dāng)前值的高5位與addr11共同決定的。,圖 3.9 AJMP轉(zhuǎn)換示意圖,圖 3.10 LJMP轉(zhuǎn)換示意圖,2) 長(zhǎng)轉(zhuǎn)移指令 匯編指令格式 機(jī)器碼格式 操作 LJMP addr16 ; 02 a158 a70 addr16 PC LJMP指令執(zhí)行后,程序無(wú)條件地轉(zhuǎn)向16位目標(biāo)地址(addr16)處執(zhí)行,不影響任何標(biāo)志位。由于指令中提供16位目標(biāo)地址,所以執(zhí)行這條指令可以使程序從當(dāng)前地址轉(zhuǎn)移到64 KB程序存儲(chǔ)器地址空間的任意地址,故得名為“長(zhǎng)轉(zhuǎn)移“。該指令的缺點(diǎn)是執(zhí)行時(shí)間長(zhǎng),字節(jié)多。,3) 相對(duì)轉(zhuǎn)移(相對(duì)短轉(zhuǎn)移)指令 匯編指令格式 機(jī)器碼格式 操作 SJMP rel ; 80 rel 先(PC)+2 PC,后(PC)+rel PC 指令的操作數(shù)rel用8位帶符號(hào)數(shù)補(bǔ)碼表示,占指令的一個(gè)字節(jié)。因?yàn)?位補(bǔ)碼的取值范圍為-128+127,所以該指令的轉(zhuǎn)移范圍是:相對(duì)PC當(dāng)前值向前轉(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(負(fù)數(shù)),則轉(zhuǎn)移目的地址為20F2H(向前轉(zhuǎn))。,用匯編語(yǔ)言編程時(shí),指令中的相對(duì)地址rel往往用欲轉(zhuǎn)移至的地址的標(biāo)號(hào)(符號(hào)地址)表示。機(jī)器匯編時(shí),能自動(dòng)算出相對(duì)地址值;但手工匯編時(shí),需自己計(jì)算相對(duì)地址值rel。rel的計(jì)算公式如下: 向前轉(zhuǎn)移:rel = FEH - (SJMP指令地址與目的地址差的絕對(duì)值) 向后轉(zhuǎn)移:rel = (SJMP指令地址與目的地址差的絕對(duì)值) -2 若rel = FEH,即目的地址就是SJMP指令的地址,在匯編指令中的偏移地址可用 $ 符號(hào)表示。若在程序的末尾加上SJMP $(機(jī)器碼為80 FEH),則程序就不會(huì)再向后執(zhí)行,造成單指令的無(wú)限循環(huán),進(jìn)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 地平線(xiàn)機(jī)器人-W深度報(bào)告:國(guó)產(chǎn)智駕方案龍頭邁向高階新征程
- 城市污水處理廠智能化升級(jí)改造對(duì)城市污水處理行業(yè)的變革作用
- 環(huán)境監(jiān)測(cè)行業(yè)智能化發(fā)展中的數(shù)據(jù)質(zhì)量控制風(fēng)險(xiǎn)管理與防范措施研究報(bào)告
- 2025年食品飲料電商運(yùn)營(yíng)跨界合作與數(shù)字化營(yíng)銷(xiāo)策略研究報(bào)告
- 電影產(chǎn)業(yè)2025年票房收益最大化與發(fā)行渠道優(yōu)化策略報(bào)告
- 2025年資源型城市綠色轉(zhuǎn)型政策體系構(gòu)建與實(shí)施效果分析報(bào)告
- 2025年葡萄酒產(chǎn)區(qū)特色品牌國(guó)際化品牌國(guó)際化創(chuàng)新成果轉(zhuǎn)化與應(yīng)用報(bào)告
- 培訓(xùn)學(xué)校藝體生管理制度
- 子公司股權(quán)事項(xiàng)管理制度
- 互聯(lián)網(wǎng)公司部門(mén)管理制度
- 家族成員關(guān)系輩分排列樹(shù)狀圖含女眷
- 圍堰施工監(jiān)理實(shí)施細(xì)則
- 新生血管性青光眼課件
- YY∕T 1797-2021 內(nèi)窺鏡手術(shù)器械 腔鏡切割吻合器及組件
- 智慧停車(chē)技術(shù)方案
- 土地整理質(zhì)量評(píng)定表
- 腸內(nèi)腸外營(yíng)養(yǎng)制劑及特點(diǎn)
- 排球練習(xí)方法
- 【告知牌】某公司全套重大危險(xiǎn)源告知牌(7頁(yè))
- 中考數(shù)學(xué)復(fù)習(xí)專(zhuān)題二方程與不等式
- 大隱靜脈曲張護(hù)理查房精選幻燈片
評(píng)論
0/150
提交評(píng)論