第3章 MCS-51指令系統(tǒng)_第1頁(yè)
第3章 MCS-51指令系統(tǒng)_第2頁(yè)
第3章 MCS-51指令系統(tǒng)_第3頁(yè)
第3章 MCS-51指令系統(tǒng)_第4頁(yè)
第3章 MCS-51指令系統(tǒng)_第5頁(yè)
已閱讀5頁(yè),還剩139頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第3章MCS-51指令系統(tǒng)實(shí)訓(xùn)3指令的應(yīng)用3.1簡(jiǎn)介3.2尋址方式3.3指令系統(tǒng)本章小結(jié)習(xí)題3實(shí)訓(xùn)3指?令?的?應(yīng)?用1.實(shí)訓(xùn)目的(1)掌握指令格式及表示方法:助記符表示和機(jī)器碼表示。(2)了解人工匯編與機(jī)器匯編的方法。(3)了解尋址方式的概念。(4)掌握常用指令的功能及應(yīng)用。

2.實(shí)訓(xùn)設(shè)備和器件(1)實(shí)訓(xùn)設(shè)備:?jiǎn)纹瑱C(jī)開(kāi)發(fā)系統(tǒng)、微機(jī)等。(2)實(shí)訓(xùn)電路:同實(shí)訓(xùn)1電路。

3.實(shí)訓(xùn)步驟與要求(1)將表3.1中的助記符指令翻譯成機(jī)器碼。(2)將機(jī)器碼分別輸入到單片機(jī)開(kāi)發(fā)系統(tǒng)中,或經(jīng)機(jī)器匯編后分別下載到單片機(jī)開(kāi)發(fā)系統(tǒng)中,單步運(yùn)行,觀察并記錄實(shí)驗(yàn)板上的8個(gè)發(fā)光二極管的亮滅狀態(tài)及相關(guān)單元的數(shù)據(jù),填入表3.1中。

4.實(shí)訓(xùn)分析與總結(jié)1)指令形式從實(shí)訓(xùn)中可以看出,指令有兩種形式:助記符指令和機(jī)器碼指令(機(jī)器指令)。助記符指令只有翻譯成機(jī)器碼后,單片機(jī)才能直接執(zhí)行。機(jī)器碼指令分為以下三種:?jiǎn)巫止?jié)指令:機(jī)器碼只有一個(gè)字節(jié)的指令稱(chēng)為單字節(jié)指令。例如單字節(jié)指令CLRA的機(jī)器碼是E4H。雙字節(jié)指令:機(jī)器碼包括兩個(gè)字節(jié)的指令稱(chēng)為雙字節(jié)指令。例如雙字節(jié)指令MOVA,#55H的機(jī)器碼是74H55H。三字節(jié)指令:機(jī)器碼包括三個(gè)字節(jié)的指令稱(chēng)為三字節(jié)指令。例如三字節(jié)指令MOVP1,#55H的機(jī)器碼是75H90H55H。單片機(jī)指令系統(tǒng)中,大多數(shù)指令是單字節(jié)指令和雙字節(jié)指令。2)指令分析(1)?MOVP1,#55H:將常數(shù)55H送入P1口。在助記符指令中,常數(shù)被稱(chēng)為立即數(shù)。發(fā)光二極管的狀態(tài)為立即數(shù)55H: 01010101對(duì)應(yīng)P1口各位:P1.7P1.6P1.5P1.4P1.3P1.2P1.1P1.0相應(yīng)的LED狀態(tài):亮滅亮滅亮滅亮滅參照實(shí)訓(xùn)1的電路圖,若P1口的某一位輸出0(低電平),則經(jīng)過(guò)反相后變?yōu)楦唠娖?,由外部電源VCC驅(qū)動(dòng)發(fā)光二極管處于點(diǎn)亮狀態(tài);否則,二極管處于熄滅狀態(tài)。(2)?MOV20H,#0F0H:將立即數(shù)0F0H送到內(nèi)部RAM的20H單元中。???MOVP1,20H:將20H單元的內(nèi)容,即0F0H送到P1口。發(fā)光二極管的狀態(tài)為0F0H:11110000P1口:P1.7P1.6P1.5P1.4P1.3P1.2P1.1P1.0LED狀態(tài):滅滅滅滅亮亮亮亮(3)?MOVA,#0F0H:將立即數(shù)0F0H送到累加器A中。???MOVP1,A:將累加器A的內(nèi)容,即0F0H送到P1口。發(fā)光二極管的狀態(tài)同(2)。(4)?MOVR4,#0FH:將立即數(shù)0FH送到寄存器R4中。MOVP1,R4:將寄存器R4的內(nèi)容,即0FH送到P1口。發(fā)光二極管的狀態(tài)如下:0FH:00001111P1口:P1.7P1.6P1.5P1.4P1.3P1.2P1.1P1.0LED狀態(tài):亮亮亮亮滅滅滅滅(5)?MOV20H,#0AAH:將立即數(shù)0AAH送到內(nèi)部RAM的20H單元中。???MOVR0,#20H:將立即數(shù)20H送到R0寄存器中。???MOVP1,@R0:將R0所指向的20H單元的內(nèi)容,即0AAH送到P1口中。發(fā)光二極管的狀態(tài)如下:0AAH:10101010P1口:P1.7P1.6P1.5P1.4P1.3P1.2P1.1P1.0LED狀態(tài):滅亮滅亮滅亮滅亮(6)?MOVA,#55H:將立即數(shù)55H送到累加器A中。MOVP1,A:將累加器A的內(nèi)容,即55H送到P1口。發(fā)光二極管的狀態(tài)同(1)。ANLA,#0FH:將累加器A的內(nèi)容55H與立即數(shù)0FH進(jìn)行邏輯“與”操作,結(jié)果為05H,再送回累加器A中。MOVP1,A:將累加器A的內(nèi)容,即05H送到P1口。發(fā)光二極管的狀態(tài)如下:05H:00000101P1口:P1.7P1.6P1.5P1.4P1.3P1.2P1.1P1.0LED狀態(tài):亮亮亮亮亮滅亮滅???ORLA,#0F0H:將累加器A的內(nèi)容05H與立即數(shù)0F0H進(jìn)行邏輯“或”操作,結(jié)果為0F5H,再送回累加器A中。???MOVP1,A:將累加器A的內(nèi)容,即0F5H送到P1口。發(fā)光二極管的狀態(tài)如下:0F5H:11110101P1口:P1.7P1.6P1.5P1.4P1.3P1.2P1.1P1.0LED狀態(tài):滅滅滅滅亮滅亮滅(7)?CLR ?A:累加器清0。MOVP1,A:將累加器A的內(nèi)容,即00H送到P1口。發(fā)光二極管的狀態(tài)是全亮。CPL??A:將A的內(nèi)容00H按位取反,結(jié)果為0FFH。MOVP1,A:將累加器A的內(nèi)容,即0FFH送到P1口。發(fā)光二極管的狀態(tài)是全滅。(8)?MOVA,#01H:將立即數(shù)01H送到累加器A中。MOVP1,A:將累加器A的內(nèi)容,即01H送到P1口。發(fā)光二極管的狀態(tài)如下:01H:0000000?1P1口:P1.7P1.6P1.5P1.4P1.3P1.2P1.1P1.0LED狀態(tài):亮亮亮亮亮亮亮滅??RL?A:移位指令,將A的內(nèi)容01H循環(huán)左移一位,結(jié)果為02H。??MOVP1,A:將累加器A的內(nèi)容,即02H送到P1口。發(fā)光二極管的狀態(tài)如下:02H:00000?010P1口:P1.7P1.6P1.5P1.4P1.3P1.2P1.1P1.0LED狀態(tài):亮亮亮亮亮亮滅亮???RL?A:將A的內(nèi)容02H左移一位,結(jié)果為04H。???MOVP1,A:將累加器A的內(nèi)容,即04H送到P1口。發(fā)光二極管的狀態(tài)如下:02H:00000?100P1口:P1.7P1.6P1.5P1.4P1.3P1.2P1.1P1.0LED狀態(tài):亮亮亮亮亮滅亮?亮3)現(xiàn)象分析從實(shí)訓(xùn)2中看到以下現(xiàn)象:往P1口傳送數(shù)據(jù)的指令中,數(shù)據(jù)的來(lái)源不盡相同。數(shù)據(jù)是指令的操作對(duì)象,叫做操作數(shù)。指令必須給出操作數(shù)所在的地方,才能進(jìn)行數(shù)據(jù)傳送。尋找操作數(shù)地址的方法,稱(chēng)為尋址方式。下面是在實(shí)訓(xùn)中遇到的采用了不同尋址方式的指令:

