版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第第3章章 MCS-51系列單片機(jī)的系列單片機(jī)的指令系統(tǒng)指令系統(tǒng)n3.1 3.1 指令系統(tǒng)簡(jiǎn)介指令系統(tǒng)簡(jiǎn)介n3.2 3.2 尋址方式尋址方式n3.3 3.3 數(shù)據(jù)傳送類指令數(shù)據(jù)傳送類指令n3.4 3.4 算術(shù)運(yùn)算類指令算術(shù)運(yùn)算類指令n3.5 3.5 邏輯運(yùn)算及移位類指令邏輯運(yùn)算及移位類指令n3.6 3.6 控制轉(zhuǎn)移類指令控制轉(zhuǎn)移類指令n3.7 3.7 位操作類指令位操作類指令31 指令系統(tǒng)概述指令系統(tǒng)概述 指令是規(guī)定計(jì)算機(jī)進(jìn)行某種操作的命令。一臺(tái)計(jì)算機(jī)所能執(zhí)行的指令集合稱為該計(jì)算機(jī)的指令系統(tǒng)。n311 指令概述 計(jì)算機(jī)內(nèi)部只識(shí)別二進(jìn)制數(shù)。因此,能被計(jì)算機(jī)直接識(shí)別、執(zhí)行的指令是使用二進(jìn)制編碼表示
2、的指令,這種指令被稱為機(jī)器語言指令。 MCS-51系列單片機(jī)指令系統(tǒng)共有111條指令,按功能劃分,可分為五大類:1)數(shù)據(jù)傳送類指令(29條);2)算術(shù)運(yùn)算類指令(24條); 3)邏輯運(yùn)算及移位類指令(24條);4)控制轉(zhuǎn)移類指令(17條);5)位操作類指令(17)。312 指令格式指令格式n一條完整的指令格式如下:n標(biāo)號(hào): 操作碼 操作數(shù) ;注釋n標(biāo)號(hào)標(biāo)號(hào)是該指令的起始地址,是一種符號(hào)地址。n標(biāo)號(hào)可以由18個(gè)字符組成,第一個(gè)字符必須是字母,其余字符可以是字母、數(shù)字或其他特定符號(hào)。標(biāo)號(hào)后跟分界符“:”。n操作碼指令的助記符。它規(guī)定了指令所能完成的操作功能。n操作數(shù)指出了指令的操作對(duì)象。操作數(shù)可以
3、是一個(gè)具體的數(shù)據(jù),也可以是存放數(shù)據(jù)的單元地址,還可以是符號(hào)常量或符號(hào)地址等。n多個(gè)操作數(shù)之間用逗號(hào)“,”分隔。 注釋為了方便閱讀而添加的解釋說明性的文字, 用“;”開頭。n313 指令中常用符號(hào)說明指令中常用符號(hào)說明 Rn 當(dāng)前選中的工作寄存器組中的寄存器R0R7之一, 所以n=07。nRi 當(dāng)前選中的工作寄存器組中可作地址指針的寄存器R0、R1,所以i=0、1。n#data 8位立即數(shù)。n#data16 16位立即數(shù)。ndirect 內(nèi)部RAM的8位地址。即可以是內(nèi)部RAM的低128個(gè)單元地址,也可以是特殊功能寄存器的單元地址或符號(hào)。在指令中direct表示直接尋址方式。naddr11 11
4、位目的地址,只限于在ACALL和AJMP 指令中使用。naddr16 16位目的地址,只限于在LCALL和LJMP 指令中使用。 re l補(bǔ)碼形式表示的8位地址偏移量,在相對(duì)轉(zhuǎn)移指令中使用。nbit 表示片內(nèi)RAM位尋址區(qū)或可位尋址的特殊功能寄存器的位地址;n 間接尋址方式中間址寄存器的前綴標(biāo)志;nC 進(jìn)位標(biāo)志位,它是布爾處理機(jī)的累加器,也稱之為位累加器;n/ 加在位地址的前面,表示對(duì)該位先求反再參與操作,但不影響該位的值;n(x)由x指定的寄存器或地址單元中的內(nèi)容;n(x)由x所指寄存器的內(nèi)容作為地址的存儲(chǔ)單元的內(nèi)容;n$ 表示本條指令的起始地址;n 表示指令操作流程,將箭頭右邊的內(nèi)容送到箭
5、頭左邊的單元中。32 尋址方式尋址方式n尋址就是尋找操作數(shù)的地址,尋址方式則指出尋找操作數(shù)地址的方式方法。 MCS-51系列單片機(jī)提供了七種尋址方式。n 321 立即尋址立即尋址n所謂立即尋址就是在指令中直接給出操作數(shù)。通常把出現(xiàn)在指令中的操作數(shù)稱為立即數(shù)。為了與直接尋址指令中的直接地址相區(qū)別,在立即數(shù)前面加“#”標(biāo)志。例如:n MOV A,#3AHn其中3AH就是立即數(shù),該指令功能是將3AH這個(gè)數(shù)本身送入累加器A中。 n322 直接尋址直接尋址n在指令中直接給出操作數(shù)地址,這就是直接尋址方式。例如:nMOV A,3AHn其中3AH就是表示直接地址, 其操作示意圖如圖3-1所示, 直接尋址方式
6、可訪問以下 存儲(chǔ)空間:n內(nèi)部RAM低128個(gè)字節(jié)單元。n特殊功能寄存器。應(yīng)注意:直接尋址是訪問特殊功能寄存器的唯一方法。n323 寄存器尋址寄存器尋址n寄存器尋址即寄存器的內(nèi)容就是操作數(shù)。因此在指令的操作數(shù)位置上指定了寄存器就能得到操作數(shù)。MOV A,R0nMOV R2,A 前一條指令是將R0寄存器的內(nèi)容送到累加器A中。 后一條是把累加器A中的內(nèi)容傳送到R2寄存器中。n采用寄存器尋址方式的指令都是一字節(jié)的指令,可以作寄存器尋址的寄存器有:R0R7、A、AB寄存器對(duì)和數(shù)據(jù)指針DPTRn324 寄存器間接尋址寄存器間接尋址n所謂寄存器間接尋址就是以寄存器中的內(nèi)容作為RAM地址,該地址中的內(nèi)容才是操
7、作數(shù)。n寄存器前加寄存器前加“”標(biāo)志,表示間接尋址。標(biāo)志,表示間接尋址。n例如:MOV A,R0n其操作示意圖如圖3-2所示。n 此時(shí)R0寄存器的內(nèi)容3AHn是操作數(shù)地址,內(nèi)部RAM的n3AH單元的內(nèi)容65H才是操n作數(shù),把該操作數(shù)傳送到n累加器A中,結(jié)果A=65H。 能用于間接尋址的寄存器有能用于間接尋址的寄存器有R0R0,R1R1,DPTRDPTR,SPSP。其中其中R0R0、R1R1必須是工作寄存器組中的寄存器。必須是工作寄存器組中的寄存器。SPSP僅用于堆棧操作。僅用于堆棧操作。間接尋址可以訪問的存儲(chǔ)器空間包括內(nèi)部RAM和外部RAM。內(nèi)部RAM的低128個(gè)單元采用R0、R1作為間址寄存
8、器外部RAM:一是采用R0、R1作為間址寄存器,可尋址256個(gè)單元。二是采用16位的DPTR作為間址寄存器,可尋址外部RAM的整個(gè)64KB地址空間。例如:例如: MOV R0,A ;內(nèi)部;內(nèi)部RAM(R0)A (a) (b) MOVX DPTR,A;外部;外部RAM(DPTR)A其指令操作過程示意圖如上圖(其指令操作過程示意圖如上圖(b)所示)所示。 其指令操作過程示意圖如下圖(其指令操作過程示意圖如下圖(a a)所示。)所示。片外片外RAM2000HDPTR30HA2000H30H片內(nèi)片內(nèi)RAM30HR034HA30H34Hv對(duì)于52子系列的單片機(jī),其內(nèi)部RAM是256個(gè)字節(jié),其高128字節(jié)
9、地址與特殊功能寄存器的地址是重疊的,在使用上,對(duì)52子系列的高128B RAM,必須采用寄存器間接尋址方式訪問,對(duì)特殊功能寄存器則必須采用直接尋址方式訪問。v325 變址尋址變址尋址v變址尋址是以DPTR或PC作基址寄存器,以累加器A作變址寄存器,并以二者內(nèi)容相加形成的16位地址作為操作數(shù)地址(ROM中地址)。v例如:例如:vMOVC A,A+DPTR ;A (A)+(DPTR) MOVC A,A+PC ;A (A)+(PC)n第一條指令的功能將A的內(nèi)容與DPTR的內(nèi)容之和作為操作數(shù)地址,把該地址中的內(nèi)容送入累加器A中,如圖3-3所示。 第二條指令的功能將A的內(nèi)容與PC的內(nèi)容之和作為操作數(shù)地址
10、,把該地址中的內(nèi)容送入累加器A中。n這兩條指令常用于訪問程序存儲(chǔ)器中的數(shù)據(jù)表格。且都為一字節(jié)指令。n326 相對(duì)尋址相對(duì)尋址n相對(duì)尋址即將程序計(jì)數(shù)器PC的當(dāng)前值與指令中給出的偏移量rel相加,其結(jié)果作為轉(zhuǎn)移地址送入PC中。相對(duì)尋址能修改PC的值,故可用來實(shí)現(xiàn)程序的分支轉(zhuǎn)移。PC當(dāng)前值是指正在執(zhí)行指令的下一條指令的地址。rel是一個(gè)帶符號(hào)的8位二進(jìn)制數(shù),取值范圍-128+127。2000H:SJMP 54H這是無條件相對(duì)轉(zhuǎn)移指令,雙字節(jié)指令,指令代碼80H、54H;其中54H是偏移量。n327 位尋址位尋址n在指令的操作數(shù)位置上直接給出位地址,這種尋址方式稱為位尋址。 MCS-51系列單片機(jī)的特
11、色之一是具有位處理功能,可對(duì)尋址的位單獨(dú)進(jìn)行各種操作。n例如:MOV C,30Hn該指令的功能是把位地址30H中的值(0或1)傳送到位累加器CY中。n51系列單片機(jī)的內(nèi)部RAM有兩個(gè)區(qū)域可以位尋址:一個(gè)是位尋址區(qū)20H2FH單元的128位,另一個(gè)是字節(jié)地址能被8整除的特殊功能寄存器的相應(yīng)位。n在MCS-51系列單片機(jī)中,位地址有以下幾種表示方式:n(1)直接使用位地址。對(duì)于20H2FH共16個(gè)單元的128位,其位地址編號(hào)是00H7FH,例如,20H單元的07位的位地址為00H7H。n(2)用單元地址加位序號(hào)表示。如25H.5表示25H單元的D5位(位地址是2DH),而PSW中的D3可表示為D0
12、H.3。這種表示方法可以避免查表或計(jì)算,比較方便。n(3)用位名稱表示。特殊功能寄存器中的可尋址位均有位名稱,可以用位名稱來表示該位。如可用RS0表示PSW中的D3位:D0H.3n(4)對(duì)特殊功能寄存器可直接用寄存器符號(hào)加位序號(hào)表示。如PSW中的D3位,又可表示為PSW.3。n數(shù)據(jù)傳送類指令的功能是把源操作數(shù)傳送到目的操作數(shù),源操作數(shù)不變,目的操作數(shù)被源操作數(shù)所代替。n331 內(nèi)部?jī)?nèi)部RAM數(shù)據(jù)傳送指令數(shù)據(jù)傳送指令 內(nèi)部RAM的數(shù)據(jù)傳送類指令是指累加器、寄存器、特殊功能寄存器、RAM單元之間的數(shù)據(jù)相互傳送。n1以累加器以累加器A為目的操作數(shù)的數(shù)據(jù)傳送指令為目的操作數(shù)的數(shù)據(jù)傳送指令 MOV A,
13、#data ;A data MOV A,direct ;A (direct) MOV A,Rn ;A (Rn) MOV A,Ri ;A ((Ri)) 這組指令的功能是將源操作數(shù)所指定的內(nèi)容送入累加器A中。33 數(shù)據(jù)傳送類指令數(shù)據(jù)傳送類指令n2以寄存器以寄存器Rn為目的操作數(shù)的數(shù)據(jù)傳送指令為目的操作數(shù)的數(shù)據(jù)傳送指令 MOV Rn,A ;Rn (A) MOV Rn,#data ;Rn data MOV Rn,direct ;Rn (direct) 這組指令的功能是將源操作數(shù)所指定的內(nèi)容送到當(dāng)前工作寄存器組R0R7中的某個(gè)寄存器中。 注意:沒有“MOV Rn,Rn”指令, 也沒有“MOV Rn, R
14、i”指令。例例3-1 (A)=50H,(R1)=10H,(R2)=20H, (R3)=30H,(30H)=4FH,執(zhí)行下述指令: MOV R1,A ;R1 (A) MOV R2,30H ;R2 (30H) MOV R3,#85H ;R3 85H 執(zhí)行后:(R1)=50H,(R2)=4FH,(R3)=85H。3以直接地址為目的操作數(shù)的數(shù)據(jù)傳送指令以直接地址為目的操作數(shù)的數(shù)據(jù)傳送指令 MOV direct,A ;direct (A) MOV direct,#data ;direct data MOV direct1,direct2 ;direct1 (direct2) MOV direct,Rn
15、;direct (Rn) MOV direct,Ri ;direct ((Ri))n 這組指令的功能是將源操作數(shù)所指定的內(nèi)容送入由直接地址direct所指定的片內(nèi)存儲(chǔ)單元。n例例3-2 已知:(R0)=60H,(60H)=72H, MOV 40H,R0 ;(40H)(60H)指令執(zhí)行過程如圖3-5所示。執(zhí)行結(jié)果為:(40H)=72H4以間接地址以間接地址Ri為目的操作數(shù)的數(shù)據(jù)傳送指令為目的操作數(shù)的數(shù)據(jù)傳送指令 MOV Ri ,A ;(Ri) (A) MOV Ri ,#data ;(Ri) data MOV Ri , direct ;(Ri) (direct) 這組指令的功能是把源操作數(shù)所指定的
16、內(nèi)容送入以R0或R1為地址指針的片內(nèi)RAM單元中。源操作數(shù)可采用寄存器尋址、立即尋址和直接尋址3種方式。n 注意:沒有“MOV Ri ,Rn”指令。例例3-3 已知:(R1)=30H,(A)=20H,執(zhí)行指令: MOV R1 ,A ;(30H)(A) 執(zhí)行結(jié)果為:(30H)=20H。5以以DPTR為目的操作數(shù)的數(shù)據(jù)傳送指令為目的操作數(shù)的數(shù)據(jù)傳送指令 MOV DPTR ,#data16 ;DPTR data16n 這是MCS-51系列單片機(jī)指令系統(tǒng)中唯一的一條16位立即數(shù)傳送指令,其功能是將外部存儲(chǔ)器(RAM或ROM)某單元地址作為立即數(shù)送到DPTR中,立即數(shù)的高8位送DPH,低8位送DPL。
17、在學(xué)習(xí)、使用上述各條指令時(shí),需注意以下幾點(diǎn):(1)要區(qū)分各種尋址方式的含義,正確傳送數(shù)據(jù)。(2)所有傳送指令都不影響標(biāo)志位。這里所說的標(biāo)志位是指CY、AC、和OV。涉及到累加器A的將影響奇偶標(biāo)志位P。(3)估算指令的字節(jié)數(shù):凡是指令中既不包含直接地址、又不包含8位立即數(shù)的指令均為一字節(jié)指令;若指令中包含一個(gè)直接地址或8位立即數(shù),則指令字節(jié)數(shù)為2,若包含兩個(gè)這樣的操作數(shù),則指令字節(jié)數(shù)為3。例3-4 若(R0)=30H,(30H)=50H,執(zhí)行指令: MOV A,R0 ;(A)=30H (一字節(jié)) MOV A,30H ;(A )=50 H (二字節(jié)) MOV A,#30H ;(A )=30H (二
18、字節(jié)) MOV 30H ,#0FH ;(30H )=0FH (三字節(jié)) MOV DPTR,#2000H ;(DPH) =20H , (DPL)=00H (三字節(jié)) n332 訪問外部訪問外部RAM的數(shù)據(jù)傳送指令的數(shù)據(jù)傳送指令nCPU與外部RAM或I/O口進(jìn)行數(shù)據(jù)傳送,必須采用寄存器間接尋址的方式,并通過累加器A來傳送。這類指令共有四條: MOVX A ,DPTR ;A(DPTR) MOVX DPTR ,A ;(DPTR)A OVX A ,Ri ;A(Ri) MOVX Ri ,A ;(Ri)An前兩條指令是以DPTR作為間址寄存器, DPTR是16位地址指針,因此其尋址范圍可達(dá)片外RAM 64K
19、B空間。n后兩條指令是以R0或R1作為間址寄存器,R0或R1是8位地址指針,因此其尋址范圍僅限于外部RAM 256個(gè)字節(jié)單元。n該組指令的功能:在DPTR或R0、R1所指定的外部RAM單元與累加器A之間傳送數(shù)據(jù)。n例例3-5 試編程,將片外RAM的2000H單元內(nèi)容送入片外RAM的0200H單元中;解:片外RAM與片外RAM之間不能直接傳送數(shù)據(jù),需通過累加器A傳送,另外,當(dāng)片外RAM地址值大于FFH時(shí),需用DPTR作為間址寄存器。編程如下: MOV DPTR ,#2000H ;源數(shù)據(jù)地址送DPTR MOVX A ,DPTR ;從外部RAM中取數(shù)送A MOV DPTR ,#0200H ;目的地址
20、送DPTR MOVX DPTR ,A ;A中內(nèi)容送外部RAM 333 程序存儲(chǔ)器向累加器程序存儲(chǔ)器向累加器A傳送數(shù)據(jù)指令傳送數(shù)據(jù)指令 MOVC A, A+DPTR ;A((A)+(DPTR)) MOVC A, A+PC ;A((A)+(PC)) 兩條指令適合于查閱在兩條指令適合于查閱在ROMROM中建立的數(shù)據(jù)表格,也中建立的數(shù)據(jù)表格,也稱作查表指令,實(shí)現(xiàn)的功能完全相同,但使用中有稱作查表指令,實(shí)現(xiàn)的功能完全相同,但使用中有一點(diǎn)差異。一點(diǎn)差異。 第一條指令采用第一條指令采用DPTRDPTR作為基址寄存器。使用前可將作為基址寄存器。使用前可將1616位地址送入位地址送入DPTRDPTR中,實(shí)現(xiàn)在中
21、,實(shí)現(xiàn)在64KBROM64KBROM空間向累加空間向累加器器A A的數(shù)據(jù)傳送。數(shù)據(jù)表格可存放在的數(shù)據(jù)傳送。數(shù)據(jù)表格可存放在64KBROM64KBROM的任意的任意位置,因此這條指令稱為遠(yuǎn)程查表指令。位置,因此這條指令稱為遠(yuǎn)程查表指令。n第二條指令是以第二條指令是以PCPC作為基址寄存器。程序中作為基址寄存器。程序中PCPC值是值是確定的,為下一條指令的地址,不是表格首地址,確定的,為下一條指令的地址,不是表格首地址,使基址與實(shí)際要讀取的數(shù)據(jù)表格首地址不一致,這使基址與實(shí)際要讀取的數(shù)據(jù)表格首地址不一致,這樣樣A+PCA+PC與實(shí)際要訪問的單元地址就不一致,因此與實(shí)際要訪問的單元地址就不一致,因此
22、, ,使用該指令之前要用一條使用該指令之前要用一條加法指令加法指令進(jìn)行進(jìn)行地址調(diào)整地址調(diào)整。n由于PC的內(nèi)容不能隨意改變,所以只能借助于A來進(jìn)行調(diào)整,即通過對(duì)累加器A加一個(gè)數(shù),使得A+PC和所讀ROM單元地址一樣。n 例例3-6 若在外部ROM中2000H單元存放(09)的平方 值0,1,4,9,81,要求根據(jù)累加器A中的值(09)來查找所對(duì)應(yīng)的平方值,并存入60H單元中。n解: 用DPTR作基址寄存器: MOV DPTR,#2000H ;表格首地址送DPTR MOVC A,A+DPTR ;根據(jù)表格首地址及A中值確定地 址,取數(shù)送A。 MOV 60H ,A ;存結(jié)果此處(A)+(DPTR)之和
23、為所查平方值所存地址。 v 用PC作為基址寄存器:在MOVC指令之前先用一條加法指令進(jìn)行地址調(diào)整: ADD A ,# data ;(A)+data 作地址調(diào)整 MOVC A ,A+PC ;(A)+data+(PC)確定查表地址,取數(shù)送A。 MOV 60H ,A ;存結(jié)果 RET 2000H:DB 0,1,4,9,16,25,36,81執(zhí)行MOVC指令時(shí),PC已指向下一條指令地址,很顯然,PC的內(nèi)容不是要查找的表格首地址2000H,二者之間存在地址差,這個(gè)地址差就是MOVC下邊的指令與數(shù)據(jù)表格首地址之間,其他指令所占的字節(jié)數(shù)之和。在本例中,地址差是03,即data=03H。n334 數(shù)據(jù)交換指令
24、數(shù)據(jù)交換指令n 數(shù)據(jù)交換指令共有五條,可完成累加器和內(nèi)部RAM單元之間的整字節(jié)或半字節(jié)交換。n1整字節(jié)交換指令n 整字節(jié)交換指令有三條,完成累加器A與內(nèi)部RAM單元內(nèi)容的整字節(jié)交換。 XCH A,Rn ;( A) (Rn) XCH A,direct ;(A)(direct) XCH A,Ri ;(A)((Ri))n2半字節(jié)交換指令 XCHD A,Ri ;(A)30((Ri))30 低半字節(jié)交換,高半字節(jié)不變。 n3累加器高低半字節(jié)交換指令 n SWAP A ;(A)74(A)30n例例3-7 試試編程,將外部RAM 1000H單元中的數(shù)據(jù)與內(nèi)部RAM 6AH單元中的數(shù)據(jù)相互交換。n解:數(shù)據(jù)交換
25、指令只能完成累加器A和內(nèi)部RAM單元之間的數(shù)據(jù)交換,要完成外部RAM與內(nèi)部RAM之間的數(shù)據(jù)交換,需先把外部RAM中的數(shù)據(jù)取到A中,交換后再送回到外部RAM中。編程如下。 MOV DPTR ,#1000H ;外部RAM地址送DPTR MOVX A ,DPTR ;從外部RAM中取數(shù)送A XCH A ,6AH ;A與6AH地址中的內(nèi)容交換 MOVX DPTR ,A ;交換結(jié)果送外部RAMn335 堆棧操作指令堆棧操作指令所謂堆棧是在片內(nèi)所謂堆棧是在片內(nèi)RAMRAM中按中按“先進(jìn)后出,后進(jìn)先出先進(jìn)后出,后進(jìn)先出”原則設(shè)置的專用存儲(chǔ)區(qū)。數(shù)據(jù)的進(jìn)棧出棧由指針原則設(shè)置的專用存儲(chǔ)區(qū)。數(shù)據(jù)的進(jìn)棧出棧由指針SPS
26、P統(tǒng)一管理??蓪?shí)現(xiàn)對(duì)數(shù)據(jù)或斷點(diǎn)地址的保護(hù),統(tǒng)一管理??蓪?shí)現(xiàn)對(duì)數(shù)據(jù)或斷點(diǎn)地址的保護(hù),堆棧的操作有如下兩條專用指令:堆棧的操作有如下兩條專用指令: PUSH direct ;SP (SP)+1,(SP)(direct) POP direct ;direct (SP),SP (SP)-1n前一條指令是進(jìn)棧指令進(jìn)棧指令,其功能是先將棧指針SP的內(nèi)容加1,使它指向棧頂空單元,然后將直接地址direct單元的內(nèi)容送入棧頂空單元。n后一條指令是出棧指令出棧指令,其功能是將SP所指的單元內(nèi)容送入直接地址所指出的單元中,然后將棧指針SP的內(nèi)容減1,使之指向新的棧頂單元。n注意:進(jìn)棧、出棧指令只能以直接尋址方式來
27、取得操作數(shù),不能用累加器或工作寄存器Rn作為操作數(shù)。n算術(shù)運(yùn)算類指令可以完成加、減、乘、除等各種操作,全部指令都是都是8位數(shù)運(yùn)算指令位數(shù)運(yùn)算指令。如果需要作16位數(shù)的運(yùn)算則需編寫相應(yīng)的程序來實(shí)現(xiàn)。n算術(shù)運(yùn)算類指令大多數(shù)要影響到程序狀態(tài)字寄存器PSW中的溢出標(biāo)志OV、進(jìn)位(借位)標(biāo)志CY、輔助進(jìn)位標(biāo)志AC和奇偶標(biāo)志位P。n341 加法指令加法指令 ADD A ,# data ;A (A)+data ADD A ,direct ;A (A)+(direct) ADD A ,Rn ;A (A)+(Rn) ADD A ,Ri ;A (A)+((Ri)) 34 算術(shù)運(yùn)算類指令算術(shù)運(yùn)算類指令v這組指令的功
28、能是把源操作數(shù)所指出的內(nèi)容與累加器A的內(nèi)容相加,其結(jié)果存放在A中。v該組指令對(duì)PSW中各標(biāo)志位的影響情況如下:進(jìn)位標(biāo)志CY:如D7位向上有進(jìn)位,則CY=1; 否則CY=0。半進(jìn)位標(biāo)志AC:如D3位向上有進(jìn)位,AC=1; 否則AC=0。溢出標(biāo)志OV:若D7、D6位只有一個(gè)向上有進(jìn)位,OV=1;若D7、D6同時(shí)有進(jìn)位或同時(shí)無進(jìn)位時(shí),OV=0。奇偶標(biāo)志P:當(dāng)A中“1”的個(gè)數(shù)為奇數(shù)時(shí),P=1;為偶數(shù)時(shí),P=0。n例例3-8 設(shè)A=94H,(30H)=8DH,n執(zhí)行指令 ADD A,30H,操作如下: 1 0 0 1 0 1 0 0 + )1 0 0 0 1 1 0 1 1 0 0 1 0 0 0 0
29、1結(jié)果(A)=21H ;(CY)=1; (AC)=1 ;(OV)=1;(P)=0參加運(yùn)算的兩個(gè)數(shù),可以是無符號(hào)數(shù)(0255),也可以是有符號(hào)數(shù)(128+127)。n上例中,若把94H、8DH看作無符號(hào)數(shù)相加,結(jié)果中CY=1,表示運(yùn)算結(jié)果發(fā)生了溢出(結(jié)果超出了8位),此時(shí)溢出的含義是向高位產(chǎn)生進(jìn)位,所以確定結(jié)果時(shí)不能只看累加器A的內(nèi)容,而應(yīng)該把CY的值加到高位上,才可得到正確的結(jié)果。即結(jié)果為121H;若把94H、8DH看作有符號(hào)數(shù)(補(bǔ)碼表示的),結(jié)果中OV=1,它表示運(yùn)算結(jié)果發(fā)生了溢出,A中的值是個(gè)錯(cuò)誤的結(jié)果。n342 帶進(jìn)位加法指令帶進(jìn)位加法指令 ADDC A ,# data ;A (A)+
30、data +(CY) ADDC A ,direct ;A (A)+(direct)+(CY) ADDC A ,Rn ;A (A)+(Rn)+(CY) ADDC A ,Ri ;A (A)+((Ri))+(CY)n這組指令的功能是把源操作數(shù)所指出的內(nèi)容與累加器A的內(nèi)容相加、再加上進(jìn)位標(biāo)志CY的值,其結(jié)果存放在A中。n運(yùn)算結(jié)果對(duì)PSW標(biāo)志位的影響與ADD指令相同。n需要說明的是,這里所加的進(jìn)位標(biāo)志CY的值是在該指令執(zhí)行之前已經(jīng)存在的進(jìn)位標(biāo)志值,而不是執(zhí)行該指令過程中產(chǎn)生的進(jìn)位標(biāo)志值。 例例3-9 設(shè)(A)=AEH,(R1)=81H,(CY)=1。執(zhí)行指令 ADDC A,R1,則操作如下: 1 0 1
31、 0 1 1 1 0 1 0 0 0 0 0 0 1 +) 1 (CY) 1 0 0 1 1 0 0 0 0 結(jié)果(A)=30H,(CY)=1,(OV)=1, (AC)=1,(P)=0n帶進(jìn)位加法指令主要用于多字節(jié)數(shù)的加法運(yùn)算。因低位字節(jié)相加時(shí)可能產(chǎn)生進(jìn)位,而在進(jìn)行高位字節(jié)相加時(shí),要考慮低位字節(jié)向高位字節(jié)的進(jìn)位,因此,在進(jìn)行高位字節(jié)相加時(shí)必須使用帶進(jìn)位的加法指令。n例例3-10 設(shè)有兩個(gè)無符號(hào)16位二進(jìn)制數(shù),分別存放在30H、31H單元和40H、41H單元中(低8位先存),寫出兩個(gè)16位數(shù)的加法程序,將和存入50H、51H單元。(設(shè)和不超過16位)n解: 由于不存在16位數(shù)的加法指令,所以只能
32、先加低8位,后加高8位,而在加高8位時(shí)要連低8位相加的進(jìn)位一起相加,編程如下: MOV A ,30H ;取一個(gè)加數(shù)的低字節(jié)送A中 ADD A ,40H ;兩個(gè)低字節(jié)數(shù)相加 MOV 50H ,A ;結(jié)果送50H單元 MOV A ,31H ;取一個(gè)加數(shù)的高字節(jié)送A中 ADDC A ,41H ;高字節(jié)數(shù)相加,同時(shí)加低字節(jié)產(chǎn)生的進(jìn)位 MOV 51H ,A ;結(jié)果送51H單元 n343 帶借位減法指令帶借位減法指令 SUBB A ,# data ;A (A) - data -(CY) SUBB A ,direct ;A (A) -(direct)-(CY) SUBB A ,Rn ;A (A) (Rn)-
33、(CY) SUBB A ,Ri ;A (A) -((Ri))-(CY)n減法指令對(duì)PSW中各標(biāo)志位的影響情況如下:借位標(biāo)志CY:如D7位向上需借位,則CY=1;否則CY=0。半借位標(biāo)志AC:如D3位向上需借位,AC=1;否則AC=0。溢出標(biāo)志OV:若D7、D6位只有一個(gè)向上有借位,OV=1;若若D7、D6位同時(shí)有借位或同時(shí)無借位時(shí),OV=0。奇偶標(biāo)志P:當(dāng)A中“1”的個(gè)數(shù)為奇數(shù)時(shí),P=1;為偶數(shù)時(shí), P=0。注:減法運(yùn)算只有帶借位減法指令,而沒有不帶借位注:減法運(yùn)算只有帶借位減法指令,而沒有不帶借位的減法指令。若要進(jìn)行低字節(jié)的減法運(yùn)算,應(yīng)該先的減法指令。若要進(jìn)行低字節(jié)的減法運(yùn)算,應(yīng)該先用指令將
34、用指令將CY清清0,然后再執(zhí)行,然后再執(zhí)行SUBB指令。指令。n例例3-11 設(shè)(A)=DBH,(R4)=73H,(CY)=1。執(zhí)行指令 SUBB A,R4 則操作如下: 1 1 0 1 1 0 1 1 (DBH) 1 1 0 1 1 0 1 1 1 1 0 0 1 1 1 1 (73H) 1 0 0 0 1 1 0 1 (-73H補(bǔ)碼)) 1 (CY) +) 1 1 1 1 1 1 1 1 (-1補(bǔ)碼) 0 1 1 0 0 1 1 1 10 0 1 1 0 0 1 1 1 (a)常規(guī)減法 (b)減法變補(bǔ)碼相加結(jié)果:(A)=67H,(C)=0,(AC)=0,(OV)=1,(P)=1。由上述二式
35、可見兩種算法的最終結(jié)果是一樣的。在此例中,若DBH和73H是兩個(gè)無符號(hào)數(shù),則結(jié)果67H是正確的;反之,若為兩個(gè)帶符號(hào)數(shù),則由于產(chǎn)生(OV=1),使得結(jié)果是錯(cuò)誤的,因?yàn)樨?fù)數(shù)減正數(shù)其結(jié)果不可能是正數(shù),OV=1,就指出了這一錯(cuò)誤。 n344 加加1指令指令 INC A ;A (A)+ 1 INC direct ;direct (direct)+ 1 INC Rn ;Rn (Rn)+ 1 INC Ri ;Ri (Ri)+ 1 INC DPTR ;DPTR (DPTR)+ 1這組指令的功能是將操作數(shù)所指定單元的內(nèi)容加1。n345 減減1指令指令 DEC A ;A (A)-1 DEC direct ;di
36、rect (direct)-1 DEC Rn ;Rn (Rn)-1 DEC Ri ;Ri (Ri)-1這組指令的功能是將操作數(shù)所指定單元的內(nèi)容減1。加1、減1指令均不影響PSW中的OV、CY、AC標(biāo)志。n346 乘、除法指令乘、除法指令 1乘法指令乘法指令 MUL AB ;BA(A)(B)n指令功能:把累加器A和寄存器B中的兩個(gè)8位無符號(hào)數(shù)相乘,所得所得16位乘積的低位乘積的低8位放在位放在A中,高中,高8位放在位放在B中中。n乘法指令執(zhí)行后會(huì)影響三個(gè)標(biāo)志:n若乘積小于FFH(即B的內(nèi)容為0),則OV=0,否則OV=1。CY=0,奇偶標(biāo)志P仍按A中1的奇偶性來確定。n例例3-12 已知(A)=
37、80H,(B)=32H, 執(zhí)行指令 MUL ABn結(jié)果:(A)=00H,(B)=19H,OV=1,CY=O,P=0。n2除法指令除法指令 DIV AB ;A(A)(B)之商, B(A)(B)之余數(shù)n功能:對(duì)兩個(gè)8位無符號(hào)數(shù)進(jìn)行除法運(yùn)算。其中被被除數(shù)存放在累加器除數(shù)存放在累加器A中,除數(shù)存放在寄存器中,除數(shù)存放在寄存器B中中。執(zhí)行后,商存于累加器商存于累加器A中,余數(shù)存于寄存器中,余數(shù)存于寄存器B中中。除法指令執(zhí)行后也影響三個(gè)標(biāo)志:若除數(shù)為0(即B=0)時(shí),OV=1,表示除法沒有意義;若除數(shù)不為0,則OV=0,表示除法正常進(jìn)行。nCY=0,奇偶標(biāo)志P仍按A中1的奇偶性來確定。n例例3-13 已知
38、:(A)=87H(135D),(B)=0CH(12D), 執(zhí)行指令 DIV AB結(jié)果(A)=0BH,(B)=03H,OV=0,CY=O,P=1。 n347 十進(jìn)制調(diào)整指令十進(jìn)制調(diào)整指令格式: DA An功能:對(duì)A中剛進(jìn)行的兩個(gè)BCD碼的加法結(jié)果自動(dòng)進(jìn)行修正。該指令只影響進(jìn)位標(biāo)志CY。n所謂BCD碼就是采用四位二進(jìn)制編碼表示的十進(jìn)制數(shù)。四位二進(jìn)制數(shù)共有十六個(gè)編碼,BCD碼是取它前十個(gè)的編碼00001001來代表十進(jìn)制數(shù)的09,這種編碼簡(jiǎn)稱為BCD碼。n如果兩個(gè)BCD碼數(shù)相加,結(jié)果也是BCD碼,則該加法運(yùn)算稱為BCD碼加法。在單片機(jī)中沒有專門的BCD碼加法指令,要進(jìn)行要進(jìn)行BCD碼加法運(yùn)算,也要碼
39、加法運(yùn)算,也要使用加法指令使用加法指令A(yù)DD或或ADDC。然而計(jì)算機(jī)在執(zhí)行ADD或ADDC指令時(shí),是按照二進(jìn)制規(guī)則進(jìn)行的,對(duì)于4位二進(jìn)制數(shù)是按逢16進(jìn)位,而BCD碼是逢十進(jìn)位的,二者存在進(jìn)位差。因此用ADD或ADDC指令進(jìn)行BCD碼相加時(shí),可能會(huì)出現(xiàn)錯(cuò)誤。使用DA A能對(duì)運(yùn)算結(jié)果自動(dòng)進(jìn)行修正。使用方法使用方法:在上述加法指令后面緊跟一條在上述加法指令后面緊跟一條DA A指令。指令。n例例3-14 試編寫程序,實(shí)現(xiàn)95+59的BCD碼加法,并將結(jié)果存入30H、31H單元。 MOV A ,#95H ;95的BCD碼數(shù)送A中 ADD A ,#59H ;兩個(gè)BCD碼相加,結(jié)果在A中 DA A ;對(duì)相加
40、結(jié)果進(jìn)行十進(jìn)制調(diào)整 MOV 30H ,A ;十位個(gè)位的BCD碼之和送30H MOV A ,#00H ;A清0 ADDC A ,#00H ;加進(jìn)位(百位的BCD碼) DA A ;BCD碼相加后,用調(diào)整指令 MOV 31H ,A ;存進(jìn)位n第一次執(zhí)行DA A指令的結(jié)果:A=54H,CY=1,n最終結(jié)果:(31H)=01H,(30H)=54H。n若要進(jìn)行BCD碼減法運(yùn)算,也應(yīng)該進(jìn)行調(diào)整,但不存在十進(jìn)制減法調(diào)整指令,因此可將減法改為可將減法改為加法加法:加減數(shù)的補(bǔ)數(shù)。n兩位十進(jìn)制數(shù)是對(duì)100取補(bǔ)的.n例如減法 60-30=30,也可以改為補(bǔ)數(shù)相加:n60+(100-30)=130 去掉進(jìn)位,就能得到正
41、確的結(jié)果。n例例3-15 編寫程序?qū)崿F(xiàn)十進(jìn)制減法,計(jì)算87-38。 CLR C ;減法之前,先清CY位 MOV A ,#9AH ;9AH(即100)送A中 SUBB A , #38H ;做減法,38的補(bǔ)數(shù)送A中 ADD A ,#87H ;38的補(bǔ)數(shù)與87做加法, DA A ;對(duì)相加結(jié)果進(jìn)行調(diào)整。分析: 減數(shù)求補(bǔ)數(shù) 與被減數(shù)相加 1 0 0 1 1 0 1 0 0 1 1 0 0 0 1 0 -) 0 0 1 1 1 0 0 0 +) 1 0 0 0 0 1 1 1 0 1 1 0 0 0 1 0 1 1 1 0 1 0 0 1 十進(jìn)制調(diào)整 1 1 1 0 1 0 0 1 +) 0 1 1 0
42、0 0 0 0 1 0 1 0 0 1 0 0 1去掉進(jìn)位,取調(diào)整結(jié)果的低8位,即得結(jié)果為十進(jìn)制數(shù)49,顯然是正確的結(jié)果 邏輯運(yùn)算的特點(diǎn):按位進(jìn)行操作。 邏輯運(yùn)算包括與、或、異或三種,此外還有移位指令以及對(duì)累加器A清零和求反指令。n351 邏輯與運(yùn)算指令邏輯與運(yùn)算指令 ANL A ,#data ;A (A)data ANL A ,direct ;A (A)(direct) ANL A ,Rn ;A (A)(Rn) ANL A ,Ri ;A (A)((Ri)) ANL direct ,A ;direct (direct)(A) ANL direct ,#data ;direct (direct)
43、datan指令應(yīng)用:用于將某些位屏蔽(即使之為0)。n方法是:將要屏蔽的位和方法是:將要屏蔽的位和“0”相與,相與,n 保留不變的位同保留不變的位同“1”相與。相與。 35 邏輯運(yùn)算及移位類指令邏輯運(yùn)算及移位類指令n352 邏輯或運(yùn)算指令邏輯或運(yùn)算指令 ORL A ,#data ;A (A)data ORL A ,direct ;A (A) (direct) ORL A ,Rn ;A (A) (Rn) ORL A ,Ri ;A (A) ((Ri)) ORL direct ,A ;direct (direct) (A) ORL direct ,#data ;direct (direct) dat
44、an指令應(yīng)用:用于將某些位置位(即使之為1)。n方法是:將要置位的位和將要置位的位和“1”相或,相或,n 要保留不變的位同要保留不變的位同“0”相或。相或。n353 邏輯異或運(yùn)算指令邏輯異或運(yùn)算指令 XRL A ,#data ;A (A)data XRL A ,direct ;A (A) ( direct) XRL A ,Rn ;A (A) (Rn) XRL A ,Ri ;A (A) ((Ri)) XRL direct ,A ;direct (direct) (A) XRL direct ,#data ;direct (direct) datan指令應(yīng)用:用于將某些位取反。n方法是:將需求反的
45、位同將需求反的位同“1”相異或,相異或,n 要保留的位同要保留的位同“0”相異或相異或。 v例例3-16 將累加器A的低4位送到P1口的低4位輸出,而 P1的高4位保持不變。v解:這種操作不能簡(jiǎn)單地用MOV指令實(shí)現(xiàn),而可以借助與、或邏輯運(yùn)算。編程如下: ANL A ,#0FH ;屏蔽A 的高4位,保留低4位 ANL P1 ,#0F0H ;屏蔽P1的低4位,保留高4位 ORL P1 ,A ;通過或運(yùn)算,完成所需操作v例例3-17 試編程,使內(nèi)部RAM 30H單元中的低2位清0,高2位置1,其余4位取反。v解:ANL 30H ,#0FCH ;30H單元中低2位清0 ORL 30H ,#0C0H ;
46、30H單元中高2位置1 XRL 30H ,#3CH ;30H單元中間4位變反n354累加器清零、取反指令累加器清零、取反指令n累加器清零指令: CLR A ;A 0n累加器按位取反指令: CPL A ;A ( )n清零和取反指令只有累加器A才有,它們都是一字節(jié)指令,如果用其他方式來達(dá)到清零或取反的目的,則都為二字節(jié)的指令。nMCS-51系列單片機(jī)只有對(duì)A的取反指令,沒有求補(bǔ)指令。若要進(jìn)行求補(bǔ)操作,可按“求反加1”來進(jìn)行。n以上所有的邏輯運(yùn)算指令,對(duì)CY、AC和OV標(biāo)志都沒有影響,只在涉及到累加器A時(shí),才會(huì)影響奇偶標(biāo)志P。An355 循環(huán)移位指令循環(huán)移位指令n移位指令只能對(duì)累加器A進(jìn)行移位,共有
47、循環(huán)左移、循環(huán)右移、帶進(jìn)位的循環(huán)左移和右移四種。n循環(huán)左移 RL A ;A i+1A i ,A 0 A 7n循環(huán)右移 RR A ;A i A i+1,A 7 A 0 n帶進(jìn)位循環(huán)左移 n RLC A ;A 0CY,A i+1 A i,CYA 7 n帶進(jìn)位循環(huán)右移 n RRC A ;A 7CY,A iA i+1,CYA 0 n前兩條指令的功能分別是將累加器A的內(nèi)容循環(huán)左移或右移一位;執(zhí)行后僅影響PSW中的P標(biāo)志;n后兩條指令的功能分別是將累加器A的內(nèi)容帶進(jìn)位帶進(jìn)位位位CY一起循環(huán)左移或右移一位;執(zhí)行后影響PSW中的進(jìn)位位CY和奇偶標(biāo)志位P。以上移位指令,可用圖形表示,如圖3-6 所示。舉例:舉例
48、:例例3-183-18:設(shè)(:設(shè)(A A)=08H=08H,分析下面程序執(zhí)行結(jié)果:,分析下面程序執(zhí)行結(jié)果:(1 1)RL A RL A ;A A的內(nèi)容左移一位,結(jié)果(的內(nèi)容左移一位,結(jié)果(A A)=10H=10H RL A RL A ;A A的內(nèi)容左移一位,結(jié)果(的內(nèi)容左移一位,結(jié)果(A A)=20H=20H RL A RL A ;A A的內(nèi)容左移一位,結(jié)果(的內(nèi)容左移一位,結(jié)果(A A)=40H=40H 即左移一位,相當(dāng)于原數(shù)乘即左移一位,相當(dāng)于原數(shù)乘2 2(原數(shù)小于(原數(shù)小于80H80H時(shí))。時(shí))。(2 2)RR A RR A ;A A的內(nèi)容右移一位,結(jié)果(的內(nèi)容右移一位,結(jié)果(A A)=
49、04H=04H RR A RR A ;A A的內(nèi)容右移一位,結(jié)果(的內(nèi)容右移一位,結(jié)果(A A)=02H =02H RR A RR A ;A A的內(nèi)容右移一位,結(jié)果(的內(nèi)容右移一位,結(jié)果(A A)=01H=01H 即右移一位,相當(dāng)于原數(shù)除即右移一位,相當(dāng)于原數(shù)除2 2(原數(shù)為偶數(shù)時(shí))。(原數(shù)為偶數(shù)時(shí))。36 控制轉(zhuǎn)移類指令控制轉(zhuǎn)移類指令n51系列單片機(jī)有比較豐富的控制轉(zhuǎn)移指令,包括無條件轉(zhuǎn)移指令、條件轉(zhuǎn)移指令和子程序調(diào)用及返回指令。這類指令的特點(diǎn):自動(dòng)改變PC的內(nèi)容,使程序發(fā)生轉(zhuǎn)移。n361 無條件轉(zhuǎn)移指令無條件轉(zhuǎn)移指令n有四條無條件轉(zhuǎn)移指令,提供了不同的轉(zhuǎn)移范圍。可使程序無條件地轉(zhuǎn)到指令所提
50、供的地址上去。n1長轉(zhuǎn)移指令 LJMP addr16 ;PC addr16n功能:把指令中給出的16位目的地址addr16送入程序計(jì)數(shù)器PC,使程序無條件轉(zhuǎn)移到addr16處執(zhí)行。n1616位地址可尋址位地址可尋址64KB ROM64KB ROM,故稱為長轉(zhuǎn)移指令,長轉(zhuǎn)移指令是是三字節(jié)指令,依次是操作碼、高8位地址、低8位地址。n 2絕對(duì)轉(zhuǎn)移指令 AJMP addr11 ;PC (PC) + 2, PC100addr11n這是一條二字節(jié)指令,其指令格式為: a10 a9 a8 0 0 0 0 1 a7 a6 a5 a4 a3 a2 a1 a0 n指令中提供了11位目的地址,其中 a7a0 在第
51、二字節(jié),a10a8 則占據(jù)第一字節(jié)的高3位,而00001是這條指令特有的操作碼,占據(jù)第一字節(jié)的低5位。n絕對(duì)轉(zhuǎn)移指令的執(zhí)行分為兩步:n第一步,取指令。此時(shí)PC自身加2指向下一條指令的起始地址(稱為PC當(dāng)前值)。n第二步,用指令中給出的11位地址替換PC當(dāng)前值的低11位,PC高5位保持不變,形成新的PC值即轉(zhuǎn)移的目的地址。n11位地址的范圍為0000000000011111111111,即可轉(zhuǎn)移的范圍是2KB。轉(zhuǎn)移可以向前也可以向后,如圖3-7 所示。但要注意轉(zhuǎn)移到的位置是與PC+2的地址在同一個(gè)2K區(qū)域,n例例3-19 分析下面絕對(duì)轉(zhuǎn)移指令的執(zhí)行情況。n1234H:AJMP 0781Hn分析:
52、分析:在指令執(zhí)行前,(PC)=1234H;取出該指令后,(PC)+2 形成PC當(dāng)前值,它等于1236H,即0 0 0 1 0 0 1 0 0 0 1 1 0 1 1 0 B,指令執(zhí)行過程:用指令給出的11位地址 1 1 1 1 0 0 0 0 0 0 1 B替換PC當(dāng)前值的低11位,即新的PC值為1781H,所以指令執(zhí)行結(jié)果就是轉(zhuǎn)移到1781H處執(zhí)行程序。 n應(yīng)注意:只有轉(zhuǎn)移的目的地址與PC當(dāng)前值在2K范圍之內(nèi)時(shí),才可使用AJMP指令,超出2K范圍,應(yīng)使用長轉(zhuǎn)移指令LJMP。n3 3短轉(zhuǎn)移指令短轉(zhuǎn)移指令 SJMP rel ;PC (PC) + 2,PC (PC) + rel SJMP是無條件相
53、對(duì)轉(zhuǎn)移指令,該指令為雙字節(jié),relrel是相對(duì)轉(zhuǎn)移偏移量。是相對(duì)轉(zhuǎn)移偏移量。指令的執(zhí)行分兩步完成:第一步,取指令。此時(shí)PC自身加2形成PC的當(dāng)前值。第二步,將PC當(dāng)前值與偏移量rel 相加形成轉(zhuǎn)移的目的地址送PC中。即:目的地址=(PC)+2 + relrel其范圍為128+127,這條指令的優(yōu)點(diǎn)是:指令給出的是相對(duì)轉(zhuǎn)移地址,不具體指出地址值。當(dāng)程序地址發(fā)生變化時(shí),只要相對(duì)地址不發(fā)生變化,該指令就不需要作任何改動(dòng)。v4變址尋址轉(zhuǎn)移指令變址尋址轉(zhuǎn)移指令(稱散轉(zhuǎn)指令、間接轉(zhuǎn)移指令) JMP A+DPTR ;PC (A)+(DPTR) v指令的功能:把累加器A中的8位無符號(hào)數(shù)與基址寄存器DPTR中的
54、16位地址相加,所得的和作為目的地址送入PC。v該指令特點(diǎn):轉(zhuǎn)移地址可以在程序運(yùn)行中加以改變。例如,在DPTR中裝入多分支轉(zhuǎn)移指令表的首地址,而由累加器A中的內(nèi)容來動(dòng)態(tài)選擇應(yīng)轉(zhuǎn)向哪一條分支,實(shí)現(xiàn)由一條指令完成多分支轉(zhuǎn)移的功能。v例例3-20 設(shè)累加器A中存有用戶從鍵盤輸入的鍵值03,鍵處理程序分別存放在KPRG0、KPRG1、KPRG2、KPRG3位置處,試編寫程序:根據(jù)用戶輸入的鍵值,轉(zhuǎn)入相應(yīng)的鍵處理程序。nMOV DPTR,#JPTAB ;轉(zhuǎn)移指令表首地址送DPTR RL A ;鍵值2,AJMP指令占2個(gè)字節(jié) JMP A+DPTR ;JPTAB+2鍵值,和送PC中,則程序轉(zhuǎn)移到表中某一位置
55、去執(zhí)行AJMP指令JPTAB:AJMP KPRG0 AJMP KPRG1 AJMP KPRG2 AJMP KPRG3 KPRG0: KPRG1: KPRG2: KPRG3: n362 條件轉(zhuǎn)移指令條件轉(zhuǎn)移指令n條件轉(zhuǎn)移指令是指當(dāng)某種條件滿足時(shí),轉(zhuǎn)移才進(jìn)行;而條件不滿足時(shí),程序就按順序往下執(zhí)行。n條件轉(zhuǎn)移指令的共同特點(diǎn)是:(1)所有的條件轉(zhuǎn)移指令都屬于相對(duì)轉(zhuǎn)移指令,轉(zhuǎn)移范圍相同,都在以PC當(dāng)前值為基準(zhǔn)的256B范圍內(nèi)(-128+127);(2)計(jì)算轉(zhuǎn)移地址的方法相同: 轉(zhuǎn)移地址=PC當(dāng)前值 + rel 1累加器判零轉(zhuǎn)移指令 JZ rel ;若(A)=0,則轉(zhuǎn)移,PC (PC)+2 + rel ;
56、若(A)0,按順序執(zhí)行,PC (PC)+2 JNZ rel ;若(A) 0,則轉(zhuǎn)移,PC (PC)+2+ rel ;若(A)=0,按順序執(zhí)行,PC (PC)+2 2比較條件轉(zhuǎn)移指令比較條件轉(zhuǎn)移指令 CJNE A ,# data ,rel ;若(A)=data,則PC(PC)+3,CY0 若(A) data,則PC(PC)+3+rel ,CY0 若(A)(direct), 則PC(PC)+3+rel,CY0 若(A) data, 則PC(PC)+3+rel,CY0 若(Rn) data,則PC(PC)+3+rel,CY0若(Ri)data, 則PC(PC)+3+rel,CY1n在使用CJNE指令
57、時(shí)應(yīng)注意以下幾點(diǎn):n(1) 比較條件轉(zhuǎn)移指令都是三字節(jié)指令,nPC當(dāng)前值=PC+3(PC是該指令所在地址),n轉(zhuǎn)移的目的地址=PC+3+rel。n(2) 比較操作實(shí)際就是作減法操作,只是不保存減法所得到的差而將結(jié)果反映在標(biāo)志位CY上。n(3) CJNE指令將參與比較的兩個(gè)操作數(shù)當(dāng)作無符號(hào)數(shù)看待、處理并影響CY標(biāo)志。因此CJNE指令不能直接用于有符號(hào)數(shù)大小的比較。n若進(jìn)行兩個(gè)有符號(hào)數(shù)大小的比較,則應(yīng)依據(jù)符號(hào)位和CY位進(jìn)行判別比較。n3減減1條件轉(zhuǎn)移指令條件轉(zhuǎn)移指令n DJNZ Rn ,rel ;Rn (Rn)1 若(Rn) 0, 則轉(zhuǎn)移,PC(PC)+2+rel 若(Rn)=0, 按順序執(zhí)行,P
58、C(PC)+2 nDJNZ direct ,rel ;direct (direct)1 若(direct)0,則轉(zhuǎn)移, PC(PC)+3+rel 若(direct)=0,按順序執(zhí)行, PC(PC)+3n第一條為二字節(jié)指令,第二條為三字節(jié)指令。n這兩條指令對(duì)于構(gòu)成循環(huán)程序十分有用這兩條指令對(duì)于構(gòu)成循環(huán)程序十分有用,使用中可以指定任何一個(gè)工作寄存器或者內(nèi)部RAM單元為計(jì)數(shù)器。對(duì)計(jì)數(shù)器賦以初值以后,就可以利用上述指令對(duì)計(jì)數(shù)器進(jìn)行減1,不為零就進(jìn)入循環(huán)操作,為零就結(jié)束循環(huán),從而構(gòu)成循環(huán)程序。n例例3-21 試編寫程序,將內(nèi)部RAM以DATA為起始地址的10個(gè)單元中的數(shù)據(jù)求和,并將結(jié)果送入SUM單元。設(shè)
59、和不大于255。n解:對(duì)一組連續(xù)存放的數(shù)據(jù)進(jìn)行操作時(shí),一般都采用間接尋址,使用INC指令修改地址,可使編程簡(jiǎn)單,利用減1條件轉(zhuǎn)移指令很容易編成循環(huán)程序來完成10個(gè)數(shù)相加。 MOV R0,#DATA ;首地址送間址寄存器R0 MOV R7,#0AH ;計(jì)數(shù)器R7送入計(jì)數(shù)初值 CLR A ;累加器A作累加和,先清0LP:ADD A,R0 ;加一個(gè)數(shù) INC R0 ;地址加1,指向下一地址單元 DJNZ R7,LP ;計(jì)數(shù)值減1不為零循環(huán) MOV SUM,A ;累加和存入指定單元 SJMP $ ;結(jié)束n例例3-22 將外部RAM的一個(gè)數(shù)據(jù)塊傳送到內(nèi)部RAM,兩者的首地址分別為DATA1和DATA2,
60、遇到傳送的數(shù)據(jù)為“$”字符,停止傳送。 MOV DPTR ,#DATA1 ;外部數(shù)據(jù)塊首地址送DPTR MOV R1 ,#DATA2 ;內(nèi)部數(shù)據(jù)塊首地址送R1LP:MOVX A ,DPTR ;從外部RAM取數(shù)送入ACJNE A,#24H,LP1 ;與 $的ASC碼比較,不相等轉(zhuǎn)LP1: SJMP LP2 ;相等,轉(zhuǎn)LP2LP1:MOV R1 ,A ;不是 $ 字符,執(zhí)行傳送 INC DPTR ;修改源地址指針 INC R1 ;修改目的地址指針 SJMP LP ;轉(zhuǎn)傳送下一個(gè)數(shù)據(jù)LP2: SJMP $ ;結(jié)束n以上條件轉(zhuǎn)移指令都是相對(duì)轉(zhuǎn)移指令,轉(zhuǎn)移的范圍有限;若要在大范圍內(nèi)實(shí)現(xiàn)條件轉(zhuǎn)移,可將條件
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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年華東師大版高三歷史下冊(cè)月考試卷含答案
- 2025年度木門產(chǎn)品售后服務(wù)與客戶滿意度調(diào)查合同3篇
- 二零二五版綠色生態(tài)泥水工程分包合同(含雨水收集利用)4篇
- 二零二五版智能安防設(shè)備安裝與安全評(píng)估合同3篇
- 護(hù)士勞動(dòng)合同(2篇)
- 拆房簡(jiǎn)單合同(2篇)
- 二零二五年度廚師職業(yè)培訓(xùn)合作合同3篇
- 2025年度土地整治與生態(tài)修復(fù)項(xiàng)目承包合同3篇
- 2025年度摩托車整車出口貿(mào)易合同8篇
- 武漢2025年汽車租賃車輛保養(yǎng)合同范本
- 道路瀝青工程施工方案
- 《田口方法的導(dǎo)入》課件
- 內(nèi)陸?zhàn)B殖與水產(chǎn)品市場(chǎng)營銷策略考核試卷
- 醫(yī)生給病人免責(zé)協(xié)議書(2篇)
- 公司沒繳社保勞動(dòng)仲裁申請(qǐng)書
- 損傷力學(xué)與斷裂分析
- 2024年縣鄉(xiāng)教師選調(diào)進(jìn)城考試《教育學(xué)》題庫及完整答案(考點(diǎn)梳理)
- 車借給別人免責(zé)協(xié)議書
- 應(yīng)急預(yù)案評(píng)分標(biāo)準(zhǔn)表
- “網(wǎng)絡(luò)安全課件:高校教師網(wǎng)絡(luò)安全與信息化素養(yǎng)培訓(xùn)”
- 鋰離子電池健康評(píng)估及剩余使用壽命預(yù)測(cè)方法研究
評(píng)論
0/150
提交評(píng)論