版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第2章MCS-51單片機(jī)指令系統(tǒng)與匯編語(yǔ)言程序設(shè)計(jì)主要內(nèi)容:MCS-51單片機(jī)的尋址方式、指令系統(tǒng)、基本程序結(jié)構(gòu)及匯編語(yǔ)言程序的開(kāi)發(fā)與調(diào)試。重點(diǎn):尋址方式、各種指令的應(yīng)用、程序設(shè)計(jì)的規(guī)范、程序設(shè)計(jì)的思想及典型程序的理解和掌握。難點(diǎn):控制轉(zhuǎn)移、位操作指令的理解,各種指令的靈活應(yīng)用,程序設(shè)計(jì)的基本方法以及針對(duì)具體的硬件設(shè)計(jì)出最合理的軟件。要求:抽時(shí)間自學(xué)Keil,C51。第2章MCS-51單片機(jī)指令系統(tǒng)與匯編語(yǔ)言程序設(shè)計(jì)主要內(nèi)1第2章MCS-51單片機(jī)指令系統(tǒng)與匯編語(yǔ)言程序設(shè)計(jì)2.1概述2.2MCS-51單片機(jī)的尋址方式2.3MCS-51單片機(jī)的指令系統(tǒng)2.4匯編語(yǔ)言及程序設(shè)計(jì)2.5程序設(shè)計(jì)舉例2.6匯編語(yǔ)言的開(kāi)發(fā)環(huán)境第2章MCS-51單片機(jī)指令系統(tǒng)與2.1概述2指令系統(tǒng):一臺(tái)計(jì)算機(jī)所能識(shí)別、執(zhí)行的指令的集合。機(jī)器語(yǔ)言:指令系統(tǒng)是一套控制計(jì)算機(jī)執(zhí)行操作的二進(jìn)制編碼,稱(chēng)為機(jī)器語(yǔ)言。特點(diǎn):機(jī)器語(yǔ)言指令是計(jì)算機(jī)惟一能直接識(shí)別和執(zhí)行的指令。
匯編語(yǔ)言:利用指令助記符來(lái)描述指令系統(tǒng)的一套計(jì)算機(jī)指令。特點(diǎn):計(jì)算機(jī)的指令系統(tǒng)一般都是利用匯編語(yǔ)言描述的,是由計(jì)算機(jī)硬件設(shè)計(jì)所決定的。指令系統(tǒng)沒(méi)有通用性。2.1概述
單片機(jī)一般是空機(jī),未含任何系統(tǒng)軟件。因此在第一次使用前,必須對(duì)其進(jìn)行編程。指令系統(tǒng):一臺(tái)計(jì)算機(jī)所能識(shí)別、執(zhí)行的指令的集合。2.1概3指令:計(jì)算機(jī)用于控制各功能部件完成某一指定動(dòng)作的指示和命令。識(shí)別指令的標(biāo)志——指令的表示形式:
(1)指令的二進(jìn)制形式
機(jī)器碼、源程序的目標(biāo)代碼——二進(jìn)制。特點(diǎn):直接為計(jì)算機(jī)識(shí)別和執(zhí)行。讀/寫(xiě)和記憶困難。(2)指令的十六進(jìn)制形式
指令的十六進(jìn)代碼需翻譯成二進(jìn)制代碼才能被計(jì)算機(jī)識(shí)別和執(zhí)行。特點(diǎn):方便讀,寫(xiě)和記憶困難。
(3)指令助記符
用英文字母、單詞表征指令的功能。其源程序必須翻譯成機(jī)器碼(目標(biāo)代碼)才能被計(jì)算機(jī)識(shí)別和執(zhí)行。特點(diǎn):方便讀/寫(xiě)和記憶。指令:計(jì)算機(jī)用于控制各功能部件完成某一指定動(dòng)作的指示和命令。42.1.1匯編語(yǔ)言指令格式與偽指令2.1.2指令的分類(lèi)2.1.3指令中的常用符號(hào)2.1概述
2.1.1匯編語(yǔ)言指令格式與偽指令2.1概述52.1.1匯編語(yǔ)言指令格式與偽指令
1.常用單位與術(shù)語(yǔ)位(bit):計(jì)算機(jī)所能表示的最小的、最基本的數(shù)據(jù)單位,指一個(gè)二進(jìn)制位。字節(jié)(Byte):一個(gè)連續(xù)的8位二進(jìn)制數(shù)碼,1Byte=8bit。字(Word):通常由16位二進(jìn)制數(shù)碼組成,即1Word=2Byte。字長(zhǎng):計(jì)算機(jī)一次處理二進(jìn)制數(shù)碼的位數(shù)。
MCS-51系列單片機(jī)都是以Intel公司最早的典型8位產(chǎn)品8051為核心,增加了一定的功能部件后構(gòu)成的。本章以8051為主介紹MCS-51系列單片機(jī)。
2.1.1匯編語(yǔ)言指令格式與偽指令1.常用單位與術(shù)語(yǔ)62.匯編語(yǔ)言指令格式
指令格式:指令的表示方式,規(guī)定了指令的長(zhǎng)度和內(nèi)部信息的安排。[標(biāo)號(hào):]操作碼[操作數(shù)][,操作數(shù)][;注釋]其中:[]項(xiàng)是可選項(xiàng)。標(biāo)號(hào)(符號(hào)地址):本條指令起始地址的符號(hào),代表該條指令在程序編譯時(shí)的具體地址。操作碼(助記符):英文字母、單詞表征指令,一般是對(duì)應(yīng)英文的縮寫(xiě)。特點(diǎn):規(guī)定了指令具體的操作功能,描述指令的操作性質(zhì),是指令語(yǔ)句的關(guān)鍵,是一條指令中不可缺少的內(nèi)容。操作數(shù):一個(gè)具體的數(shù)據(jù),或存放數(shù)據(jù)的地址。注釋?zhuān)横槍?duì)某指令而添加的說(shuō)明性文字,增加程序的可讀性,不產(chǎn)生可執(zhí)行的目標(biāo)代碼。2.匯編語(yǔ)言指令格式指令格式:指令的表示方式,規(guī)定了指令的7偽指令:匯編程序的控制命令。是程序員發(fā)給匯編程序的命令。功能:設(shè)置符號(hào)值、保留和初始化存儲(chǔ)空間、控制用戶(hù)程序代碼的位置。
3.偽指令
偽指令只出現(xiàn)在匯編前的源程序中,僅提供匯編用的某些控制信息,不產(chǎn)生可執(zhí)行的目標(biāo)代碼,是CPU不能實(shí)際執(zhí)行的指令。偽指令:匯編程序的控制命令。是程序員發(fā)給匯編程序的命令。功能8(1)定位偽指令ORG格式:ORGn其中:n——絕對(duì)地址,十六進(jìn)制數(shù)、標(biāo)號(hào)或表達(dá)式。功能:規(guī)定編譯后的機(jī)器代碼存放的起始位置。規(guī)定:在一個(gè)匯編語(yǔ)言源程序中允許存在多條定位偽指令,但每一個(gè)n值都應(yīng)和前面生成的機(jī)器指令存放地址不重疊。例如:
ORG1000H START:MOVA,#20H MOVB,#30H┇(1)定位偽指令ORG格式:ORGn9(2)結(jié)束匯編偽指令END格式:[標(biāo)號(hào):]END[表達(dá)式]功能:源程序的匯編到此結(jié)束,其后的任何內(nèi)容不予理睬。放在匯編語(yǔ)言源程序的末尾。(3)賦值偽指令EQU格式:字符名稱(chēng)xEQU賦值項(xiàng)n功能:將賦值項(xiàng)n的值賦予字符名稱(chēng)x。程序中凡出現(xiàn)該字符名稱(chēng)x就等同于該賦值項(xiàng)n,其值在整個(gè)程序中有效。規(guī)定:在使用時(shí),必須先賦值后使用。賦值項(xiàng)n可以是常數(shù)、地址、標(biāo)號(hào)或表達(dá)式。
“字符名稱(chēng)”與“標(biāo)號(hào)”表示形式的區(qū)別:“字符名稱(chēng)”后無(wú)冒號(hào),而“標(biāo)號(hào)”后面有冒號(hào)。(2)結(jié)束匯編偽指令END“字符名稱(chēng)”與“標(biāo)號(hào)”表示形式的10(4)定義字節(jié)偽指令DB格式:[標(biāo)號(hào):]DBx1,x2,…,xn功能:將8位數(shù)據(jù)(數(shù)據(jù)組)x1,x2,…,xn順序存放在從當(dāng)前程序存儲(chǔ)器地址開(kāi)始的存儲(chǔ)單元中。規(guī)定:xi——8位常數(shù)(00H~FFH)、ASCII碼(字符在單引號(hào)內(nèi))、表達(dá)式,字符串(在單引號(hào)內(nèi),長(zhǎng)度≤80個(gè)字符)。兩個(gè)數(shù)據(jù)之間用逗號(hào)“,”分隔。(4)定義字節(jié)偽指令DB11(5)定義雙字節(jié)偽指令DW格式:[標(biāo)號(hào):]DWx1,x2,…,xn功能:將雙字節(jié)數(shù)據(jù)(數(shù)據(jù)組)順序存放在從標(biāo)號(hào)指定地址單元開(kāi)始的存儲(chǔ)單元中。規(guī)定:xi——16位數(shù)值常數(shù),先存高8位入低位地址單元。(6)預(yù)留存儲(chǔ)空間偽指令DS格式:[標(biāo)號(hào):]DSn功能:從標(biāo)號(hào)指定地址單元開(kāi)始,預(yù)留n個(gè)存儲(chǔ)單元。規(guī)定:匯編時(shí)不對(duì)預(yù)留存儲(chǔ)單元賦值。n——數(shù)據(jù),表達(dá)式。注意:DB、DW、DS偽指令只能對(duì)程序存儲(chǔ)器進(jìn)行賦值和初始化工作,不能用來(lái)對(duì)數(shù)據(jù)存儲(chǔ)器進(jìn)行賦值和初始化工作。
(5)定義雙字節(jié)偽指令DW格式:[標(biāo)號(hào):]DWx1,12(7)定義位地址符號(hào)偽指令BIT格式:字符名稱(chēng)xBIT位地址n功能:將位地址n的值賦予字符名稱(chēng)x。規(guī)定:程序中凡出現(xiàn)該字符名稱(chēng)x就代表該位地址。位地址n——絕對(duì)地址,符號(hào)地址。(8)數(shù)據(jù)地址賦值偽指令DATA格式:字符名稱(chēng)xDATA表達(dá)式n功能:把表達(dá)式n的值賦值給左邊的字符名稱(chēng)x。規(guī)定:
n——數(shù)據(jù)或地址,包含所定義的“字符名稱(chēng)x”在內(nèi)的表達(dá)式,但不能為匯編符號(hào)。DATA與EQU的主要區(qū)別是:EQU必須先定義后使用,DATA無(wú)限制。EQU——源程序的開(kāi)頭,DATA——源程序的開(kāi)頭或末尾。
(7)定義位地址符號(hào)偽指令BIT132.1.2指令的分類(lèi)
MCS-51指令系統(tǒng)有111條指令,分類(lèi)如下:1.按指令字節(jié)數(shù)分類(lèi)單字節(jié)(49條),雙字節(jié)(46條),3字節(jié)(16條)。2.按指令執(zhí)行時(shí)間分類(lèi)單機(jī)器周期指令(65條)、雙機(jī)器周期指令(44條)和四機(jī)器周期指令(2條)。3.按功能分類(lèi)數(shù)據(jù)傳送指令(29條)、算術(shù)操作指令(24條)、邏輯操作指令(24條)、控制轉(zhuǎn)移指令(17條)和位操作指令(17條)。2.1.2指令的分類(lèi)MCS-51指令系統(tǒng)144.指令的字節(jié)數(shù):指令操作碼——1字節(jié);直接地址——1字節(jié),8位數(shù)據(jù)——1字節(jié),16位數(shù)據(jù)——2字節(jié);操作數(shù)中的A、B、R0~R7、C、Ri、DPTR、A+DPTR、A+PC等均隱含在操作碼中。(1)1字節(jié)指令(單字節(jié)指令)
①指令中只有操作碼。NOPRET②操作數(shù)的寄存器號(hào)隱含在指令碼中。
MOVA,Rn;指令碼11101rrrINCDPTR;指令碼A3H(2)2字節(jié)指令(雙字節(jié)指令)指令的格式:操作碼操作數(shù)(操作碼為第一字節(jié),操作數(shù)為第二字節(jié))
MOVA,#data;指令碼為01110100#data(3)3字節(jié)指令(三字節(jié)指令)
指令的格式:操作碼目的操作數(shù),源操作數(shù)(三字節(jié):操作碼,目的操作數(shù),源操作數(shù))
ANLdirect,#data;指令碼01010011direct#data4.指令的字節(jié)數(shù):15SWAPA23221232112MOV DPTR,#1000HMOV A,20HANL A,#0FHMOVCA,@A+DPTRMOV 21H,AMOV SP,#60HANL A,#0F0HMOVCA,@A+PCMOV 22H, ASJMP $注:部分特殊功能寄存器SFR占一個(gè)字節(jié)。SWAPA23221232112MOV DPTR,#10162.1.3指令中的常用符號(hào)
MCS-51指令系統(tǒng)共有44種助記符,類(lèi)似于8086。常用符號(hào)如下:Rn(n=0~7):工作寄存器組R0~R7中的任一個(gè)寄存器。Ri(i=0或1):工作寄存器組中用于間址的寄存器R0,R1。#data:8位直接參與操作的立即數(shù)。#data16:16位直接參與操作的立即數(shù)。direct:片內(nèi)RAM的8位單元地址。addr11:11位目的地址,主要用于ACALL和AJMP指令中。addr16:16位目的地址,主要用于LCALL和LJMP指令中。rel:8位二進(jìn)制地址偏移量(補(bǔ)碼),取值范圍為128~+127,主要用于相對(duì)轉(zhuǎn)移指令,以形成轉(zhuǎn)移的目的地址。DPTR:數(shù)據(jù)指針,用于寄存器間接尋址方式和變址尋址方式。2.1.3指令中的常用符號(hào)MCS-51指17bit:片內(nèi)RAM的位尋址區(qū)、可以位尋址的SFR的位地址。A(或ACC):累加器。B:B寄存器。C:PSW中的進(jìn)位標(biāo)志位Cy。:用于間接尋址寄存器指針的前綴標(biāo)志。$:當(dāng)前指令的地址。/:在位操作指令中,對(duì)該位先求反后再參與操作。(X):由X所指定的某寄存器或某單元中的內(nèi)容。((X)):由X間接尋址單元中的內(nèi)容?!褐噶畹牟僮鹘Y(jié)果是將箭頭右邊的內(nèi)容傳送到左邊?!褐噶畹牟僮鹘Y(jié)果是將箭頭左邊的內(nèi)容傳送到右邊?!拧ⅰ?、⊕:表示邏輯或、與、異或。bit:片內(nèi)RAM的位尋址區(qū)、可以位尋址的SFR的位地址。18尋址方式:說(shuō)明操作數(shù)所在地址的方法?;蛑噶畎吹刂帆@得操作數(shù)的方式。計(jì)算機(jī)在設(shè)計(jì)時(shí)決定了它的尋址方式,尋址方式越多,計(jì)算機(jī)的靈活性越強(qiáng),指令系統(tǒng)也就越復(fù)雜。MCS-51單片機(jī)的指令系統(tǒng)提供了七種尋址方式,分別為:
立即尋址、直接尋址、寄存器尋址、寄存器間接尋址、變址尋址、相對(duì)尋址和位尋址。一條指令可能含多種尋址方式。2.2MCS-51單片機(jī)的尋址方式
計(jì)算機(jī)執(zhí)行程序?qū)嶋H上是在不斷尋找操作數(shù)并進(jìn)行操作的過(guò)程。尋址方式:說(shuō)明操作數(shù)所在地址的方法。或指令按地址獲得操作數(shù)的192.2.1立即尋址
定義:立即參與操作的數(shù)據(jù)(立即數(shù))直接寫(xiě)在指令中。特點(diǎn):指令中直接含有所需8位/16位的操作數(shù)。處于指令的第二字節(jié)和第三字節(jié)的位置上。立即數(shù)表示方法:#data8,#data16。
MOVA,#2DH;(A)←立即數(shù)2DHMOVA,2DH;(A)←內(nèi)部RAM的2DH單元內(nèi)容ADDA,#05H;(A)←(A)+立即數(shù)05HMOVDPTR,#1000H;(DPTR)←立即數(shù)1000H2.2.1立即尋址定義:立即參與操作的數(shù)據(jù)(立即數(shù))直202.2.2直接尋址定義:操作數(shù)的地址直接寫(xiě)在指令中。特點(diǎn):指令中含有操作數(shù)的地址指出了參與操作的數(shù)據(jù)所存放在存儲(chǔ)器單元(位)的地址。尋址范圍:ROM、片內(nèi)RAM、SFR和位地址空間。
MOVR1,2DH;(R1)←(2DH)MOV30H,4AH;(30H)←(4AH)注意:
MOVA,SP;(A)←(SP)MOVA,81H;(A)←(SP)MOVP1,#5AH;(P1)←(#5AH)MOV90H,#5AH;(P1)←(#5AH)2.2.2直接尋址定義:操作數(shù)的地址直接寫(xiě)在指令中。212.2.3寄存器尋址定義:操作數(shù)存放在MCS-51內(nèi)部的Rn或部分專(zhuān)用寄存器中。特點(diǎn):指令中指出的寄存器的內(nèi)容作為操作數(shù)。尋址范圍:四組通用寄存器Rn(R0~R7)、部分專(zhuān)用寄存器(A,B,DPTR,Cy)。
MOVA,R7;(A)←(R7)MOV30H,B;(30H)←(B)MOVDPTR,#1000H;(DPTR)←1000H存放操作數(shù)的寄存器在指令代碼中不占據(jù)單獨(dú)的一個(gè)字節(jié),嵌入(隱含)到操作碼字節(jié)中。2.2.3寄存器尋址存放操作數(shù)的寄存器在指令代碼中不占據(jù)222.2.4寄存器間接尋址(寄存器間址)定義:指令的寄存器中存放的是操作數(shù)據(jù)的單元地址。特點(diǎn):二次尋找操作數(shù)地址的尋址方式。尋址范圍:內(nèi)部RAM低128B(只能用R0或R1),外部RAM(R0、R1,DPTR)。
MOVR1,#30H;(R1)←立即數(shù)30HMOVR1,#0FH;(30H)←立即數(shù)0FHMOVA,R1;(A)←((30H))=立即數(shù)0FH寄存器間接尋址,寄存器前邊必須加前綴符號(hào)“”,不能用于尋址特殊功能寄存器SFR。2.2.4寄存器間接尋址(寄存器間址)寄存器間接尋址,寄232.2.5變址尋址(基址加變址寄存器間接尋址)定義:操作數(shù)存放在變址寄存器(累加器A)和基址寄存器(DPTR或PC)相加形成的16位地址單元中。特點(diǎn):?jiǎn)巫止?jié)指令,指令操作碼中隱含基址寄存器和變址寄存器。執(zhí)行時(shí),基地址+偏移地址→操作數(shù)地址→操作數(shù)→完成相應(yīng)的操作。尋址范圍:ROM,主要用于查表性質(zhì)的訪問(wèn)。注意:A中存放的偏移地址的范圍為00H~FFH(無(wú)符號(hào)數(shù))。MCS-51單片機(jī)共有以下三條變址尋址指令:
MOVCA,A+PC ;(A)←((A)+(PC)+1)MOVCA,A+DPTR;(A)←((A)+(DPTR))JMPA+DPTR;(PC)←((A)+(DPTR))2.2.5變址尋址(基址加變址寄存器間接尋址)24如:(DPTR)=1234H,(A)=50H,ROM的(1284H)=65H。執(zhí)行MOVCA,A+DPTR過(guò)程:(A)+(DPTR)=1284H→(1284H)=65H→(A)=65H
如:(DPTR)=1234H,(A)=50H,252.2.6相對(duì)尋址定義:將程序計(jì)數(shù)器PC的當(dāng)前值(取出本條指令后的PC值)與+rel→新的轉(zhuǎn)移目標(biāo)地址。特點(diǎn):用于程序的相對(duì)轉(zhuǎn)移,易于生成浮動(dòng)代碼。如:
SJMPrel;(PC)←(PC)+2+rel雙字節(jié)指令
相對(duì)轉(zhuǎn)移指令的目的地址=指令地址+指令字節(jié)數(shù)+偏移量尋址范圍:ROM。相對(duì)地址偏移量(rel):8位二進(jìn)制補(bǔ)碼,范圍為128~+127。在程序中,“rel”通常用“標(biāo)號(hào)”代替。2.2.6相對(duì)尋址相對(duì)地址偏移量(rel):8位二進(jìn)制補(bǔ)26分析指令SJMP06H的執(zhí)行過(guò)程及執(zhí)行結(jié)果。執(zhí)行的過(guò)程如下圖所示。分析指令SJMP06H的執(zhí)行過(guò)程及執(zhí)行結(jié)果。272.2.7位尋址定義:指令中給出的操作數(shù)是一個(gè)可單獨(dú)尋址的位地址。特點(diǎn):直接尋址方式的一種,對(duì)8位二進(jìn)制數(shù)中的某一位的地址進(jìn)行操作。尋址范圍:片內(nèi)RAM低128B中位尋址區(qū)、部分SFR(83位)??晌粚ぶ返奈坏刂返谋硎拘问剑海?)直接使用位地址。如:
MOV00H,C;(00H)←(Cy)
其中:00H是片內(nèi)RAM中20H地址單元的第0位。2.2.7位尋址28(2)字節(jié)地址加位序號(hào)的形式。如:
MOV20H.0,C;(20H.0)←(Cy)
其中:20H.0是片內(nèi)RAM中20H地址單元的第0位。(3)位的符號(hào)地址(位名稱(chēng))的形式。
利用部分特殊功能寄存器各位的特定名稱(chēng)來(lái)訪問(wèn)該位。如:ANLC,P;(C)←(C)∧(P)
其中:P是PSW的第0位,C是PSW的第7位。(4)字節(jié)符號(hào)地址(字節(jié)名稱(chēng))加位序號(hào)的形式。利用部分特殊功能寄存器名稱(chēng)加位序號(hào)形式來(lái)訪問(wèn)該位。
如:CPLPSW.6;(AC)←()
其中:
PSW.6表示該位是PSW的第6位。(2)字節(jié)地址加位序號(hào)的形式。如:29[例題1]
指出下列指令中源操作數(shù)的尋址方式寄存器尋址立即尋址寄存器間接尋址直接尋址變址尋址相對(duì)尋址位尋址MOVA,R1;(A)←(R1)ADDA,#05H;(A)←(A)+立即數(shù)05HMOVA,R1;(A)←((R1))MOV30H,4AH;(30H)←(4AH)MOVCA,A+DPTR;(A)←((A)+(DPTR))SJMPLP;(PC)←(PC)+2+偏移量MOV65H,C;(65H)←(Cy)[例題1]指出下列指令中源操作數(shù)的尋址方式寄存器尋址立即尋302.3MCS-51單片機(jī)的指令系統(tǒng)
MCS-51指令系統(tǒng):44種助記符,33種功能,51種操作,111條指令(指令助記符與操作數(shù)的各種尋址方式的結(jié)合)。
MCS-51單片機(jī)指令系統(tǒng)按其功能可分為五類(lèi):
數(shù)據(jù)傳送類(lèi)指令算術(shù)運(yùn)算類(lèi)指令邏輯運(yùn)算和移位類(lèi)指令控制轉(zhuǎn)移類(lèi)指令位操作類(lèi)指令2.3MCS-51單片機(jī)的指令系統(tǒng)MC31學(xué)習(xí)指令系統(tǒng)時(shí),應(yīng)注意:(1)指令的格式、功能;(2)操作碼的含義,操作數(shù)的表示方法;(3)尋址方式,源、目的操作數(shù)的范圍;(4)對(duì)標(biāo)志位的影響;(5)指令的適用范圍;(6)正確估算指令的字節(jié)數(shù)。操作碼——1字節(jié)。操作數(shù)中:直接地址derict——1字節(jié),#data——1字節(jié),#data16——兩字節(jié);A、B、R0~R7、C、Ri、DPTR、A+DPTR、A+PC等均隱含在操作碼中。特殊功能寄存器SFR——一個(gè)字節(jié)。學(xué)習(xí)指令系統(tǒng)時(shí),應(yīng)注意:操作碼——1字節(jié)。操作數(shù)中:322.3MCS-51單片機(jī)的指令系統(tǒng)2.3.1數(shù)據(jù)傳送類(lèi)指令(29條)2.3.2算術(shù)運(yùn)算類(lèi)指令(24條)2.3.3邏輯運(yùn)算及移位類(lèi)指令(24條)2.3.4控制轉(zhuǎn)移類(lèi)指令(17條)2.3.5位操作(布爾操作)類(lèi)指令(17條)2.3MCS-51單片機(jī)的指令系統(tǒng)2.3.1數(shù)據(jù)傳送332.3.1數(shù)據(jù)傳送指令
最基本、最主要的操作指令。29條,可分為五類(lèi):內(nèi)部RAM間傳送:(MOV——16條)外部RAM與累加器間傳送:(MOVX——4條)ROM向累加器傳送:(MOVC——2條)數(shù)據(jù)交換:(SWAP,XCH,XCHD——5條)堆棧操作:(PUSH,POP——2條)尋址范圍:累加器A、片內(nèi)RAM、SFR、片外RAM、ROM。功能:(目的地址)←(源地址),表示為:
<dest>
←
<src>
源地址單元的內(nèi)容不變。對(duì)標(biāo)志位的影響:除以累加器A為目的操作數(shù)的數(shù)據(jù)傳送指令對(duì)P標(biāo)志位有影響外,其余均不影響標(biāo)志位。2.3.1數(shù)據(jù)傳送指令最基本、341.內(nèi)部RAM數(shù)據(jù)傳送指令(16條)格式:
MOV<dest>,<src>范圍:片內(nèi)RAM、SFR中。指令形式:按目的操作數(shù)可將內(nèi)部數(shù)據(jù)傳送指令分為五類(lèi)。(1)以累加器A為目的操作數(shù)(4條)
MOVA,<src>其中:
<src>包括Rn、Ri、direct、#data。影響P標(biāo)志。
如:MOVA,30H——(A)(30H)(2)以工作寄存器Rn為目的操作數(shù)(3條)
MOVRn,<src>
其中:<src>包括A、direct、#data。
如:MOVR7,#30H——(R7)#30H1.內(nèi)部RAM數(shù)據(jù)傳送指令(16條)35(3)以直接地址單元為目的操作數(shù)(5條)
MOVdirect,<src>
其中:
<src>包括A、Rn、Ri、direct、#data。如:
MOV30H,20H;(30H)(20H)(4)以間址寄存器Ri為目的操作數(shù)(3條)
MOVRi,<src>
其中:
<src>包括A、direct、#data。如:
MOVR1,A;((R1))(A)(5)16位數(shù)據(jù)傳送指令(1條)
MOVDPTR,#data16如:
MOVDPTR,#1000H;(DPTR)#1000H注意:(2)、(3)、(4)、(5)均不影響標(biāo)志位。(3)以直接地址單元為目的操作數(shù)(5條)36內(nèi)部數(shù)據(jù)傳送指令的傳送關(guān)系圖MCS-51允許在兩個(gè)內(nèi)部RAM的直接地址之間進(jìn)行傳送數(shù)據(jù),不允許在兩個(gè)工作寄存器之間直接進(jìn)行傳送數(shù)據(jù)。內(nèi)部數(shù)據(jù)傳送指令的傳送關(guān)系圖MCS-51允許在兩個(gè)內(nèi)部RAM372.外部RAM數(shù)據(jù)傳送指令(4條)
特點(diǎn):只能通過(guò)A,采用寄存器間址(R0,R1和DPTR)。指令格式:
MOVXA,<src>MOVX<dest>,A
其中:<src>、<dest>包括DPTR、Ri(R0,R1)
。Ri——片外RAM的低256個(gè)單元;DPTR——片外RAM。對(duì)標(biāo)志位的影響:MOVXA,<src>——只影響P標(biāo)志;MOVX<dest>,A——不影響標(biāo)志位。
如:
MOVXA,R1;(A)((R1))
MOVXDPTR,A;((DPTR))(A)2.外部RAM數(shù)據(jù)傳送指令(4條)特點(diǎn):只能通過(guò)A,采用寄383.程序存儲(chǔ)器(ROM)數(shù)據(jù)傳送指令(查表指令)(2條)
特點(diǎn):?jiǎn)蜗騻魉停荒茏x到累加器A中。專(zhuān)用于查表。指令格式:MOVCA,A+DPTP;(A)←((A)+(DPTR))MOVCA,A+PC;(PC)←(PC)+1(A)←((A)+(PC))
兩條指令的異同:功能相同,使用中存在著差異。(1)查表的位置要求不同A+DPTR(遠(yuǎn)程查表):表可放在64KBROM的任何地址,使用方便。A+PC(近程查表):表只能放在ROM中查表指令后的256B的地址空間中。3.程序存儲(chǔ)器(ROM)數(shù)據(jù)傳送指令(查表指令)(2條)特39(2)偏移量的計(jì)算方法不同①查表地址:A+DPTP(遠(yuǎn)程查表):(A)+(DPTR)。A+PC(近程查表):(A)+(PC)+1②偏移量的計(jì)算方法:A+DPTP(遠(yuǎn)程查表):A為欲查數(shù)距離表首地址的值。A+PC(近程查表):A的值必須預(yù)先設(shè)置為:A←表首地址-當(dāng)前指令的PC值-1這兩條指令到程序設(shè)計(jì)時(shí)再詳細(xì)講解。
(2)偏移量的計(jì)算方法不同404.?dāng)?shù)據(jù)交換指令(5條)功能:保存目的操作數(shù)。分兩類(lèi):(1)半字節(jié)數(shù)據(jù)交換指令(2條)
指令格式:
SWAPA;(A)3~0←→(A)7~4
XCHDA,Ri;(A)3~0←→((Ri))3~0
(2)字節(jié)交換指令(3條)
指令格式:XCHA,<src>
其中:
<src>包括Rn、Ri、direct。4.?dāng)?shù)據(jù)交換指令(5條)功能:保存目的操作數(shù)。分兩類(lèi):415.堆棧操作指令(2條)指令格式:
PUSHdirect;SP←(SP)+1,((SP))←(direct)POPdirect;(direct)←((SP)),SP←(SP)1特點(diǎn):特殊的數(shù)據(jù)傳送指令,根據(jù)SP中的棧頂?shù)刂愤M(jìn)行操作。實(shí)質(zhì):以棧指針SP為間址寄存器的間址尋址方式。注意:堆棧區(qū)應(yīng)避開(kāi)使用的工作寄存器區(qū)和其他需要使用的數(shù)據(jù)區(qū),系統(tǒng)復(fù)位后,SP的初始值為07H。一般初始化時(shí)要重新設(shè)置SP。
5.堆棧操作指令(2條)指令格式:PUSHdirect42堆棧區(qū)如:已知:(40H)=0F0H;(41H)=11H;(SP)=60H執(zhí)行下面程序PUSH40HPUSH41HPOP42HPOP43H堆棧指令工作過(guò)程
SPSPSPF0H11H數(shù)據(jù)區(qū)43H42H41H40HF0H11H11HF0H堆棧區(qū)如:已知:(40H)=0F0H;(41H)=11H43如:設(shè)(A)=7BH;(35H)=11H已知(SP)=60H執(zhí)行下面程序,則:PUSHACCPUSH35HPOPACCPOP5AH;(61H)#7BH;(62H)(35H)即:(62H)#11H;(A)(62H)即:(A)#11H;(5AH)(61H)即:(5AH)#7BH這是字節(jié)交換的一種方式。如:設(shè)(A)=7BH;(35H)=11H;(61H)442.3.2算術(shù)運(yùn)算指令
(24條)操作數(shù):目的操作數(shù)A中;源操作數(shù)在Rn、片內(nèi)RAM(direct,Ri)中,或#data。算術(shù)運(yùn)算指令可分為:加法運(yùn)算:
(ADD——4條)帶進(jìn)位加法運(yùn)算:
(ADDC——4條)帶借位減法運(yùn)算:
(SUBB——4條)加1/減1操作:
(INC,DEC——9條)單字節(jié)乘/除法運(yùn)算:
(MUL,DIV——2條)十進(jìn)制調(diào)整:
(DAA——1條)2.3.2算術(shù)運(yùn)算指令(24條)操作數(shù):目的操作數(shù)A中451.加法指令(4條)指令格式:
ADDA,<src>;(A)←(A)+<src><src>包括Rn、Ri、direct、#data。對(duì)標(biāo)志位的影響:影響PSW中的所有標(biāo)志位。2.帶進(jìn)位的加法指令(4條)指令格式:
ADDCA,<src>;(A)←(A)+<src>+(Cy)<src>包括Rn、Ri、direct、#data。對(duì)標(biāo)志位的影響:影響PSW中的所有標(biāo)志位。1.加法指令(4條)指令格式:ADDA,<src>463.帶借位的減法指令(4條)
指令格式:
SUBBA,<src>;(A)←(A)-<src>-(Cy)<src>包括Rn、Ri、direct、#data。對(duì)標(biāo)志位的影響:影響PSW中的所有標(biāo)志位。
注意:MCS-51指令系統(tǒng)中無(wú)不帶借位的減法指令,
不帶借位的減法:CLRC(Cy=0)→SUBB。
3.帶借位的減法指令(4條)指令格式:SUBBA474.十進(jìn)制調(diào)整指令(BCD碼修正指令)(1條)
功能:跟在ADD、ADDC后面,對(duì)運(yùn)算結(jié)果進(jìn)行壓縮BCD碼修正,完成十進(jìn)制加法運(yùn)算功能。指令格式:DAA特點(diǎn):專(zhuān)用指令。兩個(gè)壓縮的BCD碼按二進(jìn)制數(shù)相加后必須經(jīng)本指令調(diào)整才能得到壓縮的BCD碼的和。操作數(shù):源操作數(shù)只能在累加器A中,結(jié)果存入A中。注意:只適用加法,不能對(duì)減法指令進(jìn)行修正。
4.十進(jìn)制調(diào)整指令(BCD碼修正指令)(1條)功能:跟在485.加1指令(增量指令)(5條)
功能:操作數(shù)所指定的單元的內(nèi)容加1。指令格式:INC<dest>;<dest>←<dest>+1<dest>包括A、Rn、direct、Ri、DPTR操作數(shù):只有一個(gè)操作數(shù),即是源操作數(shù)又是目的操作數(shù)。對(duì)標(biāo)志位的影響:除對(duì)累加器A操作影響P標(biāo)志位外,其余均不影響PSW的各標(biāo)志位。
6.減1指令(減量指令)(4條)
功能:操作數(shù)所指定的單元的內(nèi)容減1。指令格式:DEC<dest>;<dest>←<dest>-1<dest>包括A、Rn、direct、Ri。(DPTR無(wú)減1)操作數(shù):只有一個(gè)操作數(shù)。對(duì)標(biāo)志位的影響:同加1指令。5.加1指令(增量指令)(5條)功能:操作數(shù)所指定的單元497.乘除指令(2條)
功能:實(shí)現(xiàn)乘法或除法操作。特點(diǎn):在指令系統(tǒng)中執(zhí)行時(shí)間最長(zhǎng),均為四周期指令。指令格式:
MULAB;(B)(A)←(A)×(B)DIVAB;(A)←(A)/(B)…(B)對(duì)標(biāo)志位的影響:影響PSW中的Cy,OV,P標(biāo)志位,注意乘除運(yùn)算后結(jié)果保存的位置!7.乘除指令(2條)功能:實(shí)現(xiàn)乘法或除法操作。502.3.3邏輯運(yùn)算和移位指令(24條)對(duì)標(biāo)志位的影響:除了兩條帶進(jìn)位的循環(huán)移位指令外,其余均不影響PSW中的各標(biāo)志位;目的操作數(shù)是A時(shí)影響P標(biāo)志位。分類(lèi):5種,24條。邏輯與運(yùn)算:(ANL——6條)邏輯或運(yùn)算:(ORL——6條)邏輯異或運(yùn)算:(XRL——6條)累加器清零/取反:(CLR,CPL——2條)累加器移位操作:(RL,RLC,RR,RRC—4條)功能:邏輯運(yùn)算,模擬各種數(shù)字邏輯電路的功能,進(jìn)行邏輯電路的設(shè)計(jì)。2.3.3邏輯運(yùn)算和移位指令(24條)對(duì)標(biāo)志位的影響511.邏輯與運(yùn)算指令(6條)功能:實(shí)現(xiàn)兩個(gè)操作數(shù)的邏輯與。指令格式:ANLA,<src>;
<src>包括Rn、Ri、direct、#dataANLdirect,<src>
;
<src>包括A、#data適用場(chǎng)合:邏輯與,用于操作數(shù)的某些位不變(這些位與“1”),某些位置0(這些位與“0”)。2.邏輯或運(yùn)算指令(6條)功能:實(shí)現(xiàn)兩個(gè)操作數(shù)的邏輯或。指令格式:ORLA,<src>;
<src>包括Rn、Ri、direct、#data
ORLdirect,<src>;
<src>包括A、#data適用場(chǎng)合:邏輯或,用于操作數(shù)的某些位不變(這些位或“0”),某些位置1(這些位或“1”)。1.邏輯與運(yùn)算指令(6條)523.邏輯異或運(yùn)算指令(6條)功能:兩個(gè)操作數(shù)的邏輯異或。指令格式:XRLA,<src>;
<src>包括Rn、Ri、direct、#data
XRLdirect,<src>;
<src>包括A、#data適用場(chǎng)合:邏輯異或,用于操作數(shù)的某些位不變(這些位異或“0”),某些位取反(這些位異或“1”)。4.循環(huán)移位指令(4條)不帶進(jìn)位的循環(huán)左、右移位(操作碼為RL,RR)帶進(jìn)位的循環(huán)左、右移位(操作碼為RLC,RRC)特點(diǎn):只能對(duì)累加器A進(jìn)行循環(huán)移位。指令格式:
操作碼A功能:A中的數(shù)據(jù)逐位左移1位——乘2,逐位右移1位——除以2。3.邏輯異或運(yùn)算指令(6條)535.累加器清0與取反指令(2條)
指令格式:CLRA;(A)←00H
CPLA;(A)←()特點(diǎn):節(jié)省存儲(chǔ)空間,提高程序執(zhí)行效率。
對(duì)標(biāo)志位的影響:CLR只影響P標(biāo)志位,CPL不影響標(biāo)志位。
循環(huán)移位指令示意圖5.累加器清0與取反指令(2條)循542.3.4控制轉(zhuǎn)移指令(17條)功能:改變PC中的內(nèi)容,控制程序執(zhí)行的流向,實(shí)現(xiàn)程序分支轉(zhuǎn)向。分類(lèi):4種,17條。無(wú)條件轉(zhuǎn)移:(LJMP,AJMP,SJMP,JMP——4條)條件轉(zhuǎn)移(判斷跳轉(zhuǎn)):(JZ,JNZ,CJNE,DJNZ——8條)子程序調(diào)用及返回:(LCALL,ACALL,RET,RETI——4條)空操作:
(NOP——1條)“耗時(shí)”一個(gè)機(jī)器周期。
對(duì)標(biāo)志位的影響:除了CJNE影響Cy外,其余均不影響標(biāo)志位。2.3.4控制轉(zhuǎn)移指令(17條)功能:改變PC中的內(nèi)容551.無(wú)條件轉(zhuǎn)移指令(4條)定義:不規(guī)定條件的程序轉(zhuǎn)移。指令格式:
長(zhǎng)轉(zhuǎn)移指令:
LJMPaddr16;(PC)←addr15~0
絕對(duì)轉(zhuǎn)移指令:
AJMPaddr11;(PC)←(PC)+2,PC10~0←addr11
相對(duì)(短)轉(zhuǎn)移指令:SJMPrel;(PC)←(PC)+2+rel
間接(散)轉(zhuǎn)移指令:JMPA+DPTR;(PC)←(DPTR)+(A)1.無(wú)條件轉(zhuǎn)移指令(4條)56注意:(1)指令中的地址或偏移量均可采用標(biāo)號(hào),只有在執(zhí)行前才被匯編成實(shí)際的二進(jìn)制地址。(2)指令的轉(zhuǎn)移范圍:在執(zhí)行當(dāng)前轉(zhuǎn)移指令后的PC值的基礎(chǔ)上:
LJMP:
64KB
AJMP:2KB
SJMP:
-128~+127(用補(bǔ)碼表示)
JMP:
64KB注意:57(3)SJMPrel中地址偏移量rel的計(jì)算方法:rel=轉(zhuǎn)移目標(biāo)地址-轉(zhuǎn)移指令地址(當(dāng)前PC值)-2(4)原地踏步(暫停當(dāng)前的程序)的實(shí)現(xiàn)
SJMP$或LP:SJMPLP
(5)JMPA+DPTR功能:實(shí)現(xiàn)程序的分支轉(zhuǎn)移(散轉(zhuǎn)),DPTR為轉(zhuǎn)移目的的起始地址,A為轉(zhuǎn)移目的的偏移量。(6)在編程中,經(jīng)常使用短轉(zhuǎn)移指令SJMP和相對(duì)轉(zhuǎn)移指令A(yù)JMP,以便生成浮動(dòng)代碼,并不經(jīng)常使用長(zhǎng)轉(zhuǎn)移指令LJMP。
(3)SJMPrel中地址偏移量rel的計(jì)算方法:582.條件轉(zhuǎn)移指令(2條)功能:實(shí)質(zhì)上是A判零指令。在規(guī)定的條件滿(mǎn)足時(shí)進(jìn)行程序轉(zhuǎn)移,否則程序往下順序執(zhí)行。指令格式:
JZrel;若(A)=0,則轉(zhuǎn)移(PC)←(PC)+2+rel若(A)≠0,則順序執(zhí)行(PC)←(PC)+2JNZrel;若(A)≠0,則轉(zhuǎn)移(PC)←(PC)+2+rel若(A)=0,則順序執(zhí)行(PC)←(PC)+2指令的轉(zhuǎn)移范圍:rel的取值范圍為-128~+127(用補(bǔ)碼表示)。可以采用符號(hào)地址表示。偏移量rel的計(jì)算方法:
rel=轉(zhuǎn)移目標(biāo)地址-轉(zhuǎn)移指令地址(當(dāng)前PC值)-22.條件轉(zhuǎn)移指令(2條)593.比較轉(zhuǎn)移指令(4條)
指令格式:
CJNE目的操作數(shù),源操作數(shù),rel操作數(shù):目的操作數(shù)為A時(shí),源操作數(shù)為#data、direct。目的操作數(shù)為Rn、Ri時(shí),源操作數(shù)為#data;即:CJNEA,direct,relCJNEA,#data,relCJNERn,#data,relCJNERi,#data,rel(源為#data時(shí),目的為A、Rn、Ri;源為direct,目的為A。)用途:比較兩個(gè)操作數(shù)作為條件控制程序的轉(zhuǎn)移。若(目的操作數(shù))=(源操作數(shù)),則程序繼續(xù)執(zhí)行,(PC)←(PC)+3若(目的操作數(shù))>(源操作數(shù)),則程序轉(zhuǎn)移,(PC)←(PC)+rel+3,Cy←0若(目的操作數(shù))<(源操作數(shù)),則程序轉(zhuǎn)移,(PC)←(PC)+rel+3,Cy←13.比較轉(zhuǎn)移指令(4條)60功能:比較兩個(gè)操作數(shù)的大小。
對(duì)標(biāo)志位影響:影響Cy標(biāo)志位,不影響其他標(biāo)志位。指令的轉(zhuǎn)移范圍:rel的取值范圍-128~+127(用補(bǔ)碼表示)??梢圆捎梅?hào)地址表示。注意:比較是通過(guò)不存最后的差值結(jié)果的減法實(shí)現(xiàn)的,影響Cy標(biāo)志位,指令執(zhí)行后兩個(gè)操作數(shù)的內(nèi)容不變。
功能:比較兩個(gè)操作數(shù)的大小。614.循環(huán)(減1條件)轉(zhuǎn)移指令(2條)功能:減1判非0則轉(zhuǎn)移。主要用于控制循環(huán)程序的循環(huán)次數(shù)。特點(diǎn):減1與條件轉(zhuǎn)移兩種功能結(jié)合在一起。指令格式:
DJNZ<dest>,rel;<dest>←<dest>-1若<dest>≠0,則轉(zhuǎn)移(PC)←(PC)+2+rel若<dest>=0,則不轉(zhuǎn)移(PC)←(PC)+2
其中:
<dest>為Rn、direct條件轉(zhuǎn)移指令、比較轉(zhuǎn)移指令、循環(huán)(減1條件)轉(zhuǎn)移指令均為相對(duì)轉(zhuǎn)移指令,指令的轉(zhuǎn)移范圍有限-128~+127。若要實(shí)現(xiàn)64KB范圍內(nèi)的轉(zhuǎn)移,可借助于LJMP的過(guò)渡來(lái)實(shí)現(xiàn)。4.循環(huán)(減1條件)轉(zhuǎn)移指令(2條)條件轉(zhuǎn)移指令、比較轉(zhuǎn)移625.子程序調(diào)用與返回指令(4條)定義:具有完整功能的程序段定義為子程序。
功能:
供主程序在需要時(shí)調(diào)用。特點(diǎn):子程序可以在程序中反復(fù)多次使用,以簡(jiǎn)化源程序的書(shū)寫(xiě);可以嵌套,有利于模塊化程序設(shè)計(jì)。主程序調(diào)用子程序,必須有:
子程序調(diào)用指令:在主程序中使用;
子程序返回指令:子程序的最后一條指令。
調(diào)用與返回指令是成對(duì)使用的。子程序調(diào)用指令自動(dòng)實(shí)現(xiàn):PC中的斷點(diǎn)地址→堆棧,子程序入口地址→PC。子程序返回指令自動(dòng)實(shí)現(xiàn):堆棧中的斷點(diǎn)地址→PC。注意:子程序調(diào)用時(shí)應(yīng)注意入口參數(shù)設(shè)置,子程序返回時(shí)應(yīng)注意出口參數(shù)的傳遞。5.子程序調(diào)用與返回指令(4條)63主程序調(diào)用子程序兩級(jí)子程序嵌套主程序調(diào)用子程序兩級(jí)子程序嵌套64指令格式:(1)絕對(duì)短調(diào)用指令
ACALLaddr11;(PC)←(PC)+2,(SP)←(SP)+1,(SP)←(PC)7~0(SP)←(SP)+1,(SP)←(PC)15~8,(PC)10~0←addr11
其中:addr11為11位地址,實(shí)際編程時(shí)可以用符號(hào)地址,只能在2KB范圍以?xún)?nèi)調(diào)用子程序。(2)絕對(duì)長(zhǎng)調(diào)用指令
LCALLaddr16;(PC)←(PC)+3,(SP)←(SP)+1,(SP)←(PC)7~0(SP)←(SP)+1,(SP)←(PC)15~8,(PC)15~0←addr16
其中:addr16為16位地址,實(shí)際編程時(shí)可以用符號(hào)地址。可以在64KB范圍以?xún)?nèi)調(diào)用子程序。指令格式:65(3)子程序返回指令
RET;(PC)15~8←((SP)),(SP)←(SP)1,(PC)7~0←((SP)),(SP)←(SP)1(4)中斷返回指令RETI;(PC)15~8←((SP)),(SP)←(SP)1,(PC)7~0←((SP)),(SP)←(SP)1注:中斷服務(wù)程序是一種特殊的子程序,它是在計(jì)算機(jī)響應(yīng)中斷時(shí),由硬件完成調(diào)用而進(jìn)入相應(yīng)的中斷服務(wù)程序。RETI與RET:指令相仿,都是子程序執(zhí)行的最后一條指令。區(qū)別在于RET是從子程序返回,RETI是從中斷服務(wù)程序返回。(3)子程序返回指令666.空操作指令NOP(1條)指令格式:
NOP;(PC)←(PC)+1功能:不執(zhí)行任何操作,消耗了一個(gè)機(jī)器周期。適用場(chǎng)合:常用于軟件延時(shí)或在程序可靠性設(shè)計(jì)中用來(lái)穩(wěn)定程序。特點(diǎn):NOP占據(jù)一個(gè)單元的存儲(chǔ)空間,除了使PC的內(nèi)容加1外,CPU不產(chǎn)生任何操作結(jié)果,只是消耗了一個(gè)機(jī)器周期。6.空操作指令NOP(1條)672.3.5位操作指令
位操作(布爾變量操作):操作數(shù)不是字節(jié),而是字節(jié)中的某個(gè)位。每位的取值只能取0或1。尋址范圍:片內(nèi)RAM位尋址區(qū)20H~2FH,SFR中的可尋址位。特點(diǎn):以進(jìn)位標(biāo)志Cy作為位累加器,可以實(shí)現(xiàn)布爾變量的傳送、運(yùn)算和控制轉(zhuǎn)移等功能。
2.3.5位操作指令位操作(布爾變量操作):操作數(shù)不是68分類(lèi):以位為單位進(jìn)行邏輯運(yùn)算及操作,可分為4種:位傳送:(MOV——2條)位清零/置位:(CLR,SETB——4條)位邏輯與/或/非運(yùn)算:(ANL,ORL,CPL——6條)位條件轉(zhuǎn)移:
(JC,JNC,JB,JNB,JBC——5條)指令中的位地址的表達(dá)方式:直接地址方式(如0AFH)、字節(jié)地址.位序號(hào)(如0D0H.0)、位名稱(chēng)方式(如F0)、特殊功能寄存器名.位序號(hào)(如PSW.3)等幾種方式。
分類(lèi):以位為單位進(jìn)行邏輯運(yùn)算及操作,可分為4種:691.位數(shù)據(jù)傳送指令(2條)特點(diǎn):在可尋址位與位累加器Cy之間進(jìn)行的。不能在兩個(gè)可尋址位間直接進(jìn)行傳送。
指令格式:MOVC,bit;(Cy)←(bit)MOVbit,C;(bit)←(Cy)1.位數(shù)據(jù)傳送指令(2條)702.位邏輯操作指令(6條)指令格式:操作碼C,<src>;操作碼包括ANL、ORL,<src>包括bit、/bit。
CPL<dest>;<dest>←
;CPL表示取反,<dest>包括Cy、bit。功能:位邏輯操作,組合邏輯電路模擬。采用位操作指令進(jìn)行組合邏輯電路的設(shè)計(jì)比采用字節(jié)型邏輯指令節(jié)約存儲(chǔ)空間,運(yùn)算操作十分方便。3.位狀態(tài)(置位、清0)控制指令(4條)
指令格式:CLR<dest>;<dest>←0SETB<dest>;<dest>←1
;<dest>包括Cy、bit。2.位邏輯操作指令(6條)714.位條件(控制)轉(zhuǎn)移指令(5條)
特點(diǎn):以位的狀態(tài)作為實(shí)現(xiàn)程序轉(zhuǎn)移的判斷條件。指令格式:(1)以進(jìn)位標(biāo)志位Cy內(nèi)容為條件的轉(zhuǎn)移指令
JCrel;若(Cy)=1,則轉(zhuǎn)移(PC)←(PC)+2+rel,否則順序執(zhí)行JNCrel;若(Cy)=0,則轉(zhuǎn)移(PC)←(PC)+2+rel,否則順序執(zhí)行(2)以位地址bit內(nèi)容為條件的轉(zhuǎn)移指令JBbit,rel;若(bit)=1,則轉(zhuǎn)移(PC)←(PC)+3+rel,否則順序執(zhí)行JNBbit,rel;若(bit)=0,則轉(zhuǎn)移(PC)←(PC)+3+rel,否則順序執(zhí)行JBCbit,rel;若(bit)=1,則轉(zhuǎn)移(PC)←(PC)+3+rel,且(bit)←0,否則順序執(zhí)行4.位條件(控制)轉(zhuǎn)移指令(5條)722.4匯編語(yǔ)言及程序設(shè)計(jì)
程序設(shè)計(jì):編制計(jì)算機(jī)的程序。應(yīng)用計(jì)算機(jī)所能識(shí)別的、接受的語(yǔ)言把要解決的問(wèn)題的步驟有序地描述出來(lái)。程序設(shè)計(jì)語(yǔ)言的種類(lèi):(1)機(jī)器語(yǔ)言:用二進(jìn)制代碼表示的計(jì)算機(jī)惟一能識(shí)別和執(zhí)行的最原始的程序設(shè)計(jì)語(yǔ)言。
(2)匯編語(yǔ)言:利用指令助記符描述的程序設(shè)計(jì)語(yǔ)言。(3)高級(jí)語(yǔ)言:用接近于人的自然語(yǔ)言描述的程序設(shè)計(jì)語(yǔ)言,是面向過(guò)程而獨(dú)立于機(jī)器的通用語(yǔ)言。2.4匯編語(yǔ)言及程序設(shè)計(jì)程序設(shè)計(jì):編制計(jì)算機(jī)的程序。應(yīng)73匯編語(yǔ)言的指令類(lèi)型:(1)基本指令:即指令系統(tǒng)中的指令。可執(zhí)行指令,每一條指令都有對(duì)應(yīng)的機(jī)器碼。(2)偽指令:匯編時(shí)用于控制匯編的指令。非執(zhí)行指令,無(wú)指令機(jī)器碼。匯編語(yǔ)言的語(yǔ)句格式:[標(biāo)號(hào):]操作碼[操作數(shù)][,操作數(shù)][;注釋]數(shù)據(jù)的表示方法:(1)二進(jìn)制數(shù):由0、1組成,“逢2進(jìn)1”的數(shù)制。(0~1,后綴B)(2)十六進(jìn)制數(shù):便于讀寫(xiě)記憶的二進(jìn)制數(shù)的簡(jiǎn)寫(xiě)形式。(0~9,A~F,后綴:H)(3)十進(jìn)制數(shù):可用二進(jìn)制數(shù)表示(也稱(chēng)為BCD碼,0~9表示為:0000~1001B),也可用十進(jìn)制數(shù)表示(后綴D或無(wú)后綴)。匯編語(yǔ)言的指令類(lèi)型:742.4匯編語(yǔ)言及程序設(shè)計(jì)2.4.1匯編語(yǔ)言程序設(shè)計(jì)的步驟2.4.2順序程序設(shè)計(jì)2.4.3分支程序設(shè)計(jì)2.4.4循環(huán)程序設(shè)計(jì)2.4.5查表程序設(shè)計(jì)2.4.6子程序設(shè)計(jì)2.4匯編語(yǔ)言及程序設(shè)計(jì)2.4.1匯編語(yǔ)言程序設(shè)計(jì)的752.4.1匯編語(yǔ)言程序設(shè)計(jì)的步驟
匯編語(yǔ)言程序設(shè)計(jì):根據(jù)任務(wù)要求,采用匯編語(yǔ)言編制程序的過(guò)程。匯編語(yǔ)言程序設(shè)計(jì)的步驟:
(1)擬訂設(shè)計(jì)任務(wù)書(shū)(2)建立數(shù)學(xué)模型(3)確定算法(4)分配內(nèi)存單元,編制程序流程圖(5)編制源程序:合理分配存儲(chǔ)器單元、I/O接口地址;明確各程序之間的相互關(guān)系;編寫(xiě)注釋。(6)上機(jī)調(diào)試(7)程序優(yōu)化2.4.1匯編語(yǔ)言程序設(shè)計(jì)的步驟匯編語(yǔ)言程序設(shè)計(jì):根據(jù)76編制程序流程圖:用各種圖形、符號(hào)、指向線等來(lái)說(shuō)明程序設(shè)計(jì)的過(guò)程。編制程序流程圖通用的圖形符號(hào)編制程序流程圖:用各種圖形、符號(hào)、指向線等來(lái)說(shuō)明程序設(shè)計(jì)的過(guò)772.4.2順序程序設(shè)計(jì)
特點(diǎn):最簡(jiǎn)單、最基本的程序設(shè)計(jì)。順序執(zhí)行每一條指令??蔀閺?fù)雜程序的子程序。[例題1]
將片內(nèi)RAM30H單元中的兩位壓縮BCD碼轉(zhuǎn)換成二進(jìn)制數(shù)送到片內(nèi)RAM40H單元中。解:兩位壓縮BCD碼轉(zhuǎn)換成二進(jìn)制數(shù)的算法為:(a1a0)BCD=10×a1+a0
2.4.2順序程序設(shè)計(jì)特點(diǎn):最簡(jiǎn)單、最基本的程序設(shè)計(jì)。78程序設(shè)計(jì)過(guò)程程序設(shè)計(jì)過(guò)程792.4.3分支程序設(shè)計(jì)特點(diǎn):根據(jù)條件,確定程序的走向。采用指令:條件轉(zhuǎn)移指令、比較轉(zhuǎn)移指令和位轉(zhuǎn)移指令。分支程序的設(shè)計(jì)要點(diǎn)如下:(1)建立可供轉(zhuǎn)移指令測(cè)試的條件;(2)選用合適的轉(zhuǎn)移指令;(3)在轉(zhuǎn)移的目的地址處設(shè)定標(biāo)號(hào)。2.4.3分支程序設(shè)計(jì)特點(diǎn):根據(jù)條件,確定程序的走向。分80解:此題有三個(gè)條件,所以有三個(gè)分支程序。這是一個(gè)三分支歸一的條件轉(zhuǎn)移問(wèn)題。X是有符號(hào)數(shù),判斷符號(hào)位是0還是1可利用JB或JNB指令。判斷X是否等于0則直接可以使用累加器A的判0指令。[例題2]
求符號(hào)函數(shù)的值。已知片內(nèi)RAM的40H單元內(nèi)有一自變量X,編制程序按如下條件求函數(shù)Y的值,并將其存入片內(nèi)RAM的41H單元中。
1 X>0 Y= 0 X=0 -1 X<0解:此題有三個(gè)條件,所以有三個(gè)分支程序。這是一個(gè)三分支歸一的81程序設(shè)計(jì)過(guò)程程序設(shè)計(jì)過(guò)程822.4.4循環(huán)程序設(shè)計(jì)特點(diǎn):程序中含有可以重復(fù)執(zhí)行的程序段(循環(huán)體)。作用:有效地縮短程序,減少程序占用的內(nèi)存空間,使程序的結(jié)構(gòu)緊湊、可讀性好。組成:(1)循環(huán)初始化:位于開(kāi)頭,循環(huán)前的準(zhǔn)備工作。包括設(shè)置各工作單元的初始值以及循環(huán)次數(shù)等。(2)循環(huán)體:位于循環(huán)體內(nèi),循環(huán)程序的主體(工作程序),多次重復(fù)使用。要求編寫(xiě)簡(jiǎn)練,提高程序的執(zhí)行速度。(3)循環(huán)控制:位于循環(huán)體內(nèi),包括循環(huán)修改、循環(huán)次數(shù)修改、條件語(yǔ)句等,控制循環(huán)次數(shù)和修改每次循環(huán)時(shí)的參數(shù)。(4)循環(huán)結(jié)束:位于結(jié)尾,存放程序結(jié)果,恢復(fù)各工作單元。2.4.4循環(huán)程序設(shè)計(jì)特點(diǎn):程序中含有可以重復(fù)執(zhí)行的程序83循環(huán)程序的結(jié)構(gòu):先處理后控制先控制后處理循環(huán)程序的結(jié)構(gòu):先處理后控制先控制后處理84
循環(huán)程序按結(jié)構(gòu)可分為單重循環(huán)與多重循環(huán)1.單重循環(huán)程序定義:循環(huán)體內(nèi)部不包括其他循環(huán)的程序。[例題3]
已知片內(nèi)RAM30H~3FH單元中存放了16個(gè)二進(jìn)制無(wú)符號(hào)數(shù),編制程序求它們的累加和,并將其和數(shù)存放在R4,R5中。解:每次求和的過(guò)程相同,可以用循環(huán)程序?qū)崿F(xiàn);16個(gè)二進(jìn)制無(wú)符號(hào)數(shù)求和,循環(huán)程序的循環(huán)次數(shù)應(yīng)為16次(存放在R2中);和放在R4,R5中(R4存高8位,R5存低8位)。循環(huán)程序按結(jié)構(gòu)可分為單重循環(huán)與多重循環(huán)[例題85程序設(shè)計(jì)過(guò)程程序設(shè)計(jì)過(guò)程86[例題4]
編制程序?qū)⑵瑑?nèi)RAM的30H~4FH單元中的內(nèi)容傳送至片外RAM的2000H開(kāi)始的單元中。解:每次傳送數(shù)據(jù)的的過(guò)程相同——循環(huán)程序。30H~4FH共32個(gè)單元,循環(huán)次數(shù)應(yīng)為32次——R2中,為了方便每次傳送數(shù)據(jù)時(shí)地址的修改——間接尋址,送片內(nèi)RAM數(shù)據(jù)區(qū)首地址——R0,片外RAM數(shù)據(jù)區(qū)首地址——DPTR。[例題4]編制程序?qū)⑵瑑?nèi)RAM的30H~4FH單元中的內(nèi)容87程序設(shè)計(jì)過(guò)程程序設(shè)計(jì)過(guò)程882.多重循環(huán)程序(循環(huán)嵌套)定義:循環(huán)中還包括有循環(huán)。
[例題5]
編制程序設(shè)計(jì)50ms延時(shí)程序。單片機(jī)主頻12MHz。解:延時(shí)程序與MCS-51指令執(zhí)行時(shí)間(機(jī)器周期數(shù))和晶振頻率fOSC有直接的關(guān)系;當(dāng)fOSC=12MHz時(shí),機(jī)器周期為1s,執(zhí)行一條DJNZ指令需要2個(gè)機(jī)器周期,時(shí)間為2s;50ms÷2s>255,單重循環(huán)程序無(wú)法實(shí)現(xiàn),采用雙重循環(huán)。2.多重循環(huán)程序(循環(huán)嵌套)定義:循環(huán)中還包括有循環(huán)。
[89程序設(shè)計(jì)過(guò)程延時(shí)時(shí)間為:(2×123+1+2+1)×200+2+1=50.003ms
程序設(shè)計(jì)過(guò)程延時(shí)時(shí)間為:(2×123+1+2+1)×2903.設(shè)計(jì)循環(huán)程序時(shí)應(yīng)注意的問(wèn)題(1)有始有終,循環(huán)執(zhí)行的條件,避免從循環(huán)體外直接轉(zhuǎn)到循環(huán)體內(nèi)部。(2)多重循環(huán)程序從外向內(nèi)進(jìn)入,結(jié)束時(shí)由內(nèi)向外退出。只允許外循環(huán)嵌套內(nèi)循環(huán)。不允許循環(huán)相互交叉及從循環(huán)程序的外部跳入內(nèi)部。(3)確定程序結(jié)構(gòu),處理好邏輯關(guān)系。第一次執(zhí)行情況→畫(huà)出重復(fù)執(zhí)行的程序框圖→循環(huán)初值→循環(huán)控制。(4)優(yōu)化循環(huán)體,改進(jìn)算法、優(yōu)選指令,縮短程序執(zhí)行時(shí)間。3.設(shè)計(jì)循環(huán)程序時(shí)應(yīng)注意的問(wèn)題914.排序程序設(shè)計(jì)(冒泡法)
[例題6]
設(shè)MCS-51單片機(jī)內(nèi)部RAM起始地址為30H的數(shù)據(jù)塊中共存有64個(gè)無(wú)符號(hào)數(shù),編制程序使它們按從小到大的順序排列。解:設(shè)64個(gè)無(wú)符號(hào)數(shù)在數(shù)據(jù)塊中的順序?yàn)椋篹64,e63,…,e2,e1,排序方法很多,現(xiàn)以經(jīng)典的冒泡法為例進(jìn)行介紹。冒泡法(兩兩比較法):
e64和e63比較→e64>e63→交換,否則不交換→e63和e62比較,是否交換→一直比較N01=63次→e1位置為數(shù)據(jù)塊中最大值。一個(gè)氣泡從水底冒出來(lái)——冒泡法4.排序程序設(shè)計(jì)(冒泡法)[例題6]設(shè)MCS-51單片機(jī)92
第二次冒泡過(guò)程同第一次,冒泡后在e2位置為數(shù)據(jù)塊中的次大數(shù)。e1中為最大數(shù),不需要再比較,比較次數(shù)N2=N11=62。如此冒泡共N=N01=63次,實(shí)現(xiàn)64個(gè)數(shù)的排序。循環(huán)次數(shù):冒泡次數(shù)N=N01=63次——外循環(huán)每次冒泡時(shí)循環(huán)次數(shù)N(i)=N(i-1)1——內(nèi)循環(huán)優(yōu)化方法:設(shè)置“交換標(biāo)志”,控制是否再需要冒泡。剛進(jìn)行完的冒泡中發(fā)生過(guò)數(shù)據(jù)交換——繼續(xù)冒泡。剛進(jìn)行完的冒泡中未發(fā)生過(guò)數(shù)據(jù)交換——停止冒泡。例如:對(duì)于一個(gè)已經(jīng)排好序的數(shù)組:1,2,3,…,63,64,排序程序根據(jù)“交換標(biāo)志”的狀態(tài)只要進(jìn)行一次循環(huán),結(jié)束排序程序的再執(zhí)行。第二次冒泡過(guò)程同第一次,冒泡后在e2位置為數(shù)據(jù)塊中的93第一次冒泡排序過(guò)程第一次冒泡排序過(guò)程94第二次冒泡排序過(guò)程第二次冒泡排序過(guò)程95程序設(shè)計(jì)過(guò)程程序設(shè)計(jì)過(guò)程962.4.5查表程序設(shè)計(jì)
查表:根據(jù)給定查找存放在ROM中數(shù)據(jù)表中與其對(duì)應(yīng)的值。適用場(chǎng)合:數(shù)碼顯示、打印字符轉(zhuǎn)換、數(shù)據(jù)轉(zhuǎn)換、函數(shù)求值、非線性傳感器輸出等。1.采用MOVCA,A+DPTR指令查表程序的設(shè)計(jì)方法(1)自變量——X,函數(shù)值——Y,計(jì)算Y;在ROM中建立函數(shù)表(自變量為X)。(2)在ROM中建立函數(shù)表TABLE,將Y按順序存放在起始(基)地址為T(mén)ABLE的ROM中,X→
A。(3)表首地址TABLE→DPTR,執(zhí)行查表指令查表Y→A。2.4.5查表程序設(shè)計(jì)查表:根據(jù)給定查找存放在ROM中972.采用MOVCA,A+PC指令查表程序的設(shè)計(jì)方法與MOVCA,A+DPTR指令的(1)、(2)相同。(3)X→A,執(zhí)行ADDA,#data指令修正A。data=函數(shù)表首地址PC1(4)執(zhí)行查表指令查表Y
→A。[例題7]利用查表的方法編寫(xiě)Y=X2(X=0,1,2,…,9)的程序。解:設(shè)變量X的值存放在內(nèi)部RAM的30H單元中,求得的Y的值存放在內(nèi)存31H單元中。平方表存放在首地址為T(mén)ABLE的ROM中。2.采用MOVCA,A+PC指令查表程序的設(shè)計(jì)方法98MOVCA,A+DPTR指令查表工作過(guò)程MOVCA,A+DPTR指令查表工作過(guò)程99MOVCA,A+PC指令查表工作過(guò)程2000H2019H2019H2019H2019H2019H2019HMOVCA,A+PC指令查表工作過(guò)程2000H1002.4.6子程序設(shè)計(jì)子程序:能夠完成確定任務(wù),并能為其他程序反復(fù)調(diào)用的程序段。特點(diǎn):可以多次重復(fù)使用,縮短整個(gè)程序,節(jié)省程序存儲(chǔ)空間,簡(jiǎn)化程序的邏輯結(jié)構(gòu),便于程序調(diào)試。
主程序(調(diào)用程序):調(diào)用子程序的程序。
1.子程序的調(diào)用與返回主程序調(diào)用子程序的過(guò)程:執(zhí)行調(diào)用指令(LCALL或ACALL)→子程序→執(zhí)行到子程序最后一條指令RET→返回到主程序斷點(diǎn)處→繼續(xù)。
2.4.6子程序設(shè)計(jì)子程序:能夠完成確定任務(wù),并能為其他101
(1)子程序的調(diào)用子程序的入口地址:子程序的第一條指令地址。常用標(biāo)號(hào)表示。程序的調(diào)用過(guò)程:執(zhí)行LCALL指令→當(dāng)前的PC值入堆棧(先低后高)→子程序的入口地址送入PC→轉(zhuǎn)去執(zhí)行子程序。(2)子程序的返回主程序的斷點(diǎn)地址:子程序執(zhí)行完畢后,返回主程序的地址。調(diào)用指令下一條指令的地址。子程序的返回過(guò)程:子程序執(zhí)行RET指令→從堆棧中彈出斷點(diǎn)給PC(先高后低)→回到主程序斷點(diǎn)處繼續(xù)執(zhí)行。(1)子程序的調(diào)用1022.保存與恢復(fù)寄存器內(nèi)容(1)保護(hù)現(xiàn)場(chǎng):主程序轉(zhuǎn)入子程序后,保護(hù)主程序的信息不會(huì)在運(yùn)行子程序時(shí)丟失的過(guò)程。(2)恢復(fù)現(xiàn)場(chǎng):從子程序返回時(shí),將保存在堆棧中的主程序的信息還原的過(guò)程。(3)實(shí)現(xiàn):用戶(hù)通過(guò)堆棧完成?;謴?fù)現(xiàn)場(chǎng)在從子程序返回之前,保護(hù)現(xiàn)場(chǎng)是在在進(jìn)入子程序時(shí)。如:
PUSHPSWPUSHACC;保護(hù)現(xiàn)場(chǎng)…
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 45076-2024再生資源交易平臺(tái)建設(shè)規(guī)范
- GA/T 761-2024停車(chē)庫(kù)(場(chǎng))安全管理系統(tǒng)技術(shù)要求
- 工作總結(jié)之黨校進(jìn)修總結(jié)處級(jí)干部黨校培訓(xùn)總結(jié)
- 電工電子技術(shù)(第3版) 課件 1.5 電容
- 2024年固體分散載體材料項(xiàng)目資金籌措計(jì)劃書(shū)代可行性研究報(bào)告
- 銀行員工薪酬體系制度
- 銀行客戶(hù)關(guān)系管理規(guī)范制度
- 重慶市豐都縣2023-2024學(xué)年八年級(jí)上學(xué)期期末考試數(shù)學(xué)試卷(含答案)
- 《講Scilab基本操作》課件
- 2011世界頂級(jí)名車(chē)品時(shí)尚盛宴
- 2024-2025學(xué)年語(yǔ)文二年級(jí)上冊(cè) 部編版期末測(cè)試卷 (含答案)
- 語(yǔ)文修改語(yǔ)病-三年(2022-2024)高考病句試題真題分析及 備考建議(課件)
- 中國(guó)抗癌協(xié)會(huì)胰腺癌患者科普指南2024(完整版)
- 齊魯名家談方論藥 知到智慧樹(shù)網(wǎng)課答案
- 2023人工智能基礎(chǔ)知識(shí)考試題庫(kù)(含答案)
- cecs31-2017鋼制電纜橋架工程設(shè)計(jì)規(guī)范
- 小學(xué)語(yǔ)文跨學(xué)科學(xué)習(xí)任務(wù)群的設(shè)計(jì)
- 《敬廉崇潔》的主題班會(huì)
- 國(guó)家開(kāi)放大學(xué)電大《計(jì)算機(jī)應(yīng)用基礎(chǔ)(本)》終結(jié)性考試試題答案(格式已排好)任務(wù)一
- 增值稅預(yù)繳稅款表電子版
- 學(xué)生學(xué)習(xí)評(píng)價(jià)量表模板
評(píng)論
0/150
提交評(píng)論