MOVP1,#55H;把操作數(shù)直接寫(xiě)在指令中,稱(chēng)為立即數(shù)尋址

MOVP1,20H ;把存放操作數(shù)的內(nèi)存單元的地址直接寫(xiě)在指令 ;中,稱(chēng)為直接尋址MOVP1,A ;把操作數(shù)存放在寄存器中,稱(chēng)為寄存器尋址MOVP1,@R0 ;把存放操作數(shù)的內(nèi)存單元的地址放在寄存器 ;R0中,這種尋址方式稱(chēng)為寄存器間接尋址除了以上4種尋址方式之外,MCS-51單片機(jī)還有變址尋址方式、相對(duì)尋址方式和位尋址方式等。思考:指出表3.1中每一條指令的尋址方式。注意:P1與寄存器R0~R7、累加器A不同,它是內(nèi)部RAM單元90H的符號(hào)地址,只能作為內(nèi)存單元直接尋址。3.1簡(jiǎn)介3.1.1指令概述3.1.2指令格式從實(shí)訓(xùn)2中看到,不同指令翻譯成機(jī)器碼后字節(jié)數(shù)也不一定相同。按照機(jī)器碼個(gè)數(shù),指令可以分為以下三種:

MCS-51單片機(jī)指令系統(tǒng)包括49條單字節(jié)指令、46條雙字節(jié)指令和16條三字節(jié)指令。采用助記符表示的匯編語(yǔ)言指令格式如下:標(biāo)號(hào)是程序員根據(jù)編程需要給指令設(shè)定的符號(hào)地址,可有可無(wú);標(biāo)號(hào)由1~8個(gè)字符組成,第一個(gè)字符必須是英文字母;標(biāo)號(hào)后必須用冒號(hào)。操作碼表示指令的操作種類(lèi),如MOV表示數(shù)據(jù)傳送操作,ADD表示加法操作等。操作數(shù)或操作數(shù)地址表示參加運(yùn)算的數(shù)據(jù)或數(shù)據(jù)的有效地址。操作數(shù)一般有以下幾種形式:沒(méi)有操作數(shù)項(xiàng),即操作數(shù)隱含在操作碼中,如RET指令;只有一個(gè)操作數(shù),如CPLA指令;有兩個(gè)操作數(shù),如MOVA,#00H指令,操作數(shù)之間以逗號(hào)相隔,前面的操作數(shù)稱(chēng)為目的操作數(shù),后面的操作數(shù)稱(chēng)為源操作數(shù);有三個(gè)操作數(shù),如CJNEA,#00H,NEXT指令,操作數(shù)之間也以逗號(hào)相隔。注釋是對(duì)指令的解釋說(shuō)明,用以提高程序的可讀性。注釋前必須加分號(hào)。3.2尋址方式1.寄存器尋址寄存器尋址是指將操作數(shù)存放于寄存器中。寄存器包括工作寄存器R0~R7、累加器A、通用寄存器B、地址寄存器DPTR等。例如,指令MOVR1,A的操作是把累加器A中的數(shù)據(jù)傳送到寄存器R1中,其操作數(shù)存放在累加器A中,所以尋址方式為寄存器尋址。如果程序狀態(tài)寄存器PSW的RS1RS0=01(選中第一組工作寄存器,對(duì)應(yīng)地址為08H~0FH),設(shè)累加器A的內(nèi)容為20H,則執(zhí)行MOVR1,A指令后,內(nèi)部RAM09H單元的值就變?yōu)?0H,如圖3.1所示。圖3.1寄存器尋址示意圖寄存器尋址的尋址范圍包括如下兩部分:(1)通用寄存器R0~R7。MCS-51單片機(jī)中共有4組32個(gè)通用寄存器,但寄存器尋址只能使用當(dāng)前寄存器組,指令中的寄存器名稱(chēng)也只能是R0~R7。因此,在使用前,需要通過(guò)對(duì)PSW中的RS1、RS0位的狀態(tài)進(jìn)行設(shè)置,來(lái)選擇當(dāng)前寄存器組。單片機(jī)復(fù)位時(shí),RS1RS0=00,選中第0組工作寄存器。(2)部分專(zhuān)用寄存器。例如累加器A、寄存器B以及數(shù)據(jù)指針DPTR等。實(shí)訓(xùn)3中,采用寄存器尋址的指令如下:MOV P1,A ;將累加器A的內(nèi)容送到P1口MOV P1,R4 ;將寄存器R4的內(nèi)容送到P1口CLR A ;將累加器A清0CPL A ;將累加器A中的內(nèi)容取反RL A ;將累加器A的內(nèi)容循環(huán)左移

2.直接尋址直接尋址是指把存放操作數(shù)的內(nèi)存單元的地址直接寫(xiě)在指令中。在MCS-51單片機(jī)中,可以直接尋址的存儲(chǔ)器主要有內(nèi)部RAM區(qū)和特殊功能寄存器SFR區(qū)。例如,指令MOVA,3AH執(zhí)行的操作是將內(nèi)部RAM中地址為3AH的單元內(nèi)容傳送到累加器A中,其操作數(shù)3AH就是存放數(shù)據(jù)的單元地址,因此該指令采用的是直接尋址方式。設(shè)內(nèi)部RAM3AH單元的內(nèi)容是88H,那么指令MOVA,3AH的執(zhí)行過(guò)程如圖3.2所示。圖3.2直接尋址示意圖在直接尋址中,指令中直接給出了存放操作數(shù)的內(nèi)部RAM地址,而不是操作數(shù)本身,其尋址范圍只限于內(nèi)部RAM中,包括如下兩部分:(1)內(nèi)部RAM的低128單元,地址范圍為00H~FFH,在指令中直接以單元地址形式給出。例如:指令MOVA,3AH中,3AH表示內(nèi)部RAM單元地址。(2)專(zhuān)用寄存器。專(zhuān)用寄存器除以單元地址形式給出外,還可以用寄存器符號(hào)形式給出。直接尋址是訪問(wèn)專(zhuān)用寄存器的惟一方法。實(shí)訓(xùn)3中,采用直接尋址的指令如下:MOVP1,20H ;將20H單元的內(nèi)容傳送到P1口圖3.3立即數(shù)尋址示意圖

