版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、l3.1 .1 匯編語(yǔ)言匯編語(yǔ)言l匯編語(yǔ)言是用助記符、符號(hào)和數(shù)字等來(lái)表示指令的程序語(yǔ)言。匯編語(yǔ)言是用助記符、符號(hào)和數(shù)字等來(lái)表示指令的程序語(yǔ)言。l機(jī)器語(yǔ)言是用二進(jìn)制編碼來(lái)表示的。機(jī)器語(yǔ)言是用二進(jìn)制編碼來(lái)表示的。l89C51單片機(jī)是單片機(jī)是8位機(jī),其機(jī)器語(yǔ)言以位機(jī),其機(jī)器語(yǔ)言以8位二進(jìn)制碼為單位位二進(jìn)制碼為單位(一個(gè)字節(jié))。(一個(gè)字節(jié))。89C51指令有:?jiǎn)巫止?jié)、雙字節(jié)或三字節(jié)指指令有:?jiǎn)巫止?jié)、雙字節(jié)或三字節(jié)指令。令。例:“10+20”匯編語(yǔ)言程序 機(jī)器語(yǔ)言程序MOV A,#0AH 74 0AHADD A,#14H 24 14H機(jī)器語(yǔ)言程序(機(jī)器碼,或稱為機(jī)器語(yǔ)言程序(機(jī)器碼,或稱為“代碼代碼”)
2、通過(guò)某種方法)通過(guò)某種方法存放在存放在ROM中。中。l89C51匯編語(yǔ)言指令組成:匯編語(yǔ)言指令組成:操作碼操作碼 +操作數(shù)操作數(shù)l格式:格式: 操作碼操作碼目的操作數(shù)目的操作數(shù) ,源操作數(shù),源操作數(shù)l例:例: MOV A,#13H 標(biāo)號(hào)段標(biāo)號(hào)段-由用戶定義的符號(hào)組。標(biāo)號(hào)段可有可無(wú)。若一條指令中由用戶定義的符號(hào)組。標(biāo)號(hào)段可有可無(wú)。若一條指令中 有標(biāo)號(hào)段,標(biāo)號(hào)代表該指令的第有標(biāo)號(hào)段,標(biāo)號(hào)代表該指令的第1個(gè)字節(jié)所存放的存儲(chǔ)個(gè)字節(jié)所存放的存儲(chǔ) 器單元的地址,故標(biāo)號(hào)又稱為符號(hào)地址,在匯編時(shí),把器單元的地址,故標(biāo)號(hào)又稱為符號(hào)地址,在匯編時(shí),把 該地址賦值給標(biāo)號(hào)。該地址賦值給標(biāo)號(hào)。 操作碼操作碼-規(guī)定指令所
3、實(shí)現(xiàn)的操作功能,由規(guī)定指令所實(shí)現(xiàn)的操作功能,由25個(gè)英文字母表示。個(gè)英文字母表示。操作數(shù)操作數(shù)-指出了參與操作的數(shù)據(jù)來(lái)源和操作結(jié)果存放的目的單元。指出了參與操作的數(shù)據(jù)來(lái)源和操作結(jié)果存放的目的單元。 操作數(shù)可以是:一個(gè)常數(shù)(立即數(shù));一個(gè)數(shù)據(jù)所在的操作數(shù)可以是:一個(gè)常數(shù)(立即數(shù));一個(gè)數(shù)據(jù)所在的地址,即在執(zhí)行指令時(shí)從指定的地址中取出操作數(shù)。地址,即在執(zhí)行指令時(shí)從指定的地址中取出操作數(shù)。 操作碼和操作數(shù)都有相對(duì)應(yīng)的二進(jìn)制代碼(即機(jī)器碼)。指令操作碼和操作數(shù)都有相對(duì)應(yīng)的二進(jìn)制代碼(即機(jī)器碼)。指令代碼由若干字節(jié)組成。代碼由若干字節(jié)組成。l注釋段注釋段-可有可無(wú)。加入注釋段的目的是便于閱讀。在閱可有可
4、無(wú)。加入注釋段的目的是便于閱讀。在閱讀讀 程序,尤其是在調(diào)試程序時(shí)會(huì)帶來(lái)很多方便。程序,尤其是在調(diào)試程序時(shí)會(huì)帶來(lái)很多方便。l不同的指令,指令的字節(jié)數(shù)也不同。在不同的指令,指令的字節(jié)數(shù)也不同。在89C5189C51指令指令系統(tǒng)中,有系統(tǒng)中,有單字節(jié)(一字節(jié))、雙字節(jié)或單字節(jié)(一字節(jié))、雙字節(jié)或3 3字節(jié)指字節(jié)指令令。第一個(gè)字節(jié)第一個(gè)字節(jié)第二個(gè)字節(jié)第二個(gè)字節(jié)第三個(gè)字節(jié)第三個(gè)字節(jié)單字節(jié)指令單字節(jié)指令操作碼操作碼雙字節(jié)指令雙字節(jié)指令操作碼操作碼操作數(shù)操作數(shù)三字節(jié)指令三字節(jié)指令操作碼操作碼操作數(shù)操作數(shù)操作數(shù)操作數(shù)1. 單字節(jié)(一字節(jié))指令單字節(jié)(一字節(jié))指令單字節(jié)指令中的單字節(jié)指令中的8位二進(jìn)制代碼既包
5、含操作碼的信息,也包含位二進(jìn)制代碼既包含操作碼的信息,也包含操作數(shù)的信息。操作數(shù)的信息。 單字節(jié)指令又有二種情況:?jiǎn)巫止?jié)指令又有二種情況:記?。阂蛔止?jié)記住:一字節(jié)=8位二進(jìn)制數(shù)位二進(jìn)制數(shù)1). 指令碼中隱含著對(duì)某一個(gè)寄存器的操作指令碼中隱含著對(duì)某一個(gè)寄存器的操作例如,指令:例如,指令:INC DPTR“DPTR”是是“數(shù)據(jù)指針數(shù)據(jù)指針”,屬于,屬于“特殊功能寄存器特殊功能寄存器”。該條指令翻譯成機(jī)器碼為:該條指令翻譯成機(jī)器碼為:A3H。二進(jìn)制數(shù)為:。二進(jìn)制數(shù)為:1010 0011B。該機(jī)器碼是人為(芯片發(fā)明者)規(guī)定的,該機(jī)器碼是人為(芯片發(fā)明者)規(guī)定的,INTEL 51系列單片機(jī)系列單片機(jī)的指
6、令參見(jiàn)教材附錄的指令參見(jiàn)教材附錄A、B。2). 由指令碼中的由指令碼中的rrr三位的不同編碼指定某一個(gè)寄存器三位的不同編碼指定某一個(gè)寄存器例如,工作寄存器向累加器例如,工作寄存器向累加器A傳送數(shù)據(jù)指令:傳送數(shù)據(jù)指令:MOV A,Rn其指令格式(機(jī)器碼)為:其指令格式(機(jī)器碼)為:1110 1rrr2. 雙字節(jié)指令雙字節(jié)指令用一字節(jié)表示操作碼,另一字節(jié)表示操作數(shù)或操作數(shù)所在的地址。用一字節(jié)表示操作碼,另一字節(jié)表示操作數(shù)或操作數(shù)所在的地址。其格式為:其格式為:如:如:ADD A,#45H機(jī)器碼:機(jī)器碼:24H 45H問(wèn):該條指令占用問(wèn):該條指令占用ROM中幾個(gè)單元?中幾個(gè)單元?3. 3字節(jié)指令字節(jié)
7、指令一字節(jié)表示操作碼,另兩個(gè)字節(jié)為操作數(shù)。其格式為:一字節(jié)表示操作碼,另兩個(gè)字節(jié)為操作數(shù)。其格式為:如:如:MOV DPTR,#2100H機(jī)器碼:機(jī)器碼:90H 21H 00H尋址尋址-就是尋找就是尋找(或確定)(或確定)指令中指令中操作數(shù)操作數(shù)或或操作數(shù)所在的地址操作數(shù)所在的地址。尋址方式尋址方式-就是如何找到存放操作數(shù)的地址,并把操作數(shù)提就是如何找到存放操作數(shù)的地址,并把操作數(shù)提 取出來(lái)的方法。取出來(lái)的方法。尋址方式越多,計(jì)算機(jī)尋址能力越強(qiáng),但指令系統(tǒng)也就越復(fù)雜。尋址方式分為以下七種:尋址方式分為以下七種: 按功能分為以下五種:按功能分為以下五種:1 1、立即數(shù)尋址、立即數(shù)尋址 1 1、數(shù)
8、據(jù)傳送指令、數(shù)據(jù)傳送指令2 2、直接尋址、直接尋址 2 2、算術(shù)運(yùn)算指令、算術(shù)運(yùn)算指令3 3、寄存器尋址、寄存器尋址 3 3、邏輯運(yùn)算指令、邏輯運(yùn)算指令4 4、寄存器間接尋址、寄存器間接尋址 4 4、控制轉(zhuǎn)移類指令、控制轉(zhuǎn)移類指令5 5、相對(duì)尋址、相對(duì)尋址 5 5、位操作指令位操作指令6 6、變址尋址、變址尋址7 7、位尋址、位尋址l指令中常用符號(hào)說(shuō)明指令中常用符號(hào)說(shuō)明(P56P56)Rn當(dāng)前寄存器區(qū)的8個(gè)工作寄存器R0R7(n07);Ri當(dāng)前寄存器區(qū)可作地址寄存器的2個(gè)工作寄存器R0和R1(i0,1);direct8位內(nèi)部RAM單元的地址(即字節(jié)地址)及特殊功能寄存器的地址;#data表示8
9、位常數(shù)(立即數(shù));#datal6表示16位常數(shù);addr16表示16位地址;addrll表示11位地址;rel8位帶符號(hào)的地址偏移量。偏移范圍為-128+127。bit表示位地址;間接尋址寄存器或基址寄存器的前綴; / 位操作指令中,該位求反后參與操作,不影響該位;X 片內(nèi)RAM的直接地址或寄存器;(X) 相應(yīng)地址單元中的內(nèi)容;(X)表示X地址單元中的內(nèi)容; :箭頭左邊的內(nèi)容送入箭頭右邊的單元內(nèi)1、寄存器尋址、寄存器尋址 由指令指出寄存器組由指令指出寄存器組R0R7中某一個(gè)或其他寄存器中某一個(gè)或其他寄存器的內(nèi)容作為操作數(shù)。的內(nèi)容作為操作數(shù)。 如:1)、MOV A, R0 ;(R0) A 2)、
10、ADD A,R1 ;(A)+(R1) A 3)、MOV P1,A ;(A) P1口 操作數(shù)在寄存器中,如R0R7,A、B、Cy(位)、DPTR等。 在此寄存器中存放著在此寄存器中存放著真正的被操作對(duì)象真正的被操作對(duì)象。l例:例:“INC Rn” 指令的機(jī)器為:指令的機(jī)器為:0000 1rrr。 若若Rn為為R 3 時(shí),即時(shí),即 INC R3 ,則其機(jī)器碼為,則其機(jī)器碼為0000 1011。2、直接尋址直接尋址 指令中直接給出的操作數(shù)是片內(nèi)指令中直接給出的操作數(shù)是片內(nèi)RAM單元的的地單元的的地址。址。 如:MOV A,40H ;(40H) A ,即片內(nèi)即片內(nèi)RAM40H單元的內(nèi)容送入單元的內(nèi)容送
11、入A中中 使用使用 直接尋址方式可訪問(wèn)片內(nèi)直接尋址方式可訪問(wèn)片內(nèi)RAM的低的低128個(gè)單元及特殊個(gè)單元及特殊功能寄存器(功能寄存器(SFR)。)。 對(duì)對(duì)SFR,既可使用其字節(jié)地址,也可使用其名字。,既可使用其字節(jié)地址,也可使用其名字。 如:如: MOV A , P0 ; (P0) A P0口的字節(jié)地址為口的字節(jié)地址為80H,故上條指令又可寫成:,故上條指令又可寫成: MOV A, 80H ; (80H) A 3、立即數(shù)尋址、立即數(shù)尋址 操作碼后面緊跟的是一字節(jié)或兩字節(jié)操作數(shù)。操作碼后面緊跟的是一字節(jié)或兩字節(jié)操作數(shù)。 用用“#” 表示,以區(qū)別直接地址。表示,以區(qū)別直接地址。 如:如:MOV A,
12、 #40H ;40H A 該指令與該指令與“MOV A,40H”有何區(qū)別?有何區(qū)別?89C51中只有一條要求操作碼后面兩字節(jié)立即數(shù)的指令:中只有一條要求操作碼后面兩字節(jié)立即數(shù)的指令: MOV DPTR, #datal6例:例:MOV DPTR,#2100H ;2100H DPTR 其機(jī)器碼為:其機(jī)器碼為:90 21 00H4、寄存器間接尋址、寄存器間接尋址 操作數(shù)的地址事先存放在某個(gè)寄存器中,然后把操作數(shù)的地址事先存放在某個(gè)寄存器中,然后把 這個(gè)寄存器中的內(nèi)容作為地址,由該地址所指定這個(gè)寄存器中的內(nèi)容作為地址,由該地址所指定 的單元內(nèi)容作為操作數(shù)。的單元內(nèi)容作為操作數(shù)。 89C51規(guī)定規(guī)定用用
13、R0或或R1作為間接尋址寄存器,可尋址片內(nèi)作為間接尋址寄存器,可尋址片內(nèi)RAM低位地低位地址的址的128字節(jié)單元內(nèi)容;字節(jié)單元內(nèi)容; 用用DPTR(數(shù)據(jù)指針)作為間接寄存器,尋址數(shù)據(jù)指針)作為間接寄存器,尋址片外片外RAM(數(shù)據(jù)存儲(chǔ)器)的數(shù)據(jù)存儲(chǔ)器)的64KB空間,但不能用這種尋址方法尋址特殊空間,但不能用這種尋址方法尋址特殊功能寄存器(功能寄存器(SFR)。)。如如: MOV A,R0 MOVX A,DPTR操作數(shù)在片操作數(shù)在片內(nèi)內(nèi)RAMRAM中中操作數(shù)在操作數(shù)在片外片外RAMRAM中中例如:將片內(nèi)例如:將片內(nèi)RAM 65H單元的內(nèi)容單元的內(nèi)容47H送送A。其中其中R0中的內(nèi)容為中的內(nèi)容為6
14、5H。 程序如下:程序如下: MOV R0,#65H ;65H (R0R0) MOV 65H,#47H ;47H (6565H H) MOV A,R0 ;(;(R0) A A使用使用“MOV A,Ri”時(shí)時(shí) R0或或R1要先賦值。要先賦值。5 5、變址尋址、變址尋址( (基址寄存器基址寄存器+ +變址寄存器尋址變址寄存器尋址) ) 以以DPTR或或PC為基址寄存器,以為基址寄存器,以A為變址寄存器(為變址寄存器(A中的中的內(nèi)容為無(wú)符號(hào)數(shù)),把兩者內(nèi)容相加(形成的內(nèi)容為無(wú)符號(hào)數(shù)),把兩者內(nèi)容相加(形成的16位地址)位地址)作為操作數(shù)的地址。作為操作數(shù)的地址。 用變址尋址方式用變址尋址方式只能訪問(wèn)
15、只能訪問(wèn)ROM(從(從ROM中讀取數(shù)據(jù)),中讀取數(shù)據(jù)),訪問(wèn)范圍:訪問(wèn)范圍:64KB。 例:例: MOVC A, A+DPTR ;(;(A)+(DPTR) A 變址尋址方式常用于查表操作。變址尋址方式常用于查表操作。使用該指令時(shí),使用該指令時(shí), DPTR要先賦值。這個(gè)數(shù)值一般要先賦值。這個(gè)數(shù)值一般稱為表的首地址。稱為表的首地址。E0A程序存儲(chǔ)區(qū)2040H 9320E0H 472041H DPH 20DPL 00ALU20E0H47指令代碼例如: 2040H:MOVC A,A+DPTR 設(shè)DPTR=2000H,A=0E0H機(jī)器碼為機(jī)器碼為:93HPC6 6、相對(duì)尋址、相對(duì)尋址將將PCPC中的當(dāng)前
16、內(nèi)容與指令中的當(dāng)前內(nèi)容與指令第二字節(jié)給出的數(shù)第二字節(jié)給出的數(shù)相加,結(jié)果作為跳相加,結(jié)果作為跳轉(zhuǎn)指令的轉(zhuǎn)移地址(轉(zhuǎn)移目的地址)。轉(zhuǎn)指令的轉(zhuǎn)移地址(轉(zhuǎn)移目的地址)。PCPC中的中的當(dāng)前當(dāng)前內(nèi)容稱為內(nèi)容稱為基基地址地址(本指令后的字節(jié)地址)指令第二字節(jié)給出的數(shù)據(jù)稱為(本指令后的字節(jié)地址)指令第二字節(jié)給出的數(shù)據(jù)稱為偏偏移量移量( (rel)rel),1 1字節(jié)帶符號(hào)數(shù)字節(jié)帶符號(hào)數(shù). . 常用于跳轉(zhuǎn)指令。常用于跳轉(zhuǎn)指令。 如如: : JC 23H ;JC 23H ;若若Cy=0Cy=0,不跳轉(zhuǎn);不跳轉(zhuǎn); Cy=1Cy=1,跳轉(zhuǎn)跳轉(zhuǎn)改變PC程序存儲(chǔ)區(qū)ALU如:1000H: JC 23H;若若Cy=0,不跳
17、轉(zhuǎn);不跳轉(zhuǎn); Cy=1,向前跳轉(zhuǎn)向前跳轉(zhuǎn)23H個(gè)單個(gè)單元元1025H1000H 401025H 451001H 23 1024H 471002H 3023H1002H指令代碼當(dāng)前PC其機(jī)器碼為:其機(jī)器碼為:40 2340 23H H地址共共23H個(gè)單元個(gè)單元PC目的地址目的地址 = = 源地址源地址 + 2 + 2(相對(duì)轉(zhuǎn)移指令字節(jié)數(shù))(相對(duì)轉(zhuǎn)移指令字節(jié)數(shù))+ + relrel相對(duì)轉(zhuǎn)移分為相對(duì)轉(zhuǎn)移分為正向跳轉(zhuǎn)正向跳轉(zhuǎn)和和反向跳轉(zhuǎn)反向跳轉(zhuǎn)。正向跳轉(zhuǎn)時(shí):正向跳轉(zhuǎn)時(shí): rel = rel = 目的地址目的地址 源地址源地址 2 2反向跳轉(zhuǎn)時(shí):反向跳轉(zhuǎn)時(shí):rel = FEH rel = FEH 地址差
18、地址差7 7、位尋址、位尋址對(duì)片內(nèi)對(duì)片內(nèi)RAMRAM的的位尋址區(qū)位尋址區(qū)和某些可和某些可位尋址位尋址的特殊功能寄存器進(jìn)行的特殊功能寄存器進(jìn)行位操作時(shí)的尋址方式。位操作時(shí)的尋址方式。 如如: : SETB 3DH; SETB 3DH; 將將2727H.5H.5位置位置1 1 CLR C CLR C ;CyCy位清位清0 0操作數(shù)在片內(nèi)RAM位地址區(qū)或SFR某些位中 MCS-51指令系統(tǒng)分為五大類指令系統(tǒng)分為五大類l數(shù)據(jù)傳送指令(數(shù)據(jù)傳送指令(28條)條)l算術(shù)運(yùn)算指令(算術(shù)運(yùn)算指令(24條)條)l邏輯運(yùn)算及移位指令(邏輯運(yùn)算及移位指令(25條)條)l控制轉(zhuǎn)移指令(控制轉(zhuǎn)移指令(17條)條)l位操
19、作指令或布爾操作(位操作指令或布爾操作(17條)條) 共共111條指令。條指令。l傳送傳送-把源地址單元的內(nèi)容傳送到目的地把源地址單元的內(nèi)容傳送到目的地址單元中去址單元中去,而源地址單元的內(nèi)容不變而源地址單元的內(nèi)容不變;或者或者源、目的單元內(nèi)容互換。源、目的單元內(nèi)容互換。傳送指令的助記符:傳送指令的助記符:“MOV”功能:功能:將源地址單元的內(nèi)容傳送到目的字節(jié),而將源地址單元的內(nèi)容傳送到目的字節(jié),而 源字節(jié)的內(nèi)容不變。源字節(jié)的內(nèi)容不變。1. 1. 以累加器以累加器A A為目的操作數(shù)的指令為目的操作數(shù)的指令 匯編指令格式匯編指令格式 操作操作 MOV A, data ; data A。 2字節(jié)指
20、令字節(jié)指令 機(jī)器碼:機(jī)器碼:74H dataH MOV A, Rn ; n=07, (Rn) A。 1字節(jié)指令字節(jié)指令 MOV A, Ri ; i=0,1 , (Ri) A。 1字節(jié)指令字節(jié)指令 MOV A, direct ; (direct) A ,direct為內(nèi)部為內(nèi)部RAM或或SFR地址。地址。 2字節(jié)指令字節(jié)指令上述操作會(huì)影響上述操作會(huì)影響PSW的內(nèi)容(即影響的內(nèi)容(即影響P標(biāo)志位)。標(biāo)志位)。例:執(zhí)行下列指令后,(例:執(zhí)行下列指令后,(A)=?MOV R0, #30HMOV 30H, #60HMOV A, R0(A)=?MOV Rn, A ; (A) Rn , n=07。 1字節(jié)指
21、令字節(jié)指令MOV Rn , direct ; (direct) Rn。 2字節(jié)指令字節(jié)指令MOV Rn ,data ; data Rn。 2字節(jié)指令字節(jié)指令例(A)=78H,(R5)=47H,(70H)=0F2H。寫出執(zhí)行下列指令的注釋。MOV R5,A ;(A) R5,(R5)=78HMOV R5,70H ;(70H) R5,(R5)=0F2HMOV R5,#0A3H ;0A3H R5,(R5)=0A3H注意:指令注意:指令“ MOV Rn,Rn”是非法指令!是非法指令!MOV direct, A ; (A) direct。 2字節(jié)指令字節(jié)指令MOV direct, Rn ; (Rn) di
22、rec t , n=07。 2字節(jié)指令字節(jié)指令MOV direct, Ri ; ( Ri ) ) direct , i=0,1。 2字節(jié)指令字節(jié)指令MOV direct1, direct 2 ; (direct2) direct1。 3字節(jié)指令字節(jié)指令MOV direct, #data ; data direct。 3字節(jié)指令字節(jié)指令例例1 1:MOV 20H,AMOV 20H,R1MOV 20H,30HMOV 20H,R1MOV 0A0H,#34HMOV P2,#34H例例2 2:MOV 78H,#80H機(jī)器碼:75 78 80H例3: MOV 78H,80H機(jī)器碼:85 80 78H注意注
23、意例例2 2、例例3 3的區(qū)的區(qū)別。別。MOV Ri, A ; (A) (Ri) ) ,i=0,1。 1字節(jié)指令字節(jié)指令MOV Ri , direct ; (direct) (Ri) )。 2字節(jié)指令字節(jié)指令MOV Ri ,data ; data (Ri) )。 2字節(jié)指令字節(jié)指令功能:把源操作數(shù)指定的內(nèi)容送入以R0或R1為地址指 針的片內(nèi)存儲(chǔ)單元中。例:例:MOV R0MOV R0,A AMOV R1MOV R1,20H20HMOV R0MOV R0,#34H#34H使用使用Ri時(shí),時(shí),R0或或R1要先賦值。要先賦值。如:如:MOV R0,#46HMOV R0,AMOV DPTR, #dat
24、a16 ; dataHDPH, dataLDPL ; 3字節(jié)指令字節(jié)指令DPTR-數(shù)據(jù)指針,為SFR中(DPH)、(DPL)例:例:MOV DPTRMOV DPTR,#1234H#1234H結(jié)果:結(jié)果:(DPHDPH)= =1212H H,(,(DPLDPL)= =3434H H。 例如:例如: MOV DPLMOV DPL,#12H #12H MOV DPH MOV DPH,#35H#35H 則就相當(dāng)于執(zhí)行:?則就相當(dāng)于執(zhí)行:?l例題例題1:l例題例題2:請(qǐng)判斷下列的請(qǐng)判斷下列的MCS-51單片機(jī)指令的書寫格式是否單片機(jī)指令的書寫格式是否有錯(cuò),若有,請(qǐng)說(shuō)明錯(cuò)誤原因。有錯(cuò),若有,請(qǐng)說(shuō)明錯(cuò)誤原因
25、。 MOV 50H,R3 MOVC A,R0+DPTR答案:答案: 間址寄存器不能使用間址寄存器不能使用R2R7。 MOVC A,R0+DPTR 。變址尋址方式中的間址。變址尋址方式中的間址 寄存器不可使用寄存器不可使用R0,只可使用,只可使用AMOVC A, A+DPTR ;先(先(PC)+ 1 PC,(A)+(DPTR) A MOVC A, A+PC ; 先(先(PC)+ 1 PC,后后(A)+(PC) A上面兩條指令均為:上面兩條指令均為: 1字節(jié)指令字節(jié)指令例例: (DPTR)=0300H, (A)02H ROM中中 (0302H)=55H執(zhí)行:執(zhí)行: MOVC A, A+DPTR結(jié)果
26、:結(jié)果:(A)=55H使用使用“MOVC A,A+DPTR”指令時(shí),指令時(shí), DPTR要先賦值。這個(gè)數(shù)值一般稱為表的首地址。要先賦值。這個(gè)數(shù)值一般稱為表的首地址。lP61.例:例:在在ROM中,數(shù)據(jù)表格為:中,數(shù)據(jù)表格為:執(zhí)行程序:執(zhí)行程序:1000H:MOV A,#0DH ;0DHA,查表的偏移量,查表的偏移量1002H:MOVC A,A+PC ;(;(0DH+1003H)A1003H:MOV R0,A ;(;(A)R0執(zhí)行完上述指令后的結(jié)果為:執(zhí)行完上述指令后的結(jié)果為:(A)=02H,(,(R0)=02H,(,(PC)=1004H。數(shù)據(jù)表格數(shù)據(jù)表格lP62.例:例:在在ROM中,數(shù)據(jù)表格為
27、:中,數(shù)據(jù)表格為:執(zhí)行程序:執(zhí)行程序:1000H:MOV A,#10H ;10HA,查表的偏移量,查表的偏移量1002H:PUSH DPH ;保護(hù)現(xiàn)場(chǎng);保護(hù)現(xiàn)場(chǎng)1004H:PUSH DPL1006H:MOV DPTR,#7000H ;表首地址;表首地址DPTR1009H:MOVC A,A+DPTR ;(;(10H+7000H)=(7010H)=02HA100AH:POP DPL ;恢復(fù)現(xiàn)場(chǎng);恢復(fù)現(xiàn)場(chǎng)100CH:POP DPH執(zhí)行后結(jié)果為:(執(zhí)行后結(jié)果為:(A)=02H,(,(PC)=100EH,(DPTR)=原值。原值。 地址地址 機(jī)器碼機(jī)器碼 源程序源程序 ORG 0050H0050 740
28、3 MOV A, #03H0052 83 MOVC A, A+PC0053 00 DB 00H0054 01 DB 01H0055 04 DB 04H0056 09 DB 09H0057 10 DB 10H0058 19 DB 19H0059 24 DB 24H 005A 31 DB 31H005B 40 DB 40H005C 51 DB 51H END“ORG”、“DB”為為偽指令。偽指令。P108執(zhí)行該程序段后:執(zhí)行該程序段后:(A)=09H。源程序源程序 ORG 0050H MOV A, #03H MOV DPTR,#TLV ;表首地址表首地址DPTR MOVC A, A+DPTR ;查
29、表查表 MOV R6,A SJMP $TLV:DB 00H, 01H, 04H, 09H, 10H DB 19H, 24H, 31H, 40H, 51H END表首地址表首地址MOVX A, DPTR ; (DPTR) A,地址范圍地址范圍64K MOVX A, Ri ; (Ri) A,地址范圍地址范圍0255上面兩條指令為上面兩條指令為”讀讀”。硬件自動(dòng)使。硬件自動(dòng)使RD引腳產(chǎn)生低電平,引腳產(chǎn)生低電平,WR引腳為高電平。引腳為高電平。 MOVX DPTR, A ; (A) (DPTR) MOVX Ri , A ; (A) (Ri) 上面兩條指令為上面兩條指令為”寫寫”。硬件自動(dòng)使。硬件自動(dòng)使
30、WR引腳產(chǎn)生低電平,引腳產(chǎn)生低電平,RD引腳下為高電平。引腳下為高電平。 以上四條指令均為以上四條指令均為:1字節(jié)指令字節(jié)指令 使用使用“MOVX A,DPTR”和和“MOVX DPTR ,A”指令時(shí),指令時(shí), DPTR要先賦值。這個(gè)數(shù)值一般稱為源首地址或目的首地址。要先賦值。這個(gè)數(shù)值一般稱為源首地址或目的首地址。說(shuō)明:說(shuō)明: 1.在MCS-51中,與外部存儲(chǔ)器RAMRAM打交道的只可以是累加器A A 。所有需要送入外部RAMRAM的數(shù)據(jù)必需要通過(guò)A A送去,而所有要讀入的外部RAMRAM中的數(shù)據(jù)也必需通過(guò)A A讀入。內(nèi)部RAM間可以直接進(jìn)行數(shù)據(jù)的傳遞,而外部則不行。2.2.要要“讀讀”或或“
31、寫寫”外部的外部的RAMRAM,當(dāng)然也必須要知道當(dāng)然也必須要知道RAMRAM的地址,對(duì)的地址,對(duì)“MOVX AMOVX A,DPTRDPTR”和和“MOVX MOVX DPTRDPTR,A A”兩條指令中,地址是被直接放在兩條指令中,地址是被直接放在DPTRDPTR中中的。的。 而而“MOVX AMOVX A,RiRi”和和“MOVX Ri,AMOVX Ri,A”兩條指兩條指令,由于令,由于RiRi(即即R0R0或或R1R1)只是只是8 8位的寄存器,所以位的寄存器,所以只提供低只提供低8 8位地址。高位地址。高8 8位地址由位地址由P2P2口來(lái)提供。口來(lái)提供。3.3.使用時(shí)應(yīng)先將要使用時(shí)應(yīng)先
32、將要“讀讀”或或“寫寫”的地址送入的地址送入DPTRDPTR或或RiRi中,然后再用中,然后再用“讀讀/ /寫寫”命令。命令。 請(qǐng)同學(xué)閱讀請(qǐng)同學(xué)閱讀“上機(jī)實(shí)驗(yàn)指導(dǎo)書上機(jī)實(shí)驗(yàn)指導(dǎo)書”實(shí)驗(yàn)一的程序!實(shí)驗(yàn)一的程序!例題例題2 2:將片外RAMRAM中某一單元(設(shè)為0100H單元)的數(shù)據(jù) 送入片內(nèi)RAMRAM的60H單元中,試編寫程序。例題例題3 3:將片內(nèi)RAMRAM中50H單元的數(shù)據(jù)送到片外RAMRAM的1060H單元 中,試編寫程序。例題例題1 1:將外部RAMRAM中某一單元(設(shè)為0100H單元)的數(shù)據(jù) 送入外部RAMRAM的另一個(gè)單元(設(shè)為0200H單元)中,試編 寫程序。 入棧指令入棧指令
33、 PUSH directPUSH direct ;先(先(SPSP)+1+1SPSP,后后( (direct) direct) (SP)(SP) 出棧指令出棧指令 POP direct POP direct ;先先 ((SP)(SP)) ( (direct) direct) , ,后(后(SPSP)-1 -1 ( SP SP)這兩條指令均為:這兩條指令均為:2 2字節(jié)指令。字節(jié)指令。第一條為第一條為壓入壓入指令,就是將指令,就是將directdirect中的內(nèi)容送入中的內(nèi)容送入堆棧堆棧中,第二中,第二條為條為彈出彈出指令,就是將指令,就是將堆棧堆棧中的內(nèi)容送回到中的內(nèi)容送回到directdir
34、ect中中例:例: MOV SPMOV SP,#5FH#5FH MOV A MOV A,#100#100 MOV B MOV B,#20#20 PUSH ACC PUSH ACC PUSH BPUSH B將將SPSP中的值加中的值加1 1,即變?yōu)椋醋優(yōu)?060H H,然后然后將將A A中的值送到中的值送到6060H H單元中,因此執(zhí)單元中,因此執(zhí)行完本條指令后,(行完本條指令后,(6060H H)=100=100,同,同樣,執(zhí)行樣,執(zhí)行PUSH BPUSH B時(shí),是將時(shí),是將SP+1SP+1,即即變?yōu)樽優(yōu)?161H H,然后將然后將B B中的值送入到中的值送入到6161H H單元中,即執(zhí)行完
35、本條指令后,單元中,即執(zhí)行完本條指令后,(6161H H)=20=20。堆棧的操作原則:先進(jìn)后出堆棧的操作原則:先進(jìn)后出字節(jié)交換指令字節(jié)交換指令XCH A , Rn ; (A) (Rn)。 1字節(jié)指令字節(jié)指令XCH A , direct ; (A) (direct)。 2字節(jié)指令字節(jié)指令XCH A , Ri ; (A) (Ri)。 1字節(jié)指令字節(jié)指令例: (A)=80H, (R7)=97H執(zhí)行:XCH A , R7結(jié)果:(A)=97H, (R7)=80H半半字節(jié)交換指令字節(jié)交換指令XCHD A, Ri ;(A)0-3 (Ri ) 0-3 )。 1字節(jié)指令字節(jié)指令例:(R0)=60H, (60H
36、)=3EH, (A)=59H執(zhí)行: XCHD A, R0結(jié)果:(A) 5E H (60H)39 H主要對(duì)主要對(duì)8 8位無(wú)符號(hào)數(shù);位無(wú)符號(hào)數(shù);也可用于帶符號(hào)數(shù)運(yùn)算。也可用于帶符號(hào)數(shù)運(yùn)算。 包括:加、減、乘、除、加包括:加、減、乘、除、加1 1、減、減1 1運(yùn)算指令運(yùn)算指令 影響影響PSWPSW有關(guān)位。有關(guān)位。復(fù)習(xí)復(fù)習(xí)-PSW寄存器寄存器Cy:進(jìn)位標(biāo)志位AC:輔助進(jìn)位標(biāo)志位F0: 供用戶使用的標(biāo)志位OV:溢出標(biāo)志位P:奇偶標(biāo)志位 A中數(shù)據(jù)的奇偶性。當(dāng)1的個(gè)數(shù)為奇數(shù),P=1,否則P=0。RS1 RS0 0 0 區(qū)0(地址:00H07H) 0 1 區(qū)1(地址:08H0FH) 1 0 區(qū)2(地址:10H
37、17H) 1 1 區(qū)3(地址:18H1FH)1.1.不帶進(jìn)位位的加法指令不帶進(jìn)位位的加法指令 ADD AADD A,#data #data ; (A) (A)dataAdataA。2 2字節(jié)指令字節(jié)指令A(yù)DD AADD A,direct direct ; (A) (A)(direct )A(direct )A。 2 2字節(jié)指令字節(jié)指令A(yù)DD AADD A,Rn Rn ; (A) (A)(Rn)A(Rn)A。 1 1字節(jié)指令字節(jié)指令A(yù)DD AADD A,Ri Ri ; (A)(A)(Ri)A(Ri)A。 1 1字節(jié)指令字節(jié)指令用途:將A中的值與源操作數(shù)所指內(nèi)容相加,最終結(jié) 果存在A中。lP65.
38、例3-1 設(shè)(設(shè)(A A)=0C3H=0C3H,(,(R0R0)=0AAH=0AAH。執(zhí)行指令:執(zhí)行指令:ADD AADD A,R0R0問(wèn):執(zhí)行指令后,問(wèn):執(zhí)行指令后,A A、R0R0、CYCY、ACAC和和OVOV的內(nèi)容是什么?的內(nèi)容是什么?問(wèn)題:?jiǎn)栴}:OVOV溢溢出是什么意出是什么意思?思?若認(rèn)為是補(bǔ)碼運(yùn)算,則運(yùn)算結(jié)果若認(rèn)為是補(bǔ)碼運(yùn)算,則運(yùn)算結(jié)果為為-61+(-86)=-147-61+(-86)=-147超出了補(bǔ)碼的超出了補(bǔ)碼的表示范圍表示范圍(-128(-128+127)+127)。負(fù)溢出。負(fù)溢出。也可以這樣理解:兩個(gè)負(fù)數(shù)相加,也可以這樣理解:兩個(gè)負(fù)數(shù)相加,而結(jié)果為正,出錯(cuò)。而結(jié)果為正,
39、出錯(cuò)。例:例:?jiǎn)纹瑱C(jī)上電復(fù)位后,單片機(jī)上電復(fù)位后,執(zhí)行下面的指令:執(zhí)行下面的指令: MOV AMOV A,#78H#78H MOV R0 MOV R0,#64H#64H ADD AADD A,RORO問(wèn):執(zhí)行該指令后:(問(wèn):執(zhí)行該指令后:(A A)= =?,(?,(R0R0)= =?,(?,(PSWPSW)= =?問(wèn)題:?jiǎn)栴}:OVOV溢溢出是什么意出是什么意思?思?若認(rèn)為是補(bǔ)碼運(yùn)算,則若認(rèn)為是補(bǔ)碼運(yùn)算,則運(yùn)算結(jié)果為運(yùn)算結(jié)果為+120+64=+220+120+64=+220超出了補(bǔ)超出了補(bǔ)碼的表示范圍碼的表示范圍(-128(-128+127)+127)。正溢出。正溢出。也可以這樣理解:兩個(gè)也可以
40、這樣理解:兩個(gè)正數(shù)相加,而結(jié)果為負(fù),正數(shù)相加,而結(jié)果為負(fù),出錯(cuò)。出錯(cuò)。l例如例如: 若若A=1101 0011B, (R1)=1110 1000B, 執(zhí)行指令執(zhí)行指令“ADD A, R1”時(shí)時(shí), 其算式表達(dá)為其算式表達(dá)為:相加后相加后(A)=1011 1011B(A)=1011 1011B。 若認(rèn)為是若認(rèn)為是無(wú)符號(hào)無(wú)符號(hào)相加相加, , 則則A A的值代的值代表十進(jìn)制數(shù)表十進(jìn)制數(shù)187187; 若認(rèn)為是若認(rèn)為是有符號(hào)數(shù)有符號(hào)數(shù)(補(bǔ)碼)相加(補(bǔ)碼)相加, , 則則A A的的值為十進(jìn)制值為十進(jìn)制-69-69。l在確定相加后進(jìn)位標(biāo)志在確定相加后進(jìn)位標(biāo)志CY的值時(shí)的值時(shí), 總是把兩個(gè)操作數(shù)作為總是把兩個(gè)
41、操作數(shù)作為無(wú)符號(hào)數(shù)無(wú)符號(hào)數(shù)直接相加而得出進(jìn)位直接相加而得出進(jìn)位CY值。值。 如上例中如上例中, 相加后相加后CY=1。 若為無(wú)符號(hào)數(shù)相加若為無(wú)符號(hào)數(shù)相加CY代表十進(jìn)制數(shù)代表十進(jìn)制數(shù)256, 但若是兩但若是兩個(gè)有符號(hào)數(shù)相加個(gè)有符號(hào)數(shù)相加, CY的值沒(méi)有意義。的值沒(méi)有意義。l在確定相加后溢出標(biāo)志在確定相加后溢出標(biāo)志OV的值時(shí)的值時(shí), 計(jì)算機(jī)總是把操作數(shù)計(jì)算機(jī)總是把操作數(shù)當(dāng)當(dāng)作帶符號(hào)數(shù)來(lái)對(duì)待作帶符號(hào)數(shù)來(lái)對(duì)待。 在作加法運(yùn)算時(shí)在作加法運(yùn)算時(shí), 一個(gè)正數(shù)和一個(gè)負(fù)數(shù)一個(gè)正數(shù)和一個(gè)負(fù)數(shù)相加是不可能產(chǎn)生溢出的相加是不可能產(chǎn)生溢出的, 只有兩個(gè)同符號(hào)數(shù)相加才有可能只有兩個(gè)同符號(hào)數(shù)相加才有可能產(chǎn)生溢出產(chǎn)生溢出,
42、表示運(yùn)算結(jié)果出錯(cuò)。表示運(yùn)算結(jié)果出錯(cuò)。l溢出標(biāo)志位溢出標(biāo)志位OV只有帶符號(hào)運(yùn)算時(shí)才有用。只有帶符號(hào)運(yùn)算時(shí)才有用。ADDC AADDC A,RnRn;(A)(A)(Rn)(Rn)CYACYA。 1 1字節(jié)指令字節(jié)指令A(yù)DDC AADDC A,directdirect ;(A)(A)(direct )(direct )CYACYA。 2 2字節(jié)指令字節(jié)指令A(yù)DDC AADDC A,RiRi;(A)(A)(Ri)(Ri)CYACYA。 1 1字節(jié)指令字節(jié)指令A(yù)DDC AADDC A,#data#data;(A)(A)#data#dataCYACYA。 2 2字節(jié)指令字節(jié)指令對(duì)標(biāo)志位的影響與對(duì)標(biāo)志位的影
43、響與ADD相同相同說(shuō)明:說(shuō)明:由于由于5151單片機(jī)是一種單片機(jī)是一種8 8位機(jī),所以只能做位機(jī),所以只能做8 8位的位的數(shù)學(xué)運(yùn)算,但數(shù)學(xué)運(yùn)算,但8 8位運(yùn)算的范圍只有位運(yùn)算的范圍只有0255,這在實(shí)際工,這在實(shí)際工作中是不夠的,因此就要進(jìn)行擴(kuò)展,一般是將作中是不夠的,因此就要進(jìn)行擴(kuò)展,一般是將2 2個(gè)個(gè)8 8位位( (兩字節(jié)兩字節(jié)) )的數(shù)學(xué)運(yùn)算合起來(lái),成為一個(gè)的數(shù)學(xué)運(yùn)算合起來(lái),成為一個(gè)1616位的運(yùn)算,位的運(yùn)算,這樣,可以表達(dá)的數(shù)的范圍就可以達(dá)到這樣,可以表達(dá)的數(shù)的范圍就可以達(dá)到065535。3. 3. 帶借位的減法指令帶借位的減法指令SUBB ASUBB A,RnRn ;(A)(A)(R
44、n)(Rn)CYACYA。 1 1字節(jié)指令字節(jié)指令SUBB ASUBB A,direct direct ;(A)(A)(direct )(direct )CYACYA。 2 2字節(jié)指令字節(jié)指令SUBB ASUBB A,RiRi ;( (A)A)(Ri)(Ri)CYACYA。 1 1字節(jié)指令字節(jié)指令SUBB ASUBB A,#data #data ;(A)(A)#data#dataCYACYA。 2 2字節(jié)指令字節(jié)指令若在使用若在使用“SUBB”指令前不知道指令前不知道“CY”值,則應(yīng)先將值,則應(yīng)先將“CY”清清“0”。lP66.例:例:3-3設(shè)累加器設(shè)累加器A的內(nèi)容為的內(nèi)容為0C9H,寄存器,
45、寄存器R2的內(nèi)容為的內(nèi)容為54H,進(jìn)位標(biāo),進(jìn)位標(biāo)志志CY=1。執(zhí)行指令。執(zhí)行指令“SUBB A,R2”的結(jié)果為(的結(jié)果為(A)=74H,CY=0,AC=0,OV=1。補(bǔ)碼,其真值為補(bǔ)碼,其真值為-55補(bǔ)碼,其真值為補(bǔ)碼,其真值為-56補(bǔ)碼,其真值為補(bǔ)碼,其真值為84補(bǔ)碼,其真值為補(bǔ)碼,其真值為116補(bǔ)碼時(shí):補(bǔ)碼時(shí):-55-1-(+84)=-140,超過(guò)了補(bǔ)碼表示的范圍,超過(guò)了補(bǔ)碼表示的范圍4.4.乘法指令乘法指令 MUL AB MUL AB ;(A)(A)(B)B(B)B15158 A A7 70 。 1字節(jié)指令字節(jié)指令 功能:功能:把累加器把累加器A A和寄存器和寄存器B B中的兩個(gè)中的兩個(gè)
46、8 8位無(wú)符號(hào)數(shù)相位無(wú)符號(hào)數(shù)相乘,所得乘,所得 16 16位積的低位積的低8 8位存放在位存放在A A中,積的高中,積的高8 8位存放在位存放在B B中。若中。若 乘積乘積00FFH(255)FFH(255),則則“OV”O(jiān)V”置置1 1;否則清;否則清0 0(即(即B B的內(nèi)容的內(nèi)容 為為0 0)。)。CYCY總是被清總是被清0 0。P66. 例例3-4(A)=4EH, (B)=5DH。執(zhí)行指令:。執(zhí)行指令:MUL AB 后,其結(jié)果是什后,其結(jié)果是什么?么?5.5.除法指令除法指令 DIV ABDIV AB ;A AB B的商的商A A,余數(shù)余數(shù)B B。 1字節(jié)指令字節(jié)指令 A A、B B的
47、內(nèi)容均為的內(nèi)容均為8 8位無(wú)符號(hào)整數(shù)。位無(wú)符號(hào)整數(shù)。CYCY和和OVOV均被清均被清0 0。若原(若原(B B)=00H=00H,則結(jié)果是無(wú)法確定的,用則結(jié)果是無(wú)法確定的,用OV=1OV=1表示,而表示,而CYCY仍仍為為0 0。P67. 例例3-5若(若(A)=0BFH,(,(B)=32H。執(zhí)行:。執(zhí)行:DIV AB 指令后,其指令后,其結(jié)果是什么?結(jié)果是什么?6.6.加加1 1指令指令 INC AINC A;(A)+1A(A)+1A,影響影響P P標(biāo)志。標(biāo)志。 1字節(jié)指令字節(jié)指令 INC Rn INC Rn;(Rn)+1Rn(Rn)+1Rn。 1字節(jié)指令字節(jié)指令 INC direct IN
48、C direct;(direct)+1(direct)(direct)+1(direct)。 2 2字節(jié)指令字節(jié)指令 INC Ri INC Ri;(Ri)+1(Ri)(Ri)+1(Ri)。 1字節(jié)指令字節(jié)指令 INC DPTR INC DPTR;(DPTR)+1DPTR(DPTR)+1DPTR。 1字節(jié)指令字節(jié)指令 若原單元的內(nèi)容為若原單元的內(nèi)容為FFHFFH,加加1 1后溢出為后溢出為0000H H。例:例:A=12HA=12H,R0=33HR0=33H,(21H)=32H(21H)=32H, (34H)=22H (34H)=22H,DPTR=1234HDPTR=1234H。連續(xù)執(zhí)行下面的指
49、令:連續(xù)執(zhí)行下面的指令: INC AINC A INC R0 INC R0 INC 21H INC 21H INC R0 INC R0 INC DPTR INC DPTR; A=13HA=13H; R0=34H R0=34H;(;(21H21H)=33H=33H;(;(34H34H)=23H=23H; DPTR=1235H DPTR=1235H7.7.減減1 1指令指令DEC ADEC A ;(;(A A)-1A,-1A,影響影響P P標(biāo)志。標(biāo)志。 1字節(jié)指令字節(jié)指令 DEC RnDEC Rn ;(;(RnRn)-1Rn-1Rn。 1字節(jié)指令字節(jié)指令 DEC directDEC direct
50、;(direct)-1direct(direct)-1direct。 2字節(jié)指令字節(jié)指令 DEC RiDEC Ri ;(;((Ri)(Ri))-1(Ri)-1(Ri)。 1字節(jié)指令字節(jié)指令 若原單元的內(nèi)容為若原單元的內(nèi)容為0000H H,減減1 1后溢出為后溢出為FFHFFH。8.8.十進(jìn)制調(diào)整指令十進(jìn)制調(diào)整指令 DA A DA A ;該指令的功能是對(duì)該指令的功能是對(duì)BCD碼的加法結(jié)果進(jìn)行調(diào)整,碼的加法結(jié)果進(jìn)行調(diào)整, 1字節(jié)指令字節(jié)指令 ;調(diào)整后的結(jié)果儲(chǔ)存在;調(diào)整后的結(jié)果儲(chǔ)存在A中中 該指令必須跟在該指令必須跟在ADDADD和和ADDCADDC指令之后,而且只能用于壓縮指令之后,而且只能用于壓
51、縮BCDBCD數(shù)數(shù)相加結(jié)果的調(diào)整(相加結(jié)果的調(diào)整(自動(dòng)修正)自動(dòng)修正)。 兩兩BCDBCD數(shù)相加后,經(jīng)本指令調(diào)整才能得到壓縮數(shù)相加后,經(jīng)本指令調(diào)整才能得到壓縮BCDBCD數(shù)的和的正確數(shù)的和的正確值。值。十進(jìn)制調(diào)整的修正方法為:十進(jìn)制調(diào)整的修正方法為:l 當(dāng)累加器低四位大于當(dāng)累加器低四位大于9或半進(jìn)位標(biāo)志或半進(jìn)位標(biāo)志AC=1時(shí),則進(jìn)行低四時(shí),則進(jìn)行低四位加位加6修正修正(A03)6(A03) 即即(A)=(A) 06l 當(dāng)累加器高四位大于當(dāng)累加器高四位大于9或進(jìn)位標(biāo)志或進(jìn)位標(biāo)志CY1時(shí)時(shí), 進(jìn)行高四位加進(jìn)行高四位加6修正修正(A47)6(A47) 即即(A) (A) 60H l例:例:設(shè)設(shè)A的內(nèi)
52、容為的內(nèi)容為0101 0110B(即為(即為56的的BCD數(shù)),數(shù)),R3的內(nèi)容為的內(nèi)容為0001 0111B(27的的BCD數(shù)),數(shù)),CY的內(nèi)容為的內(nèi)容為1。執(zhí)行下列指令:執(zhí)行下列指令:ADDC A,R3DA A執(zhí)行執(zhí)行“DA A”注意:使用注意:使用“DA A”DA A”指令時(shí):指令時(shí):只能緊跟在加法指令之后進(jìn)行,不能緊跟在減法、乘法、除只能緊跟在加法指令之后進(jìn)行,不能緊跟在減法、乘法、除法和法和INC指令之后;指令之后;兩個(gè)加數(shù)必須已經(jīng)是兩個(gè)加數(shù)必須已經(jīng)是BCD碼;碼;只能對(duì)累加器中的結(jié)果(只能對(duì)累加器中的結(jié)果(BCD碼)進(jìn)行調(diào)整。碼)進(jìn)行調(diào)整。 l兩個(gè)一字節(jié)無(wú)符號(hào)數(shù)相加,將結(jié)果用十進(jìn)
53、制在兩個(gè)一字節(jié)無(wú)符號(hào)數(shù)相加,將結(jié)果用十進(jìn)制在7段數(shù)碼管上顯示出來(lái)。段數(shù)碼管上顯示出來(lái)。ORG 0000H AJMP MAIN ORG 0050HMAIN:MOV SP,#50H MOV A,#34 ADD A,#44 MOV R7,A ;結(jié)果存入結(jié)果存入R7中中,R7中存放的是中存放的是16進(jìn)制數(shù)進(jìn)制數(shù) ;以下為以下為16進(jìn)制數(shù)轉(zhuǎn)換成進(jìn)制數(shù)轉(zhuǎn)換成BCD碼十進(jìn)制數(shù)碼十進(jìn)制數(shù)BCDT: MOV R5,#8 ;設(shè)置計(jì)數(shù)值設(shè)置計(jì)數(shù)值 CLR A MOV R3,A ;存放結(jié)果寄存器清存放結(jié)果寄存器清0 ,R7中的中的16進(jìn)制數(shù)轉(zhuǎn)換成進(jìn)制數(shù)轉(zhuǎn)換成 ;BCD碼十進(jìn)制數(shù),轉(zhuǎn)換結(jié)果存入碼十進(jìn)制數(shù),轉(zhuǎn)換結(jié)果存入R
54、3R4 MOV R4,A LOOP:CLR C MOV A,R7 ;取被轉(zhuǎn)換二進(jìn)制數(shù)乘取被轉(zhuǎn)換二進(jìn)制數(shù)乘2 RLC A MOV R7,A MOV A,R4 ;乘乘2加加b后經(jīng)十進(jìn)制調(diào)整后轉(zhuǎn)換成后經(jīng)十進(jìn)制調(diào)整后轉(zhuǎn)換成BCD碼存入碼存入 ;R3R4 ADDC A,R4 DA A MOV R4,A MOV A,R3 ADDC A,R3 DA A MOV R3,A DJNZ R5,LOOP MOV 20H,R4;以下為拆字以下為拆字 MOV R0,#21H MOV A,20H ANL A,#0FH MOV R0,A ;低低4位存入位存入21H單元中單元中 INC R0 MOV A,20H SWAP A
55、 ANL A,#0FH MOV R0,A ;高高4位存入位存入22H單元中單元中;以下為顯示程序以下為顯示程序 MOV DPTR,#TAB MOV A,22H MOVC A,A+DPTR MOV P2,A ;顯示十位顯示十位 SETB P1.6 MOV A,21H MOVC A,A+DPTR MOV P3,A ;顯示個(gè)位顯示個(gè)位 SETB P1.7 MOV P3,A ;顯示個(gè)位顯示個(gè)位 SETB P1.7 MOV A,R3 ;顯示百位顯示百位 CJNE A,#0,L1 ;若百為不若百為不0,則轉(zhuǎn),則轉(zhuǎn)L2顯示百位數(shù)顯示百位數(shù) CLR P1.5 ;若百位為若百位為0,則不顯示百位數(shù),則不顯示百位
56、數(shù) AJMP L2 L1:MOVC A,A+DPTR MOV P0,A SETB P1.5 L2:SJMP $ TAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H ;共陽(yáng)共陽(yáng) DB 80H,90H,88H,83H,0C6H,0A1H,86H,8EH, 0BFH,0FFH END主要用于對(duì)主要用于對(duì)2 2個(gè)操作數(shù)按個(gè)操作數(shù)按位進(jìn)行邏輯位進(jìn)行邏輯操作,結(jié)果送到操作,結(jié)果送到A A或直接尋址單元。或直接尋址單元。v 主要操作主要操作 與、或、異或、移位、取反、清零等。與、或、異或、移位、取反、清零等。v 對(duì)標(biāo)志位的影響對(duì)標(biāo)志位的影響 除了目的操作數(shù)為除了目的操作數(shù)
57、為ACCACC的指令影響奇偶標(biāo)志的指令影響奇偶標(biāo)志P P外,一般不影響標(biāo)志位。外,一般不影響標(biāo)志位。 1.簡(jiǎn)單操作指令簡(jiǎn)單操作指令CLR A ; “0” A。 1字節(jié)指令字節(jié)指令 2.累加器累加器A取反取反CPL A ; (A) A。 1字節(jié)指令字節(jié)指令 對(duì)累加器對(duì)累加器A中的內(nèi)容中的內(nèi)容逐位取反逐位取反。例: 設(shè) (A)=3AH, CPL A; 0011 1010B 1100 0101B,即(A)=0C5H 2.移位指令移位指令累加器累加器A循環(huán)左移指令循環(huán)左移指令 RL A ; 1字節(jié)指令字節(jié)指令 例例 :設(shè):設(shè)(A A)6CH = 0110 1100B6CH = 0110 1100B 執(zhí)
58、行指令:執(zhí)行指令:RL ARL A (A)=1101 1000B=0D8H (A)=1101 1000B=0D8H帶進(jìn)位循環(huán)左移指令帶進(jìn)位循環(huán)左移指令 RLC A RLC A ; 1字節(jié)指令字節(jié)指令 例:設(shè)例:設(shè)(A A)6CH = 0110 1100B6CH = 0110 1100B, (CY) =1 (CY) =1 執(zhí)行指令:執(zhí)行指令:RLC ARLC A (A)=1101 1001B=0D9H (A)=1101 1001B=0D9H 對(duì)對(duì)RLRL指令,指令, “RL” RL” 相當(dāng)于乘以相當(dāng)于乘以2 2 對(duì)對(duì)RLCRLC指令,在指令,在CY=0CY=0時(shí)時(shí)“RLC” RLC” 相當(dāng)于乘以相當(dāng)于乘以2 2累加器累加器A循環(huán)右移指令循環(huán)右移指令 RR A ; 1字節(jié)指令字節(jié)指令 例:設(shè)(A)6CH = 0110 1100B 執(zhí)行指令: RR A (A)=0011 0110B=36H帶進(jìn)位循環(huán)右移指令帶進(jìn)位循環(huán)右移指令 RRC A RRC A ; 1字節(jié)指令字節(jié)指令 例:設(shè)例:設(shè)(A A)6CH = 0110 1100B6CH = 0110 1100B, (CY) =1 (CY) =1 執(zhí)行指令:執(zhí)行指令:RRC
溫馨提示
- 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年度金融信息服務(wù)臨時(shí)工勞動(dòng)合同書
- 2025年度商鋪?zhàn)赓U合同范本:現(xiàn)代商業(yè)綜合體租賃管理細(xì)則3篇
- 個(gè)性化私人合作協(xié)議模板2024版B版
- 2025年度個(gè)人與個(gè)人草原保護(hù)管理服務(wù)合同范本3篇
- 2025年字畫裝裱作品定制與售后服務(wù)合同3篇
- 2025年度美甲行業(yè)品牌形象設(shè)計(jì)與承包合同
- 2025年精裝房裝修材料運(yùn)輸與儲(chǔ)存合同3篇
- 土地登記相關(guān)法律知識(shí)-土地登記代理人《土地登記相關(guān)法律》押題密卷1
- 2025年度生態(tài)環(huán)保技術(shù)引進(jìn)承包合同規(guī)范范本4篇
- 2025版文化創(chuàng)意設(shè)計(jì)師專屬聘用協(xié)議3篇
- 《社會(huì)工作實(shí)務(wù)》全冊(cè)配套完整課件3
- 單位違反會(huì)風(fēng)會(huì)書檢討書
- 2024年4月自考00832英語(yǔ)詞匯學(xué)試題
- 《電力用直流電源系統(tǒng)蓄電池組遠(yuǎn)程充放電技術(shù)規(guī)范》
- 《哪吒之魔童降世》中的哪吒形象分析
- 信息化運(yùn)維服務(wù)信息化運(yùn)維方案
- 汽車修理廠員工守則
- 公安交通管理行政處罰決定書式樣
- 10.《運(yùn)動(dòng)技能學(xué)習(xí)與控制》李強(qiáng)
- 冀教版數(shù)學(xué)七年級(jí)下冊(cè)綜合訓(xùn)練100題含答案
- 1神經(jīng)外科分級(jí)護(hù)理制度
評(píng)論
0/150
提交評(píng)論