3.立即數(shù)尋址立即數(shù)尋址是指將操作數(shù)直接寫(xiě)在指令中。例如,指令MOVA,#3AH執(zhí)行的操作是將立即數(shù)3AH送到累加器A中,該指令就是立即數(shù)尋址。注意:立即數(shù)前面必須加“#”號(hào),以區(qū)別立即數(shù)和直接地址。該指令的執(zhí)行過(guò)程如圖3.3所示。實(shí)訓(xùn)3中,采用立即數(shù)尋址的指令如下:MOV P1,#55H ;將立即數(shù)55H送P1口MOV 20H,#0F0H ;將立即數(shù)0F0H送20H單元MOV A,#0F0H ;將立即數(shù)0F0H送累加器A中MOV R4,#0FH ;將立即數(shù)0FH送寄存器R4中MOV R0,#20H ;將立即數(shù)20H送寄存器R0中ANL A,#0FH ;將累加器A的內(nèi)容與立即數(shù)0FH進(jìn)行邏輯與操作ORL A,#0F0H ;將累加器A的內(nèi)容與立即數(shù)0F0H進(jìn)行邏輯或操作MOV A,#01H ;將立即數(shù)01H送累加器A中MOV A,#55H ;將立即數(shù)55H送累加器A中

除了以上給出的8位立即數(shù)尋址的指令例子外,MCS-51指令系統(tǒng)中還有一條16位立即數(shù)尋址指令,該指令為

MOVDPTR,#2000H;把16位立即數(shù)2000H傳送到數(shù)據(jù)指針DPTR中

4.寄存器間接尋址寄存器間接尋址是指將存放操作數(shù)的內(nèi)存單元的地址放在寄存器中,指令中只給出該寄存器。執(zhí)行指令時(shí),首先根據(jù)寄存器的內(nèi)容,找到所需要的操作數(shù)地址,再由該地址找到操作數(shù)并完成相應(yīng)操作。在MCS-51指令系統(tǒng)中,用于寄存器間接尋址的寄存器有R0、R1和DPTR,它們被稱(chēng)為寄存器間接尋址寄存器。注意:間接尋址寄存器前面必須加上符號(hào)“@”。例如,指令MOVA,@R0執(zhí)行的操作是將R0的內(nèi)容作為內(nèi)部RAM的地址,再將該地址單元中的內(nèi)容取出來(lái)送到累加器A中。設(shè)R0=3AH,內(nèi)部RAM3AH中的值是65H,則指令MOVA,@R0的執(zhí)行結(jié)果是累加器A的值為65H,該指令的執(zhí)行過(guò)程如圖3.4所示。圖3.4寄存器間接尋址示意圖寄存器間接尋址的尋址范圍如下:(1)內(nèi)部RAM的低128字節(jié)。對(duì)內(nèi)部RAM的低128字節(jié)單元的間接尋址,只能使用R0或R1作間接尋址寄存器,其通用形式為@Ri(i=0或1)。(2)外部RAM的64K字節(jié)。對(duì)外部RAM的64K字節(jié)的間接尋址,使用DPTR作間接尋址寄存器,其形式為@DPTR。例如:MOVXA,@DPTR,其功能是把由DPTR指定的外部RAM單元的內(nèi)容送到累加器A中。(3)外部RAM的低256字節(jié)。外部RAM的低256字節(jié)是一個(gè)特殊的尋址區(qū),除了可以使用DPTR作間接尋址寄存器外,還可以使用R0或R1作間接尋址寄存器,例如MOVXA,@R0,即把由R0指定的外部RAM單元的內(nèi)容傳送到累加器A中。實(shí)訓(xùn)3中,采用寄存器間接尋址的指令如下:MOVP1,@R0 ;將R0所指的存儲(chǔ)單元的內(nèi)容送P1口

5.變址尋址變址尋址是指將基址寄存器與變址寄存器的內(nèi)容相加,結(jié)果作為操作數(shù)的地址。DPTR或PC是基址寄存器,累加器A是變址寄存器。該類(lèi)尋址方式主要用于查表操作。例如,指令MOVCA,@A+DPTR執(zhí)行的操作是將累加器A和基址寄存器DPTR的內(nèi)容相加,相加結(jié)果作為操作數(shù)存放的地址,再按照該地址將操作數(shù)取出來(lái)送到累加器A中。設(shè)累加器A=02H,DPTR=0300H,外部ROM中,0302H單元的內(nèi)容是55H,則指令MOVCA,@A+DPTR的執(zhí)行結(jié)果是累加器A的內(nèi)容為55H。該指令的執(zhí)行過(guò)程如圖3.5所示。圖3.5變址尋址示意圖對(duì)變址尋址方式說(shuō)明如下:(1)變址尋址是專(zhuān)門(mén)針對(duì)程序存儲(chǔ)器的尋址方式,所以只能對(duì)程序存儲(chǔ)器進(jìn)行尋址,尋址范圍為64K字節(jié)。(2)變址尋址的指令只有2條:MOVC A,@A+DPTRMOVC A,@A+PC(3)盡管變址尋址比較復(fù)雜,但變址尋址的指令都是一字節(jié)指令。6.相對(duì)尋址相對(duì)尋址是指將程序計(jì)數(shù)器PC的當(dāng)前內(nèi)容與指令中的操作數(shù)相加,其結(jié)果作為跳轉(zhuǎn)指令的轉(zhuǎn)移地址(也稱(chēng)目的地址)。該類(lèi)尋址方式主要用于跳轉(zhuǎn)指令。例如,指令SJMP54H執(zhí)行的操作是將PC當(dāng)前的內(nèi)容與54H相加,結(jié)果再送回PC中,成為下一條將要執(zhí)行指令的地址。設(shè)指令SJMP54H的機(jī)器碼80H54H存放在2000H處,當(dāng)執(zhí)行到該指令時(shí),先從2000H和2001H單元取出指令,PC自動(dòng)變?yōu)?002H;再把PC的內(nèi)容與操作數(shù)54H相加,形成目標(biāo)地址2056H,再送回PC,使得程序跳轉(zhuǎn)到2056H單元繼續(xù)執(zhí)行。該指令的執(zhí)行過(guò)程如圖3.6所示。相對(duì)尋址是專(zhuān)門(mén)為改變程序執(zhí)行方向而設(shè)置的,程序執(zhí)行的方向由程序計(jì)數(shù)器PC控制,在程序順序執(zhí)行過(guò)程中,PC自動(dòng)加1,按照指令的存放順序逐一執(zhí)行;而相對(duì)尋址則會(huì)修改PC的值,從而使程序跳轉(zhuǎn)到新的目的地址執(zhí)行。圖3.6相對(duì)尋址示意圖

7.位尋址位尋址是指按位進(jìn)行的尋址操作,而上述介紹的指令都是按字節(jié)進(jìn)行的尋址操作。MCS-51單片機(jī)中,操作數(shù)不僅可以按字節(jié)進(jìn)行操作,也可以按位進(jìn)行操作。當(dāng)我們把某一位作為操作數(shù)時(shí),這個(gè)操作數(shù)的地址稱(chēng)為位地址。例如,指令SETB3DH執(zhí)行的操作是將內(nèi)部RAM位尋址區(qū)中的3DH位置1。設(shè)內(nèi)部RAM27H單元的內(nèi)容是00H,執(zhí)行SETB3DH后,由于3DH對(duì)應(yīng)內(nèi)部RAM27H的第5位,因此該位變?yōu)?,也就是27H單元的內(nèi)容變?yōu)?0H。該指令的執(zhí)行過(guò)程如圖3.7所示。圖3.7位尋址示意圖位尋址區(qū)包括專(zhuān)門(mén)安排在內(nèi)部RAM中的如下兩個(gè)區(qū)域:(1)內(nèi)部RAM的位尋址區(qū),地址范圍是20H~2FH,共16個(gè)RAM單元,每個(gè)單元包括8個(gè)位,共計(jì)128個(gè)位,位地址為00H~7FH。對(duì)這128個(gè)位有兩種表示方式:一是位地址,例如:SETB3DH;二是單元地址加位的方式,即點(diǎn)操作符寫(xiě)法,例如:SETB27H.5。(2)特殊功能寄存器SFR中的11個(gè)寄存器可以位尋址,包括83個(gè)位(相關(guān)內(nèi)容可參見(jiàn)有關(guān)章節(jié)中位地址定義的內(nèi)容)。對(duì)這些位在指令中有如下4種表示方法:直接使用位地址,例如:MOVC,0D0H。點(diǎn)操作符表示法,例如:MOVC,0D0H.0。位名稱(chēng)表示法,例如:MOVC,P。專(zhuān)用寄存器符號(hào)與點(diǎn)操作符表示法,例如:MOVC,PSW.0。

8.?MCS-51單片機(jī)尋址方式小結(jié)以上介紹了MCS-51單片機(jī)的7種尋址方式,每一種尋址方式都有各自不同的尋址區(qū)域和特點(diǎn),在此歸納總結(jié)如表3.2所示。表3.2MCS-51單片機(jī)尋址方式小結(jié)注:指令舉例中,尋址方式是指源操作數(shù)的尋址方式。3.3指令系統(tǒng)MCS-51單片機(jī)指令系統(tǒng)包括111條指令,按功能可以劃分為以下5類(lèi):數(shù)據(jù)傳送指令(29條)。算術(shù)運(yùn)算指令(24條)。邏輯運(yùn)算及移位指令(24條)。控制轉(zhuǎn)移指令(17條)。位操作指令(17條)。3.3.1指令系統(tǒng)中的符號(hào)說(shuō)明指令的書(shū)寫(xiě)必須遵守一定的規(guī)則,為了敘述方便,我們采用表3.3的約定。表3.3指令描述約定3.3.2數(shù)據(jù)傳送類(lèi)指令數(shù)據(jù)傳送指令是MCS-51單片機(jī)匯編語(yǔ)言程序設(shè)計(jì)中使用最頻繁的指令,包括內(nèi)部RAM、寄存器、外部RAM以及程序存儲(chǔ)器之間的數(shù)據(jù)傳送。數(shù)據(jù)傳送操作是指把數(shù)據(jù)從源地址傳送到目的地址,源地址內(nèi)容不變,即數(shù)據(jù)傳送類(lèi)指令分類(lèi)如圖3.8所示.圖3.8數(shù)據(jù)傳送指令分類(lèi)

1.內(nèi)部8位數(shù)據(jù)傳送指令(15條)內(nèi)部8位數(shù)據(jù)傳送指令共15條,主要用于MCS-51單片機(jī)內(nèi)部RAM與寄存器之間的數(shù)據(jù)傳送。指令基本格式:MOV<目的操作數(shù)>,<源操作數(shù)>1)以累加器A為目的地址的傳送指令(4條)例3.1

已知相應(yīng)單元的內(nèi)容如下,請(qǐng)指出每條指令執(zhí)行后相應(yīng)單元內(nèi)容的變化。(1)MOVA,#20H(2)MOVA,40H(3)MOVA,R0(4)MOVA,@R0解:(1)MOVA,#20H執(zhí)行后A=20H。(2)MOVA,40H執(zhí)行后A=30H。(3)MOVA,R0執(zhí)行后A=50H。(4)MOVA,@R0執(zhí)行后A=10H。2)以Rn為目的地址的傳送指令(3條)3)以直接地址為目的地址的傳送指令(5條)注意:以上傳送指令的結(jié)果不影響程序狀態(tài)字寄存器PSW標(biāo)志。4)以寄存器間接地址為目的地址的傳送指令(3條)注意:以上傳送指令的結(jié)果不影響程序狀態(tài)字寄存器PSW標(biāo)志。例3.2

已知相應(yīng)單元的內(nèi)容如下,請(qǐng)指出下列指令執(zhí)行后各單元內(nèi)容相應(yīng)的變化。(1)MOVA,R6(2)MOVR6,70H(3)MOV70H,50H(4)MOV40H,@R0(5)MOV@R1,#88H解:(1)MOVA,R6執(zhí)行后A=30H。 (2)MOVR6,70H執(zhí)行后R6=40H。(3)MOV70H,50H執(zhí)行后?(70H)=60H。(4)MOV40H,@R0執(zhí)行后?(40H)=60H。(5)MOV@R1,#88H執(zhí)行后?(66H)=88H。注意:以上指令結(jié)果不影響程序狀態(tài)字寄存器PSW標(biāo)志。

2.16位數(shù)據(jù)傳送指令(1條)3.外部數(shù)據(jù)傳送指令(4條)注意:①外部RAM只能通過(guò)累加器A進(jìn)行數(shù)據(jù)傳送。②累加器A與外部RAM之間傳送數(shù)據(jù)時(shí)只能用間接尋址方式,間接尋址寄存器為DPTR、R0、R1。③以上傳送指令結(jié)果(未注明的)通常影響程序狀態(tài)字寄存器PSW的P標(biāo)志。例3.3

把外部數(shù)據(jù)存儲(chǔ)器2040H單元中的數(shù)據(jù)傳送到外部數(shù)據(jù)存儲(chǔ)器2560H單元中去。解:MOVDPTR,#2040H MOVXA,@DPTR ;先將2040H單元的內(nèi)容傳送到累加器A中 MOVDPTR,#2560H MOVX@DPTR,A ;再將累加器A中的內(nèi)容傳送到2560H單元中注意:以上指令結(jié)果影響程序狀態(tài)字寄存器PSW的P標(biāo)志。4.交換和查表類(lèi)指令(9條)1)字節(jié)交換指令(3條)例3.4設(shè)內(nèi)部數(shù)據(jù)存儲(chǔ)區(qū)2AH、2BH單元中連續(xù)存放有4個(gè)BCD碼(1個(gè)BCD碼占4位),試編寫(xiě)一程序把這4個(gè)BCD碼倒序排序,即解:MOVR0,#2AH ;將立即數(shù)2AH傳送到寄存器R0中 MOVA,@R0 ;將2AH單元的內(nèi)容傳送到累加器A中 SWAPA ;將累加器A中的高4位與低4位交換 MOV@R0,A ;將累加器A的內(nèi)容傳送到2AH單元中 MOVR1,#2BH

MOVA,@R1 ;將2BH單元的內(nèi)容傳送到累加器A中

SWAPA ;將累加器A中的高4位與低4位交換XCHA,@R0 ;將累加器A中的內(nèi)容與2AH單元的內(nèi)容交換MOV@R1,A ;將累加器A的內(nèi)容傳送到2BH單元注意:①以上指令結(jié)果影響程序狀態(tài)字寄存器PSW的P標(biāo)志。②查表指令用于查找存放在程序存儲(chǔ)器中的表格。4)查表指令(2條)5)堆棧操作指令(2條)注意:①堆棧是用戶自己設(shè)定的內(nèi)部RAM中的一塊專(zhuān)用存儲(chǔ)區(qū),使用時(shí)一定先設(shè)堆棧指針,堆棧指針缺省為SP=07H。②堆棧遵循后進(jìn)先出的原則安排數(shù)據(jù)。③堆棧操作必須是字節(jié)操作,且只能直接尋址。將累加器A入棧、出棧指令可以寫(xiě)成:PUSH/POPACC或PUSH/POP0E0H而不能寫(xiě)成:PUSH/POPA④堆棧通常用于臨時(shí)保護(hù)數(shù)據(jù)及子程序調(diào)用時(shí)保護(hù)現(xiàn)場(chǎng)和恢復(fù)現(xiàn)場(chǎng)。⑤以上指令結(jié)果不影響程序狀態(tài)字寄存器PSW標(biāo)志。例3.5

設(shè)堆棧指針為30H,把累加器A和DPTR中的內(nèi)容壓入,然后根據(jù)需要再把它們彈出,編寫(xiě)實(shí)現(xiàn)該功能的程序段。解:MOVSP,#30H ;設(shè)置堆棧指針,SP=30H為棧底地址PUSH ACC;SP+1→SP,SP=31H,ACC→(SP)PUSH DPH;SP+1→SP,SP=32H,DPH→(SP)PUSH DPL;SP+1→SP,SP=33H,DPL→(SP)POP DPL;(SP)→DPL,SP-1→SP,SP=32HPOP DPH ;(SP)→DPH,SP-1→SP,SP=31HPOP ACC ;(SP)→ACC,SP-1→SP,SP=30H3.3.3算術(shù)運(yùn)算類(lèi)指令算術(shù)運(yùn)算類(lèi)指令分類(lèi)如圖3.9所示。圖3.9算術(shù)運(yùn)算類(lèi)指令分類(lèi)

1.加、減法指令(22條)1)加法指令(8條)2)減法指令(4條)注意:①減法指令中沒(méi)有不帶借位的減法指令,所以在需要時(shí),必須先將CY清0。②指令執(zhí)行結(jié)果均在累加器A中。③以上指令結(jié)果均影響程序狀態(tài)字寄存器PSW的CY、OV、AC和P標(biāo)志。例3.6編寫(xiě)計(jì)算12A4H+0FE7H的程序,將結(jié)果存入內(nèi)部RAM41H和40H單元,40H存低8位,41H存高8位。解:?jiǎn)纹瑱C(jī)指令系統(tǒng)中只提供了8位的加減法運(yùn)算指令,兩個(gè)16位數(shù)(雙字節(jié))相加可分為兩步進(jìn)行,第一步先對(duì)低8位相加,第二步再對(duì)高8位相加。程序如下:MOVA,#0A4H ;被加數(shù)低8位→AADDA,#0E7H ;加數(shù)低8位E7H與之相加,A=8BH,CY=1MOV40H,A ;A→(40H),存低8位結(jié)果MOVA,#12H;被加數(shù)高8位→AADDCA,#0FH ;加數(shù)高8位+A+CY,A=22HMOV41H,A ;存高8位運(yùn)算結(jié)果注意:①該指令結(jié)果影響程序狀態(tài)字寄存器PSW的CY、OV、AC和P標(biāo)志。3)BCD碼調(diào)整指令(1條)②BCD(BinaryCodedDecimal)碼是用二進(jìn)制形式表示十進(jìn)制數(shù),例如十進(jìn)制數(shù)45的BCD碼形式為45H。BCD碼只是一種表示形式,與其數(shù)值沒(méi)有關(guān)系。BCD碼用4位二進(jìn)制碼表示一位十進(jìn)制數(shù),這4位二進(jìn)制數(shù)的權(quán)為8421,所以BCD碼又稱(chēng)為8421碼。十進(jìn)制數(shù)碼0~9所對(duì)應(yīng)的BCD碼如表3.4所示。表3.4十進(jìn)制數(shù)碼與BCD碼的對(duì)應(yīng)表在表3.4中,用4位二進(jìn)制數(shù)表示一個(gè)十進(jìn)制數(shù)位,例如56D和87D的BCD碼表示為01010110 (56D) 10000111(87D)000101000011(143D)③?DAA指令將A中的二進(jìn)制碼自動(dòng)調(diào)整為BCD碼。④?DAA指令只能跟在ADD或ADDC加法指令后,不適用于減法。例3.7說(shuō)明指令MOVA,#05H和ADDA,#08H及DAA的執(zhí)行結(jié)果。解:MOVA,#05H ;05H→A ADDA,#08H ;05H+08H→A,A=0DH DA?A ;自動(dòng)調(diào)整為BCD碼,A=13H4)加1減1指令(9條)注意:以上指令結(jié)果通常不影響程序狀態(tài)字寄存器PSW。例3.8分別指出指令I(lǐng)NCR0和INC@R0的執(zhí)行結(jié)果。設(shè)R0=30H,(30H)=00H。解:INCR0 ;R0+1=30H+1=31H→R0,R0=31HINC@R0 ;(R0)+1=(30H)+1→(R0),(30H)=01H, ;R0中內(nèi)容不變

2.乘、除法指令1)乘法指令(1條)注意:乘法指令結(jié)果影響程序狀態(tài)字寄存器PSW的OV(積超過(guò)0FFH則置1,否則為0)和CY(總是清0)以及P標(biāo)志。2)除法指令(1條)注意:①除法指令結(jié)果影響程序狀態(tài)字寄存器PSW的OV(除數(shù)為0則置1,否則為0)和CY(總是清0)以及P標(biāo)志。②當(dāng)除數(shù)為0時(shí)結(jié)果不能確定。3.3.4邏輯運(yùn)算及移位類(lèi)指令邏輯運(yùn)算及移位類(lèi)指令邏輯運(yùn)算指令循環(huán)移位指令(4條):RL、RLC、RR、RRC邏輯與指令(6條):ANL邏輯或指令(6條):ORL邏輯異或指令(6條):XRL累加器A清0和取反指令(2條):CLR、CPL邏輯運(yùn)算及移位類(lèi)指令分類(lèi)如圖3.10所示。圖3.10邏輯運(yùn)算及移位類(lèi)指令分類(lèi)1.邏輯運(yùn)算指令(20條)1)邏輯與指令(6條)注意:①以上指令結(jié)果通常影響程序狀態(tài)字寄存器PSW的P標(biāo)志。②邏輯與指令通常用于將一個(gè)字節(jié)中的指定位清0,其它位不變。2)邏輯或指令(6條)注意:①以上指令結(jié)果通常影響程序狀態(tài)字寄存器PSW的P標(biāo)志。②邏輯或指令通常用于將一個(gè)字節(jié)中的指定位置1,其余位不變。3)邏輯異或指令(6條)注意:①以上指令結(jié)果通常影響程序狀態(tài)字寄存器PSW的P標(biāo)志。②?“異或”原則是相同為0,不同為1。4)累加器A清0和取反指令(2條)例3.9利用邏輯指令完成下面的操作:(1)將累加器A中的數(shù)據(jù)高4位清0,低4位不變(該操作也稱(chēng)為屏蔽掉累加器A的高4位)。(2)將累加器A中的數(shù)據(jù)高4位置1,低4位不變。(3)將累加器A中的數(shù)據(jù)低4位取反,高4位不變。解:(1)?ANLA,#00001111B或者ANLA,#0FH(2)?ORLA,#11110000B或者ORLA,#0F0H(3)?XRLA,#00001111B或者XRLA,#0FH2.循環(huán)移位指令(4條)注意:執(zhí)行帶進(jìn)位的循環(huán)移位指令之前,必須給CY置位或清0。例3.10已知累加器A的內(nèi)容為01H,請(qǐng)指出下列指令執(zhí)行后累加器A的值各是多少。(1)?RRA (2)RLA(3)?SETBC (4)?SETBC???RRC?A ?RLC?A解:累加器A為8位寄存器,可以將其內(nèi)容01H寫(xiě)成8位二進(jìn)制形式:000000001B,記為D7D6D5D4D3D2D1D0。(1)指令RRA執(zhí)行的操作是將累加器A的內(nèi)容循環(huán)右移一位,移位過(guò)程如下:D7→D6、D6→D5、D5→D4、D4→D3、D3→D2、D2→D1、D1→D0、D0→D7所以指令執(zhí)行后累加器A的內(nèi)容為80H。(2)指令RLA執(zhí)行的操作是將累加器A的內(nèi)容循環(huán)左移一位,移位過(guò)程如下:D0→D1、D1→D2、D2→D3、D3→D4、D4→D5、D5→D6、D6→D7、D7→D0所以指令執(zhí)行后累加器A的內(nèi)容為02H。(3)指令SETBC執(zhí)行后,進(jìn)位標(biāo)志位CY=1;指令RRCA執(zhí)行的操作是將累加器A的內(nèi)容帶CY循環(huán)右移一位,移位過(guò)程如下:D7→D6、D6→D5、D5→D4、D4→D3、D3→D2、D2→D1、D1→D0、D0→CY、CY→D7所以指令執(zhí)行后累加器A的內(nèi)容為80H,CY=1。(4)指令SETBC執(zhí)行后,進(jìn)位標(biāo)志位CY=1;指令RLCA執(zhí)行的操作是將累加器A的內(nèi)容帶CY循環(huán)左移一位,移位過(guò)程如下:D0→D1、D1→D2、D2→D3、D3→D4、D4→D5、D5→D6、D6→D7、D7→CY、CY→D0所以指令執(zhí)行后累加器A的內(nèi)容為03H,CY=0。3.3.5控制轉(zhuǎn)移類(lèi)指令控制轉(zhuǎn)移類(lèi)指令的本質(zhì)是改變程序計(jì)數(shù)器PC的內(nèi)容,從而改變程序的執(zhí)行方向??刂妻D(zhuǎn)移類(lèi)指令分為:無(wú)條件轉(zhuǎn)移指令、條件轉(zhuǎn)移指令及調(diào)用和返回指令。具體分類(lèi)如圖3.11所示。圖3.11控制轉(zhuǎn)移類(lèi)指令分類(lèi)

1.無(wú)條件轉(zhuǎn)移指令(4條)1)長(zhǎng)轉(zhuǎn)移指令(1條)注意:①該指令結(jié)果不影響程序狀態(tài)字寄存器PSW。②該指令可以轉(zhuǎn)移到64KB程序存儲(chǔ)器中的任意位置。例3.11假定在某程序中存在如下指令:

NEXT:MOVA,#00H ;NEXT為指令的標(biāo)號(hào),代表該指令在 ;程序存儲(chǔ)器中存放的地址,假定該 ;指令的存儲(chǔ)地址為2000H

請(qǐng)寫(xiě)出指令LJMPNEXT執(zhí)行后PC的值。

解:執(zhí)行指令LJMPNEXT之后,PC=2000H,即程序從NEXT標(biāo)號(hào)所指向的指令開(kāi)始執(zhí)行。2)絕對(duì)轉(zhuǎn)移指令(1條)注意:①該指令結(jié)果不影響程序狀態(tài)字寄存器PSW。②該指令轉(zhuǎn)移范圍是2KB。

例3.12指令KWR:AJMPKWR1的執(zhí)行結(jié)果。解:設(shè)KWR標(biāo)號(hào)地址=1030H,KWR1標(biāo)號(hào)地址=1100H,該指令執(zhí)行后PC首先加2變?yōu)?032H,然后由1032H的高5位和1100H的低11位拼裝成新的PC值0001000100000000B,即程序從1100H開(kāi)始執(zhí)行。3)相對(duì)轉(zhuǎn)移指令(1條)注意:①該指令結(jié)果不影響程序狀態(tài)字寄存器PSW。②該指令的轉(zhuǎn)移范圍是以本指令的下一條指令為中心的-128~+127字節(jié)以內(nèi),屬于相對(duì)尋址方式。該指令的執(zhí)行過(guò)程是:先執(zhí)行完本指令,PC自動(dòng)增2,然后再與rel相加得到新的轉(zhuǎn)移地址。在PCPC+2+rel中,第一個(gè)PC表示新的轉(zhuǎn)移地址,第二個(gè)PC表示本指令所在地址。③在實(shí)際應(yīng)用中,LJMP、AJMP和SJMP后面的addr16、addr11或rel都是用標(biāo)號(hào)來(lái)代替的,不一定寫(xiě)出它們的具體地址。例3.13假定某程序中有如下指令:

SJMPNEXTNEXT: INCR1在指令SJMPNEXT中,NEXT為相對(duì)偏移量,假定該偏移值為20H,本指令所在地址為1000H,請(qǐng)計(jì)算執(zhí)行完SJMPNEXT指令后PC的值。解:指令SJMPNEXT所在地址為1000H,執(zhí)行完該指令后PC=1002H,再利用指令中的偏移量計(jì)算新的PC值:PC=1002H+20H=1022H4)間接尋址的無(wú)條件轉(zhuǎn)移指令(1條)注意:①該指令結(jié)果不影響程序狀態(tài)字寄存器PSW。②該指令通常用于散轉(zhuǎn)(多分支)程序。例3.14假定DPTR=2000H,指出當(dāng)累加器A的內(nèi)容分別為02H、04H、06H、08H時(shí),執(zhí)行指令JMP@A+DPTR后,PC的值分別為多少。解:當(dāng)累加器A=02H時(shí),執(zhí)行指令JMP@A+DPTR后,PC=2000H+02H=2002H。當(dāng)累加器A=04H時(shí),執(zhí)行指令JMP@A+DPTR后,PC=2000H+04H=2004H。當(dāng)累加器A=06H時(shí),執(zhí)行指令JMP@A+DPTR后,PC=2000H+06H=2006H。當(dāng)累加器A=08H時(shí),執(zhí)行指令JMP@A+DPTR后,PC=2000H+08H=2008H。

2.條件轉(zhuǎn)移指令(8條)1)累加器A判0指令(2條)注意:①以上指令結(jié)果不影響程序狀態(tài)字寄存器PSW。②轉(zhuǎn)移范圍與指令SJMP相同。③?PCPC+2+rel中,第一個(gè)PC表示新的轉(zhuǎn)移地址,第二個(gè)PC表示本指令所在地址。④在實(shí)際應(yīng)用中,rel用標(biāo)號(hào)代替,無(wú)需計(jì)算出具體的偏移量。2)比較轉(zhuǎn)移指令(4條)注意:①以上指令結(jié)果影響程序狀態(tài)字寄存器PSW的CY標(biāo)志。②轉(zhuǎn)移范圍與SJMP指令相同。③?PCPC+3+rel中,第一個(gè)PC表示新的轉(zhuǎn)移地址,第二個(gè)PC表示本指令所在地址。④在實(shí)際應(yīng)用中,rel用標(biāo)號(hào)代替,無(wú)需計(jì)算出具體的偏移量。例3.15假定累加器A=20H,在程序中有如下兩條指令,請(qǐng)指出指令執(zhí)行完后PC的值分別為多少。(1)?CJNEA,#20H,NEXT ;假定本指令所在地址為1000H,偏移量為20H(2)?CJNEA,#30H,NEXT1 ;假定本指令所在地址為1000H,偏移量為20H解:(1)在指令CJNEA,#20H,NEXT中,A=20H,則順序執(zhí)行程序,PC=1000H+3=1003H。(2)在指令CJNEA,#30H,NEXT1中,A≠30H,則指令轉(zhuǎn)移到相應(yīng)標(biāo)號(hào)地址處執(zhí)行,新地址的計(jì)算方法是:執(zhí)行完本指令后,PC的值自動(dòng)增3,然后再與偏移量相加。PC=1000H+3+20H=1023H。同時(shí)由于A<#30H,所以CY=1。注意:①DJNZ指令通常用于循環(huán)程序中控制循環(huán)次數(shù)。②轉(zhuǎn)移范圍與SJMP指令相同。③以上指令結(jié)果不影響程序狀態(tài)字寄存器PSW。3)減1非零轉(zhuǎn)移指令(2條)

3.調(diào)用和返回指令(5條)1)絕對(duì)調(diào)用指令(1條)注意:①該指令結(jié)果不影響程序狀態(tài)字寄存器PSW。②調(diào)用范圍與AJMP指令相同。2)長(zhǎng)調(diào)用指令(1條)注意:①該指令結(jié)果不影響程序狀態(tài)字寄存器PSW。②調(diào)用范圍與LJMP指令相同。3)返回指令(2條)注意:該指令結(jié)果不影響程序狀態(tài)字寄存器PSW。注意:該指令結(jié)果不影響程序狀態(tài)字寄存器PSW。4)空操作(1條)3.3.6位操作類(lèi)指令位操作指令的操作數(shù)是“位”,其取值只能是0或1,故又稱(chēng)之為布爾操作指令。位操作指令的操作對(duì)象是片內(nèi)RAM的位尋址區(qū)(即20H~2FH)和特殊功能寄存器SFR中的11個(gè)可位尋址的寄存器。片內(nèi)RAM的20H~2FH共16個(gè)單元128個(gè)位,我們?yōu)檫@128個(gè)位的每個(gè)位均定義一個(gè)名稱(chēng):00H~7FH,稱(chēng)為位地址,如表3.5所示。對(duì)于特殊功能寄存器SFR中可位尋址的寄存器的每個(gè)位,也有名稱(chēng)定義,如表3.6所示。表3.5片內(nèi)RAM位尋址區(qū)的位地址分布表3.6SFR中的位地址分布對(duì)于位尋址,有以下四種不同的寫(xiě)法。第一種是直接地址寫(xiě)法,如MOVC,0D2H,其中,0D2H表示PSW中的OV位地址。第二種是點(diǎn)操作符寫(xiě)法,如MOVC,0D0H.2。第三種是位名稱(chēng)寫(xiě)法,即在指令格式中直接采用位定義名稱(chēng),這種方式只適用于可以位尋址的SFR,如MOVC,OV。第四種是專(zhuān)用寄存器符號(hào)與點(diǎn)操作符表示法,如MOVC,PSW.0。位操作類(lèi)指令分為以下五組:位傳送指令(2條):MOV。位置位和位清0指令(4條):SETB、CLR。位運(yùn)算指令(6條):ANL、ORL、CPL。位轉(zhuǎn)移指令(3條):JB、JNB、JBC。判CY標(biāo)志指令(2條):JC、JNC。1.位傳送指令(2條)注意:位傳送指令的操作數(shù)中必須有一個(gè)是進(jìn)位位C,不能在其它兩個(gè)位之間直接傳送。進(jìn)位位C也稱(chēng)為位累加器。2.位置位和位清0指令(4條)3.位運(yùn)算指令(6條)注意:以上指令結(jié)果通常影響程序狀態(tài)字寄存器PSW的CY標(biāo)志。4.位轉(zhuǎn)移指令(3條)注意:①?JBC與JB指令的區(qū)別是:前者轉(zhuǎn)移后把尋址位清0,后者只轉(zhuǎn)移而不把尋址位清0。②以上指令結(jié)果不影響程序狀態(tài)字寄存器PSW。

5.判CY標(biāo)志指令(2條)注意:以上結(jié)果不影響程序狀態(tài)字寄存器PSW。例3.16用位操作指令編程計(jì)算邏輯方程P1.7=ACC.0×(B.0+P2.1)+,其中“+”表示邏輯或,“×”表示邏輯與。解:程序段如下:

MOVC,B.0 ;B.0→CORLC,P2.1 ;C或P2.1→CANLC,ACC.0 ;C與ACC.0→C,即ACC.0×(B.0+P2.1)→CORLC,/P3.2 ;C或/P3.2,即ACC.0×(B.0+P2.1)+→CMOVP1.7,C ;C→P1.7

3.3.7常用偽指令1.定位偽指令ORG格式:[標(biāo)號(hào):]ORG地址表達(dá)式功能:規(guī)定程序塊或數(shù)據(jù)塊存放的起始位置。例如:ORG1000H ;表示下面的指令MOVA, ;#20H存放于1000H開(kāi)始的單元 MOVA,#20H2.定義字節(jié)數(shù)據(jù)偽指令DB格式:[標(biāo)號(hào):]DB字節(jié)數(shù)據(jù)表功能:字節(jié)數(shù)據(jù)表可以是多個(gè)字節(jié)數(shù)據(jù)、字符串或表達(dá)式,它表示將字節(jié)數(shù)據(jù)表中的數(shù)據(jù)從左到右依次存放在指定地址單元。例如:ORG1000HTAB:DB2BH,0A0H,'A',2*4;表示從1000H單元開(kāi)始的地方存放數(shù)據(jù)2BH,;0A0H,41H(字母A的ASCII碼),08H

3.定義字?jǐn)?shù)據(jù)偽指令DW格式:[標(biāo)號(hào):]DW字?jǐn)?shù)據(jù)表功能:與DB類(lèi)似,但DW定義的數(shù)據(jù)項(xiàng)為字,包括兩個(gè)字節(jié),存放時(shí)高位在前,低位在后。例如: ?ORG1000HDATA:DW324AH,3CH;表示從1000H單元開(kāi)始;的地方存放數(shù)據(jù)32H,;4AH,00H,3CH(3CH;以字的形式表示為;003CH)

4.定義空間偽指令DS格式:[標(biāo)號(hào):]DS表達(dá)式功能:從指定的地址開(kāi)始,保留多少個(gè)存儲(chǔ)單元作為備用的空間。例如: ?ORG1000H BUF:DS50 TAB:DB22H;表示從1000H開(kāi)始的地方預(yù)留;50(1000H~1031H)個(gè)存儲(chǔ)字節(jié);空間,22H存放在1032H單元

5.符號(hào)定義偽指令EQU或=格式:符號(hào)名EQU表達(dá)式或符號(hào)名=表達(dá)式功能:將表達(dá)式的值或某個(gè)特定匯編符號(hào)定義為一個(gè)指定的符號(hào)名,只能定義單字節(jié)數(shù)據(jù),并且必須遵循先定義后使用的原則,因此該語(yǔ)句通常放在源程序的開(kāi)頭部分。例如: LEN=10 SUMEQU21H MOVA,#LEN;執(zhí)行指令后,累加器A中的值;為0AH

6.數(shù)據(jù)賦值偽指令DATA格式:符號(hào)名DATA表達(dá)式功能:將表達(dá)式的值或某個(gè)特定匯編符號(hào)定義為一個(gè)指定的符號(hào)名,只能定義單字節(jié)數(shù)據(jù),但可以先使用后定義,因此用它定義數(shù)據(jù)時(shí)可以放在程序末尾。例如: MOVA,#LEN

LENDATA10盡管LEN的引用在定義之前,但匯編語(yǔ)言系統(tǒng)仍可以知道A的值是0AH。7.數(shù)據(jù)地址賦值偽指令XDATA格式:符號(hào)名XDATA表達(dá)式功能:將表達(dá)式的值或某個(gè)特定匯編符號(hào)定義為一個(gè)指定的符號(hào)名,可以先使用后定義,可用于雙字節(jié)數(shù)據(jù)定義。例如: DELAYXDATA0356H LCALLDELAY ;執(zhí)行指令后,程序轉(zhuǎn)到;0356H單元執(zhí)行8.匯編結(jié)束偽指令END格式:[標(biāo)號(hào):]END功能:匯編語(yǔ)言源程序結(jié)束標(biāo)志,用于整個(gè)匯編語(yǔ)言程序的末尾處。本章小結(jié)程序由指令組成。一臺(tái)計(jì)算機(jī)能夠提供的所有指令的集合稱(chēng)為指令系統(tǒng)。指令有機(jī)器碼指令和助記符指令兩種形式。計(jì)算機(jī)能夠直接執(zhí)行的指令是機(jī)器碼指令。尋找操作數(shù)地址的方式稱(chēng)為尋址方式。MCS-51指令系統(tǒng)共使用了7種尋址方式,包括寄存器尋址、直接尋址、立即數(shù)尋址、寄存器間接尋址、變址尋址、相對(duì)尋址和位尋址等。MCS-51單片機(jī)指令系統(tǒng)包括111條指令,按功能可以劃分為以下5類(lèi):數(shù)據(jù)傳送指令(29條)、算術(shù)運(yùn)算指令(24條)、邏輯運(yùn)算指令(24條)、控制轉(zhuǎn)移指令(17條)和位操作指令(17條)。習(xí)題33.1單項(xiàng)選擇題。(1)單片機(jī)在與外部I/O口進(jìn)行數(shù)據(jù)傳送時(shí),將使用

指令。A.?MOVX B.?MOV C.?MOVC D.視具體I/O口器件而定(2)在寄存器間接尋址方式中,Ri是指

。A.?R0~R7 B.?R0~R1 C.操作碼 D.操作數(shù)地址(3)下列指令中,影響堆棧指針的指令是

。A.?LJMPaddr16B.?DJNZRn,relC.?LCALLaddr16D.?MOVXA,@Ri(4)?MCS-51單片機(jī)有七種尋址方式,其中:MOVA,direct指令的源操作數(shù)屬于

尋址方式。A.間接 B.變址 C.相對(duì) D.直接(5)指令JZNEXT的作用是

。A.當(dāng)CY標(biāo)志為0時(shí)跳轉(zhuǎn)到NEXT語(yǔ)句執(zhí)行B.當(dāng)累加器A內(nèi)容不為全0時(shí)跳轉(zhuǎn)到NEXT語(yǔ)句執(zhí)行C.當(dāng)累加器A內(nèi)容為全0時(shí)跳轉(zhuǎn)到NEXT語(yǔ)句執(zhí)行D.當(dāng)CY標(biāo)志為1時(shí)跳轉(zhuǎn)到NEXT語(yǔ)句執(zhí)行(6)將外部數(shù)據(jù)存儲(chǔ)單元的內(nèi)容傳送到累加器A中的指令是

。A.MOVXA,@A+DPTRB.?MOVA,@R0C.MOVCA,@A+DPTRD.?MOVXA,@DPTR(7)在指令MOV30H,#55H中,30H是

。A.指令的操作碼 B.操作數(shù) C.操作數(shù)的目的地址 D.機(jī)器碼(8)在下列指令中,屬判位轉(zhuǎn)移的指令是

。A.?AJMPaddr11 B.?CJNEA,direct,relC.?DJNZRn,rel D.?JNCrel(9)?8031有4組工作寄存器區(qū),將當(dāng)前工作寄存器設(shè)置為第2組應(yīng)使用的指令是

。A.?SETBRS0和CLRRS1 B.?SETBRS0和SETBRS1C.?CLRRS0和CLRRS1 D.?CLRRS0和SETBRS1(10)?MCS-51單片機(jī)中,下一條將要執(zhí)行的指令地址存放在

中。A.?SP B.?DPTR C.?PCD.?PSW(11)當(dāng)執(zhí)行DAA指令時(shí),CPU將根據(jù)

的狀態(tài)自動(dòng)調(diào)整,使ACC的值為正確的BCD碼。A.?CY B.?MOV20H,R4C.?C

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論