第2章 MCS-51單片機(jī)指令系統(tǒng)與匯編語言程序設(shè)計(jì)_第1頁
第2章 MCS-51單片機(jī)指令系統(tǒng)與匯編語言程序設(shè)計(jì)_第2頁
第2章 MCS-51單片機(jī)指令系統(tǒng)與匯編語言程序設(shè)計(jì)_第3頁
第2章 MCS-51單片機(jī)指令系統(tǒng)與匯編語言程序設(shè)計(jì)_第4頁
第2章 MCS-51單片機(jī)指令系統(tǒng)與匯編語言程序設(shè)計(jì)_第5頁
已閱讀5頁,還剩212頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第2章

MCS-51單片機(jī)指令系統(tǒng)與匯編語言程序設(shè)計(jì)主要內(nèi)容:MCS-51單片機(jī)的尋址方式、指令系統(tǒng)、基本程序結(jié)構(gòu)及匯編語言的開發(fā)和調(diào)試。重點(diǎn):尋址方式、各種指令的應(yīng)用、程序設(shè)計(jì)的規(guī)范、程序設(shè)計(jì)的思想及典型程序的理解和掌握。難點(diǎn):控制轉(zhuǎn)移、位操作指令的理解及各種指令的靈活應(yīng)用,以及程序設(shè)計(jì)的基本方法和針對具體的硬件設(shè)計(jì)出最合理的軟件。第2章MCS-51單片機(jī)指令系統(tǒng)與匯編語言程序設(shè)計(jì)2.1匯編語言概述2.2MCS-51單片機(jī)的尋址方式2.3MCS-51單片機(jī)的指令系統(tǒng)2.4MCS-51單片機(jī)C51語言

2.5程序設(shè)計(jì)2.6程序設(shè)計(jì)舉例2.7匯編語言的開發(fā)環(huán)境指令系統(tǒng):一臺計(jì)算機(jī)所能識別、執(zhí)行的指令的集合就是它的指令系統(tǒng)。機(jī)器語言:指令系統(tǒng)是一套控制計(jì)算機(jī)執(zhí)行操作的二進(jìn)制編碼,稱為機(jī)器語言。機(jī)器語言指令是計(jì)算機(jī)惟一能直接識別和執(zhí)行的指令。

匯編語言:利用指令助記符來描述指令系統(tǒng)的一套計(jì)算機(jī)指令,稱為匯編語言。

計(jì)算機(jī)的指令系統(tǒng)一般都是利用匯編語言描述的,是由計(jì)算機(jī)硬件設(shè)計(jì)所決定的。指令系統(tǒng)沒有通用性。單片機(jī)一般是空機(jī),未含任何系統(tǒng)軟件。因此在第一次使用前,必須對其進(jìn)行編程。

2.1匯編語言概述

指令:計(jì)算機(jī)用于控制各功能部件完成某一指定動(dòng)作的指示和命令稱為指令。指令的表示形式是識別指令的標(biāo)志。指令的表示形式:

(1)指令的二進(jìn)制形式

機(jī)器碼、源程序的目標(biāo)代碼均為二進(jìn)制形式,直接為計(jì)算機(jī)識別和執(zhí)行。讀/寫和記憶困難。(2)指令的十六進(jìn)制形式

指令的十六進(jìn)代碼需翻譯成二進(jìn)制代碼才能被計(jì)算機(jī)識別和執(zhí)行。特點(diǎn)是方便讀,寫和記憶困難。

(3)指令助記符用英文字母、單詞表征指令的功能。其源程序必須翻譯成機(jī)器碼(目標(biāo)代碼)才能被計(jì)算機(jī)識別和執(zhí)行。特點(diǎn)是方便讀/寫和記憶。2.1.1匯編語言指令格式與偽指令2.1.2指令的分類2.1.3指令中的常用符號2.1.4指令的字節(jié)數(shù)

2.1匯編語言概述

2.1.1匯編語言指令格式與偽指令

1.常用單位與術(shù)語位(bit):位是計(jì)算機(jī)所能表示的最小的、最基本的數(shù)據(jù)單位,位通常是指一個(gè)二進(jìn)制位。字節(jié)(Byte):一個(gè)連續(xù)的8位二進(jìn)制數(shù)碼稱為一個(gè)字節(jié),即1Byte=8bit。字(Word):通常由16位二進(jìn)制數(shù)碼組成,即1Word=2Byte。字長:字長是指計(jì)算機(jī)一次處理二進(jìn)制數(shù)碼位的多少。MCS-51型單片機(jī)是8位機(jī),所以說它的字長為8位。

MCS-51系列單片機(jī)都是以Intel公司最早的典型產(chǎn)品8051為核心,增加了一定的功能部件后構(gòu)成的。本章以8051為主介紹MCS-51系列單片機(jī)。。2.匯編語言指令格式

指令格式:指令的表示方式稱為指令格式,它規(guī)定了指令的長度和內(nèi)部信息的安排。完整的指令格式如下:[標(biāo)號:]操作碼

[操作數(shù)][,操作數(shù)][;注釋]其中:[]項(xiàng)是可選項(xiàng)。標(biāo)號:指本條指令起始地址的符號,也稱為指令的符號地址。代表該條指令在程序編譯時(shí)的具體地址。操作碼:又稱助記符,它一般是對應(yīng)英文的縮寫,它規(guī)定了指令具體的操作功能,描述指令的操作性質(zhì),是指令語句的關(guān)鍵,是一條指令中不可缺少的內(nèi)容。操作數(shù):可以是一個(gè)具體的數(shù)據(jù),或是存放數(shù)據(jù)的地址。注釋:可選項(xiàng),是為增加程序的可讀性而設(shè)置的,是針對某指令而添加的說明性文字,不產(chǎn)生可執(zhí)行的目標(biāo)代碼。偽指令:也稱為匯編程序的控制命令。是程序員發(fā)給匯編程序的命令,用來設(shè)置符號值、保留和初始化存儲空間、控制用戶程序代碼的位置。偽指令只出現(xiàn)在匯編前的源程序中,僅提供匯編用的某些控制信息,不產(chǎn)生可執(zhí)行的目標(biāo)代碼,是CPU不能執(zhí)行的指令。

3.偽指令

(1)定位偽指令ORG

格式:ORGn

其中:n為絕對地址,可以是十六進(jìn)制數(shù)、標(biāo)號或表達(dá)式。功能:規(guī)定編譯后的機(jī)器代碼存放的起始位置。在一個(gè)匯編語言源程序中允許存在多條定位偽指令,但每一個(gè)n值都應(yīng)和前面生成的機(jī)器指令存放地址不重疊。例如:

ORG 1000H START:MOVA,#20H MOVB,#30H┇(2)結(jié)束匯編偽指令END

格式:[標(biāo)號:]END[表達(dá)式]

功能:放在匯編語言源程序的末尾,表明源程序的匯編到此結(jié)束,其后的任何內(nèi)容不予理睬。(3)賦值偽指令EQU

格式:字符名稱xEQU賦值項(xiàng)n

功能:將賦值項(xiàng)n的值賦予字符名稱x。程序中凡出現(xiàn)該字符名稱x就等同于該賦值項(xiàng)n,其值在整個(gè)程序中有效。賦值項(xiàng)n可以是常數(shù)、地址、標(biāo)號或表達(dá)式。在使用時(shí),必須先賦值后使用?!白址Q”與“標(biāo)號”表示形式的區(qū)別:“字符名稱”后無冒號,而“標(biāo)號”后面有冒號。(4)定義字節(jié)偽指令DB

格式:[標(biāo)號:]DBx1,x2,…,xn

功能:將8位數(shù)據(jù)(或8位數(shù)據(jù)組)x1,x2,…,xn順序存放在從當(dāng)前程序存儲器地址開始的存儲單元中。xi可以是8位數(shù)據(jù)、ASCII碼、表達(dá)式,也可以是括在單引號內(nèi)的字符串。兩個(gè)數(shù)據(jù)之間用逗號“,”分隔。

xi

為數(shù)值常數(shù)時(shí),取值范圍為00H~FFH。xi為ASCII碼時(shí),要使用單引號‘’,以示區(qū)別。xi為字符串常數(shù)時(shí),其長度不應(yīng)超過80個(gè)字符。

(5)定義雙字節(jié)偽指令DW

格式:[標(biāo)號:]DWx1,x2,…,xn

功能:將雙字節(jié)數(shù)據(jù)(或雙字節(jié)數(shù)據(jù)組)順序存放在從標(biāo)號指定地址單元開始的存儲單元中。其中,xi為16位數(shù)值常數(shù),占兩個(gè)存儲單元,先存高8位(存入低位地址單元中),后存低8位(存入高位地址單元中)。(6)預(yù)留存儲空間偽指令DS

格式:[標(biāo)號:]DSn

功能:從標(biāo)號指定地址單元開始,預(yù)留n個(gè)存儲單元,匯編時(shí)不對這些存儲單元賦值。n可以是數(shù)據(jù),也可以是表達(dá)式。注:DB、DW、DS偽指令只能對程序存儲器進(jìn)行賦值和初始化工作,不能用來對數(shù)據(jù)存儲器進(jìn)行賦值和初始化工作。

(7)定義位地址符號偽指令BIT

格式:字符名稱xBIT位地址n

功能:將位地址n的值賦予字符名稱x。程序中凡出現(xiàn)該字符名稱x就代表該位地址。位地址n可以是絕對地址,也可以是符號地址。(8)數(shù)據(jù)地址賦值偽指令DATA

格式:字符名稱xDATA表達(dá)式n

功能:把表達(dá)式n的值賦值給左邊的字符名稱x。n可以是數(shù)據(jù)或地址,也可以是包含所定義的“字符名稱x”在內(nèi)的表達(dá)式,但不能是匯編符號。

DATA與EQU的主要區(qū)別是:EQU定義的“字符名稱”必須先定義后使用,而DATA定義的“字符名稱”沒有這種限制。所以,DATA偽指令通常用在源程序的開頭或末尾。2.1.2指令的分類

MCS-51指令系統(tǒng)有111條指令,可按下列幾種方式分類:1.按指令字節(jié)數(shù)分類

每條指令在程序存儲器ROM中占據(jù)一定的空間,以字節(jié)為單位。按指令所占字節(jié)數(shù)分類:單字節(jié)(49條),雙字節(jié)(46條),3字節(jié)(16條)。2.按指令執(zhí)行時(shí)間分類

每條指令在執(zhí)行時(shí)要花去一定的時(shí)間,以機(jī)器周期為單位。按指令執(zhí)行時(shí)間分類:單機(jī)器周期指令(65條)、雙機(jī)器周期指令(44條)和四機(jī)器周期指令(2條)。3.按功能分類按功能可分為5大類:數(shù)據(jù)傳送指令(29條)、算術(shù)操作指令(24條)、邏輯操作指令(24條)、控制轉(zhuǎn)移指令(17條)和位操作指令(17條)。指令的字節(jié)數(shù):

一般地,指令操作碼占1字節(jié);操作數(shù)中,直接地址derict占1字節(jié),8位數(shù)據(jù)#data占1字節(jié),16位數(shù)據(jù)#data16占兩字節(jié);操作數(shù)中的A、B、R0~R7、C、@Ri、DPTR、@A+DPTR、@A+PC、SFR等均隱含在操作碼中。(1)1字節(jié)指令(單字節(jié)指令)

①指令中無操作數(shù),只有操作碼。NOPREI②操作數(shù)的寄存器號隱含在指令碼中。

MOVA,Rn;指令碼為11101rrrINCDPTR;指令碼為A3H(2)2字節(jié)指令(雙字節(jié)指令)

指令的第一字節(jié)為操作碼,第二字節(jié)為操作數(shù)。指令的格式:操作碼操作數(shù)

MOVA,#data;指令碼為01110100#data(3)3字節(jié)指令(三字節(jié)指令)

指令的第一字節(jié)為操作碼,第二字節(jié)為目的操作數(shù),第三字節(jié)為源操作數(shù)。指令的格式:操作碼目的操作數(shù),源操作數(shù)

ANLdirect,#data;指令碼為01010011direct#data2.1.3指令中的常用符號

MCS-51指令系統(tǒng)共有44種助記符,類似于8086。指令中,除助記符外,其余符號意義如下:Rn(n=0~7):表示當(dāng)前工作寄存器R0~R7中的任一個(gè)寄存器。Ri(i=0或1):表示通用寄存器組中用于間接尋址的兩個(gè)寄存器R0,R1。#data:表示8位直接參與操作的立即數(shù)。#data16:表示16位直接參與操作的立即數(shù)。direct:表示片內(nèi)RAM的8位單元地址。addr11:表示11位目的地址,主要用于ACALL和AJMP指令中。addr16:表示16位目的地址,主要用于LCALL和LJMP指令中。rel:用補(bǔ)碼形式表示的8位二進(jìn)制地址偏移量,取值范圍為

128~+127,主要用于相對轉(zhuǎn)移指令,以形成轉(zhuǎn)移的目的地址。DPTR:數(shù)據(jù)指針,用于寄存器間接尋址方式和變址尋址方式。bit:表示片內(nèi)RAM的位尋址區(qū),或者是可以位尋址的SFR的位地址。A(或ACC):表示累加器。B:表示B寄存器。C:表示PSW中的進(jìn)位標(biāo)志位Cy。@:在間接尋址方式中,用于間接尋址寄存器指針的前綴標(biāo)志。$:表示當(dāng)前指令的地址。/:在位操作指令中,表示對該位先求反后再參與操作。(X):表示由X所指定的某寄存器或某單元中的內(nèi)容。

((X)):表示由X間接尋址單元中的內(nèi)容。←:表示指令的操作結(jié)果是將箭頭右邊的內(nèi)容傳送到左邊?!罕硎局噶畹牟僮鹘Y(jié)果是將箭頭左邊的內(nèi)容傳送到右邊?!?、∧、⊕:表示邏輯或、與、異或。2.1.4指令的字節(jié)數(shù)

指令操作碼——1字節(jié);直接地址——1字節(jié),8位數(shù)據(jù)——1字節(jié),16位數(shù)據(jù)——2字節(jié);操作數(shù)中的A、R0~R7、C、@Ri、DPTR、@A+DPTR、@A+PC等均隱含在操作碼中。B在乘除法指令中隱含,用作通用寄存器時(shí)占1字節(jié)。(1)1字節(jié)指令(單字節(jié)指令)

①指令中只有操作碼。NOPRET②操作數(shù)的寄存器號隱含在指令碼中。

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#dataSWAPA2字節(jié)3字節(jié)2字節(jié)2字節(jié)1字節(jié)1字節(jié)3字節(jié)2字節(jié)1字節(jié)1字節(jié)2字節(jié)MOV DPTR,#1000HMOV A,20HANL A,#0FHMOVCA,@A+DPTRMOV A,R0MOV SP,#60HANL A,#0F0HMOVCA,@A+PCMOV 22H, ASJMP $注:部分特殊功能寄存器SFR占一個(gè)字節(jié)。尋址方式:在計(jì)算機(jī)中,說明操作數(shù)所在地址的方法稱為指令的尋址方式。或者為指令按地址獲得操作數(shù)的方式。

計(jì)算機(jī)執(zhí)行程序?qū)嶋H上是在不斷尋找操作數(shù)并進(jìn)行操作的過程。每種計(jì)算機(jī)在設(shè)計(jì)時(shí)已決定了它具有哪些尋址方式,尋址方式越多,計(jì)算機(jī)的靈活性越強(qiáng),指令系統(tǒng)也就越復(fù)雜。

MCS-51單片機(jī)的指令系統(tǒng)提供了七種尋址方式,分別為:

立即尋址、直接尋址、寄存器尋址、寄存器間接尋址、變址尋址、相對尋址和位尋址。一條指令可能含多種尋址方式。2.2MCS-51單片機(jī)的尋址方式

2.2.1立即尋址

定義:將立即參與操作的數(shù)據(jù)直接寫在指令中,這種尋址方式稱為立即尋址。

特點(diǎn):指令中直接含有所需的操作數(shù)??梢允?位、16位,常常處于指令的第二字節(jié)和第三字節(jié)的位置上。表示方法:立即數(shù)通常使用#data或#data16表示,在立即數(shù)前面加“#”標(biāo)志,區(qū)別于直接尋址中的直接地址(direc或bit)。

MOVA,#64H;(A)←立即數(shù)64HADDA,#05H;(A)←(A)+立即數(shù)05H

MOVDPTR,#1000H;(DPTR)←1000H2.2.2直接尋址定義:將操作數(shù)的地址直接存放在指令中,這種尋址方式稱為直接尋址。特點(diǎn):指令中含有操作數(shù)的地址指出了參與操作的數(shù)據(jù)所存放在存儲器單元(位)的地址。尋址范圍:片內(nèi)RAM、SFR和位地址空間,ROM(LJMP、AJMP、LCALL)。

MOVR1,2DH;(R1)←(2DH)

MOV30H,4AH;(30H)←(4AH)注意:訪問特殊功能寄存器SFR,除A、B、DPTR可用寄存器尋址以外,其他只能用直接尋址方式。如:指令MOVA,45H的執(zhí)行過程及執(zhí)行結(jié)果:2.2.3寄存器尋址定義:操作數(shù)存放在MCS-51內(nèi)部的Rn或部分專用寄存器中。特點(diǎn):指令中指出的寄存器的內(nèi)容作為操作數(shù)。尋址范圍:四組通用寄存器Rn(R0~R7)、部分專用寄存器(A,B,DPTR)。

MOVA,R7;(A)←(R7)

MOV30H,B;(30H)←(B)

MOVDPTR,#1000H;(DPTR)←1000H存放操作數(shù)的寄存器在指令代碼中不占據(jù)單獨(dú)的一個(gè)字節(jié),嵌入(隱含)到操作碼字節(jié)中。(B做通用寄存器不隱含)如:指令MOVA,R7的執(zhí)行過程及執(zhí)行結(jié)果:2.2.4寄存器間接尋址(寄存器間址)定義:指令的寄存器中存放的是操作數(shù)據(jù)的單元地址。特點(diǎn):二次尋找操作數(shù)地址的尋址方式。尋址范圍:內(nèi)部RAM低128B(只能用R0或R1),外部RAM(R0、R1,DPTR)。

MOVR1,#30H;(R1)←立即數(shù)30HMOV@R1,#0FH;(30H)←立即數(shù)0FHMOVA,@R1;(A)←((30H))=立即數(shù)0FH寄存器間接尋址,寄存器前邊必須加前綴符號“@”,不能用于尋址特殊功能寄存器SFR。如:已知(R0)=30H,(30H)=40H,指令MOVA,@R0的執(zhí)行過程及執(zhí)行結(jié)果:2.2.5變址尋址(基址加變址尋址)定義:操作數(shù)存放在變址寄存器(累加器A)和基址寄存器(DPTR或PC)相加形成的16位地址單元中。特點(diǎn):單字節(jié)指令,指令操作碼中隱含基址寄存器和變址寄存器。執(zhí)行時(shí),基地址+偏移地址→操作數(shù)地址→操作數(shù)→完成相應(yīng)的操作。尋址范圍:ROM,主要用于查表性質(zhì)的訪問。注意:A中存放的偏移地址的范圍為00H~FFH(無符號數(shù))。

MCS-51單片機(jī)共有以下三條變址尋址指令:

MOVCA,@A+PC ;(A)←((A)+(PC)+1)

MOVCA,@A+DPTR;(A)←((A)+(DPTR))

JMP@A+DPTR;(PC)←(A)+(DPTR)如:已知(DPTR)=1234H,(A)=50H,程序存儲器(1284H)=65H,指令MOVCA,@A+DPTR的執(zhí)行過程及執(zhí)行結(jié)果:2.2.6相對尋址定義:將程序計(jì)數(shù)器PC的當(dāng)前值(取出本條指令后的PC值)與指令第二個(gè)字節(jié)給出的偏移量(rel)相加,形成新的轉(zhuǎn)移目標(biāo)地址。稱為相對尋址方式。特點(diǎn):相對尋址方式是為實(shí)現(xiàn)程序的相對轉(zhuǎn)移而設(shè)計(jì)的,為相對轉(zhuǎn)移指令所使用,其指令碼中含有相對地址偏移量,能生成浮動(dòng)代碼。如:

SJMPrel;(PC)←(PC)+2+rel雙字節(jié)指令

相對轉(zhuǎn)移指令的目的地址=指令地址+指令字節(jié)數(shù)+偏移量尋址范圍:只能對程序存儲器ROM進(jìn)行尋址。相對地址偏移量(rel)是一個(gè)帶符號的8位二進(jìn)制補(bǔ)碼,其取值范圍為

128~+127(以PC為中間的256個(gè)字節(jié)范圍)。在實(shí)際編程中,“rel”通常用“標(biāo)號”代替。如:指令SJMP06H的執(zhí)行過程及執(zhí)行結(jié)果。假設(shè)這條指令的地址為2000H。2.2.7位尋址定義:指令中給出的操作數(shù)是一個(gè)可單獨(dú)尋址的位地址,這種尋址方式稱為位尋址方式。特點(diǎn):位尋址是直接尋址方式的一種,其特點(diǎn)是對8位二進(jìn)制數(shù)中的某一位的地址進(jìn)行操作。尋址范圍:片內(nèi)RAM低128B中位尋址區(qū)、部分SFR(其中有83位——單元地址可被8整除的SFR的各位可以位尋址)??晌粚ぶ返奈坏刂返谋硎拘问饺缦拢海?)直接使用位地址形式。如:

MOV00H,C;(00H)←(Cy)

其中:00H是片內(nèi)RAM中20H地址單元的第0位。(2)字節(jié)地址加位序號的形式。如:

MOV20H.0,C;(20H.0)←(Cy)

其中:20H.0是片內(nèi)RAM中20H地址單元的第0位。(3)位的符號地址(位名稱)的形式。

對于部分特殊功能寄存器,其各位均有一個(gè)特定的名字,所以可以用它們的位名稱來訪問該位。如:

ANLC,P;(C)←(C)∧(P)

其中:P是PSW的第0位,C是PSW的第7位。(4)字節(jié)符號地址(字節(jié)名稱)加位序號的形式。

對于部分特殊功能寄存器(如狀態(tài)標(biāo)志寄存器PSW),還可以用其字節(jié)名稱加位序號形式來訪問某一位。如:

CPLPSW.6;(AC)←()

其中:

PSW.6表示該位是PSW的第6位。[例題1]

指出下列指令中源操作數(shù)的尋址方式

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)寄存器尋址立即尋址寄存器間接尋址直接尋址變址尋址相對尋址位尋址尋址方式的適用范圍:源操作數(shù):7種尋址方式目的操作數(shù):除立即尋址、變址尋址外的其他尋址方式。片內(nèi)RAM(低128單元)區(qū):寄存器尋址、寄存器間接尋址,直接尋址方式。片內(nèi)SFR(RAM區(qū)的高128單元):直接尋址方式。片外RAM:寄存器間接尋址(以R0、R1或DPTR作間址寄存器)方式。程序存儲器ROM:直接尋址(LJMP、AJMP、LCALL、ACALL)、變址尋址、相對尋址方式。位尋址區(qū)(片內(nèi)RAM的20H~2FH單元的128位及SFR區(qū)的83位):位尋址方式。2.3MCS-51單片機(jī)的指令系統(tǒng)

MCS-51指令系統(tǒng)使用44種助記符,它們代表著33種功能,可以實(shí)現(xiàn)51種操作。指令助記符與操作數(shù)的各種可能的尋址方式的結(jié)合一共可構(gòu)造出111條指令。

MCS-51單片機(jī)指令系統(tǒng)按其功能可分為數(shù)據(jù)傳送類指令、算術(shù)運(yùn)算類指令、邏輯運(yùn)算和移位類指令、控制轉(zhuǎn)移類指令和位操作類指令五大類。學(xué)習(xí)指令系統(tǒng)時(shí),應(yīng)注意:(1)指令的格式、功能。(2)操作碼的含義,操作數(shù)的表示方法。(3)尋址方式,源、目的操作數(shù)的范圍。(4)對標(biāo)志位的影響。(5)指令的適用范圍。(6)正確估算指令的字節(jié)數(shù)。一般地,操作碼占1字節(jié);操作數(shù)中,直接地址derict占1字節(jié),#data占1字節(jié),#data16占兩字節(jié);操作數(shù)中的A、B、R0~R7、C、@Ri、DPTR、@A+DPTR、@A+PC、SFR等均隱含在操作碼中。2.3MCS-51單片機(jī)的指令系統(tǒng)2.3.1數(shù)據(jù)傳送類指令(29條)2.3.2算術(shù)運(yùn)算類指令(24條)2.3.3邏輯運(yùn)算及移位類指令(24條)2.3.4控制轉(zhuǎn)移類指令(17條)2.3.5位操作(布爾操作)類指令(17條)以累加器A為目的操作數(shù)的指令對P標(biāo)志位有影響(CPL除外)立即數(shù)不能做目的操作數(shù)一條指令中不能同時(shí)出現(xiàn)兩個(gè)Rn和@Ri2.3.1數(shù)據(jù)傳送指令

最基本、最主要的操作指令。29條,可分為五類:(1)內(nèi)部RAM間傳送:(MOV——16條)(2)外部RAM與累加器間傳送:(MOVX——4條)(3)ROM向累加器傳送:(MOVC——2條)(4)數(shù)據(jù)交換:(SWAP,XCH,XCHD——5條)(5)堆棧操作:(PUSH,POP——2條)尋址范圍:累加器A、片內(nèi)RAM、SFR、片外RAM、ROM。功能:(目的地址)←(源地址),表示為:

<dest>

<src>

源地址單元的內(nèi)容不變,立即數(shù)不能作為目的操作數(shù)。對標(biāo)志位的影響:除以累加器A為目的操作數(shù)的數(shù)據(jù)傳送指令對P標(biāo)志位有影響外,其余均不影響標(biāo)志位。1.內(nèi)部RAM數(shù)據(jù)傳送指令(16條)格式:

MOV<dest>,<src>范圍:片內(nèi)RAM、SFR中。指令形式:按目的操作數(shù)可將內(nèi)部數(shù)據(jù)傳送指令分為五類。(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)

#30H(3)以直接地址單元為目的操作數(shù)(5條)

MOVdirect,<src>

其中:

<src>包括A、Rn、@Ri、direct、#data。如:

MOV30H,20H;(30H)

(20H)(4)以間址寄存器@Ri為目的操作數(shù)(3條)

MOV@Ri,<src>

其中:

<src>包括A、direct、#data。如:

MOV@R1,A;((R1))

(A)(5)16位數(shù)據(jù)傳送指令(1條)

MOVDPTR,#data16

如:

MOVDPTR,#1000H;(DPTR)

#1000H

注意:(2)、(3)、(4)、(5)均不影響標(biāo)志位。內(nèi)部數(shù)據(jù)傳送指令的傳送關(guān)系圖MCS-51允許在兩個(gè)內(nèi)部RAM的直接地址之間進(jìn)行傳送數(shù)據(jù)。不允許在兩個(gè)工作寄存器之間直接進(jìn)行傳送數(shù)據(jù)。立即數(shù)不能做目的操作數(shù)。內(nèi)部RAM數(shù)據(jù)傳送指令練習(xí):ORG0000HLJMPSTARTORG0030HSTART:MOVSP,#60HMOV30H,#12HMOV31H,#34HMOVA,31HMOVR1,#30HMOV20H,30HMOV@R1,31HMOVDPTR,#5678HSJMP$END內(nèi)部RAM數(shù)據(jù)傳送指令小結(jié)指令操作碼:MOV源、目的操作數(shù)均可在片內(nèi)RAM、SFR中。立即數(shù)不能用作目的操作數(shù)。操作數(shù)A、Rn、@Ri、direct、#data之間,除Rn之間、Rn與@Ri之間、@Ri之間不能直接傳送外,其余均可直接傳送。源和目的操作數(shù)同為一種尋址方式只有直接地址direct。除以累加器A為目的操作數(shù)的數(shù)據(jù)傳送指令對P標(biāo)志位有影響外,其余均不影響標(biāo)志位。

2.外部RAM數(shù)據(jù)傳送指令(4條)

特點(diǎn):只能通過A,采用寄存器間址(R0,R1和DPTR)。指令格式:

MOVXA,<src>MOVX<dest>,A

其中:

<src>、<dest>包括@DPTR、@Ri(R0,R1)

。@Ri——片外RAM的低256個(gè)單元;DPTR——片外RAM。對標(biāo)志位的影響:

MOVXA,<src>——只影響P標(biāo)志;

MOVX<dest>,A——不影響標(biāo)志位。

如:

MOVXA,@R1;(A)

((R1))

MOVX@DPTR,A;((DPTR))

(A)外部RAM數(shù)據(jù)傳送指令練習(xí):ORG0000HLJMPSTARTORG0030HSTART:MOVSP,#60HMOV32H,#56HMOVR0,#32HMOVXA,

@R0MOVDPTR,#1000H

MOVX@DPTR,ASJMP$END外部RAM數(shù)據(jù)傳送指令小結(jié)

指令操作碼:MOVX

源、目的操作數(shù)均可在片外RAM中,其中有一個(gè)必須是A。操作數(shù)為@DPTR、@Ri

,只能通過累加器A,采用寄存器間接尋址方式。

@Ri:片外RAM的低256個(gè)單元,

@DPTR:片外RAM的全部64KB的空間。除以累加器A為目的操作數(shù)的數(shù)據(jù)傳送指令影響P標(biāo)志位外,其余均不影響標(biāo)志位。3.程序存儲器(ROM)數(shù)據(jù)傳送指令(查表指令)(2條)

特點(diǎn):單向傳送,只能讀到累加器A中。專用于查表。指令格式:MOVCA,@A+DPTP;(A)←((A)+(DPTR))

MOVCA,@A+PC;(PC)←(PC)+1

(A)←((A)+(PC))

兩條指令的異同:功能相同,使用中存在著差異。(1)查表的位置要求不同@A+DPTP(遠(yuǎn)程查表):表可放在64KBROM的任何地址,使用方便。@A+PC(近程查表):表只能放在ROM中查表指令后的256B的地址空間中。(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ì)講解。

程序存儲器ROM數(shù)據(jù)傳送指令練習(xí):ORG0000HLJMPSTARTORG0030HSTART:MOVSP,#60HMOVA,#05HMOVDPTR,#100H

MOVCA,@A+DPTR

MOVA,#09HMOVCA,@A+PC

SJMP$ORG100HTAB:DB11H,12H,13H,14H,15H,16H,17H,18H,19HDB1AH,1BH,1CH,1DH,1EH,1FHEND程序存儲器(ROM)數(shù)據(jù)傳送指令小結(jié)

指令操作碼:MOVC,主要用于查表。源操作數(shù)在片外ROM中,目的操作數(shù)在A中。源操作數(shù)為@A+DPTR、@A+PC,只能讀入累加器A中。

@A+DPTR:遠(yuǎn)程查表,表可放在64KBROM的任何處。

@A+PC:近程查表,表只能在查表指令后的256BROM

的地址空間中。偏移量A的計(jì)算方法:

@A+DPTR:(A)←欲查數(shù)值距離表首地址的值

@A+PC:

(A)←

表首地址-當(dāng)前指令的PC值-1

影響P標(biāo)志位。存儲器中數(shù)據(jù)傳送小結(jié)

CPU內(nèi)部RAM用MOV指令,不能在兩個(gè)Rn/@Ri之間直接傳送。片外RAM用MOVX指令:低256B,可在A與@Ri之間傳送;

64KB范圍內(nèi),可在A與@DPTR之間傳送。

ROM用MOVC指令,只能用MOVCA,@A+DPTRMOVCA,@A+PC。4.?dāng)?shù)據(jù)交換指令(5條)功能:兩個(gè)數(shù)據(jù)交換、保存目的操作數(shù)。分兩類:(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。數(shù)據(jù)交換指令練習(xí):ORG0000HLJMPSTARTORG0030HSTART:MOVSP,#60HMOV30H,#83HMOVR0,#30HMOVR1,#31HMOVA,#59HSWAPAXCHDA,@R0XCHA,R0XCHA,@R1XCHA,32HSJMP$END數(shù)據(jù)交換指令小結(jié)半字節(jié)交換

SWAPA;(A)3~0←→(A)7~4

XCHDA,@Ri;(A)3~0←→((Ri))3~0

字節(jié)交換

XCHA,<src>;

<src>包括Rn、@Ri、direct。操作數(shù)在A、內(nèi)部RAM中。影響P標(biāo)志位。5.堆棧操作指令(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)避開使用的工作寄存器區(qū)和其他需要使用的數(shù)據(jù)區(qū),系統(tǒng)復(fù)位后,SP的初始值為07H。一般初始化時(shí)要重新設(shè)置SP。

如:已知:(40H)=0F0H;(41H)=11H;(SP)=60H執(zhí)行下面程序:

PUSH40HPUSH41HPOP42HPOP43H

如:設(shè)(A)=7BH;(35H)=11H;已知(SP)=60H執(zhí)行下面程序,則:

PUSHACCPUSH35HPOPACCPOP35H

這也是字節(jié)交換的一種方式。

堆棧操作指令小結(jié)

指令操作碼:PUSH,POP。操作數(shù):一個(gè)在由SP設(shè)置的堆棧中,另一個(gè)在內(nèi)部RAM中。

PUSH入棧,先加SP,后入;POP出棧,先出,后減SP。

堆棧操作指令是直接尋址指令,直接地址不能是寄存器名。堆棧操作的實(shí)質(zhì)是以棧指針SP為間址寄存器的間址尋址方式。不影響標(biāo)志位。用于執(zhí)行中斷、子程序調(diào)用、參數(shù)傳遞等程序的斷點(diǎn)保護(hù)和現(xiàn)場保護(hù)。2.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條)1.加法指令(4條)指令格式:

ADDA,<src>;(A)←(A)+<src><src>包括Rn、@Ri、direct、#data。對標(biāo)志位的影響:影響PSW中的所有標(biāo)志位。2.帶進(jìn)位的加法指令(4條)指令格式:

ADDCA,<src>;(A)←(A)+<src>+(Cy)<src>包括Rn、@Ri、direct、#data。對標(biāo)志位的影響:影響PSW中的所有標(biāo)志位。

編寫程序?qū)崿F(xiàn)16位二進(jìn)制數(shù)加法。將內(nèi)部RAM的41H單元和40H單元中的16位二進(jìn)制數(shù)與內(nèi)部RAM的31H單元和30H單元中的16位二進(jìn)制數(shù)相加,并將結(jié)果存到內(nèi)部RAM的51H單元和50H單元中。ORG0000HLJMPSTARTORG0030HSTART:MOVSP,#60HMOVA,40H ADDA,30H

MOV50H,A MOVA,41H

ADDCA,31H MOV51H,A SJMP$ END

3.帶借位的減法指令(4條)

指令格式:

SUBBA,<src>;(A)←(A)-<src>-(Cy)<src>包括Rn、@Ri、direct、#data。對標(biāo)志位的影響:影響PSW中的所有標(biāo)志位。

注意:MCS-51指令系統(tǒng)中無不帶借位的減法指令,

不帶借位的減法:

CLRC(Cy=0)→SUBB。

編寫程序?qū)崿F(xiàn)79H-56H并,將結(jié)果存到內(nèi)部RAM的30H單元中。ORG0000HLJMPSTARTORG0030HSTART:MOVSP,#60HCLRCMOVA,#79H SUBBA,#56HMOV30H,A SJMP$ END 4.十進(jìn)制調(diào)整指令(BCD碼修正指令)(1條)

功能:跟在ADD、ADDC后面,對運(yùn)算結(jié)果進(jìn)行壓縮BCD碼修正,完成十進(jìn)制加法運(yùn)算功能。指令格式:DAA特點(diǎn):專用指令。兩個(gè)壓縮的BCD碼按二進(jìn)制數(shù)相加后必須經(jīng)本指令調(diào)整才能得到壓縮的BCD碼的和。操作數(shù):源操作數(shù)只能在累加器A中,結(jié)果存入A中。十進(jìn)制調(diào)整指令對PSW中的除溢出標(biāo)志位OV外的所有標(biāo)志位均產(chǎn)生影響。

注意:只適用加法,不能對減法指令進(jìn)行修正。

BCD碼減法方法:變減法為補(bǔ)碼加法→DAA

變減法為補(bǔ)碼加法:被減數(shù)+減數(shù)的補(bǔ)碼減數(shù)的補(bǔ)碼=9AH-減數(shù),99+1=9AH。

編寫程序?qū)崿F(xiàn)95+59的BCD碼加法,將結(jié)果存到內(nèi)部RAM的40H單元中。

ORG0000HLJMPSTARTORG0030HSTART:MOVSP,#60HMOVA,#95H ADDA,#59HDAA MOV40H,A SJMP$ END 5.加1指令(增量指令)(5條)

功能:操作數(shù)所指定的單元的內(nèi)容加1。指令格式:INC<dest>;<dest>←<dest>+1<dest>包括A、Rn、direct、@Ri、DPTR操作數(shù):只有一個(gè)操作數(shù),即是源操作數(shù)又是目的操作數(shù)。對標(biāo)志位的影響:除對累加器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無減1)操作數(shù):只有一個(gè)操作數(shù)。對標(biāo)志位的影響:同加1指令。

編寫程序?qū)崿F(xiàn)將內(nèi)部RAM中以30H為起始地址的三個(gè)無符號數(shù)相加,并將結(jié)果(假設(shè)小于100H)存放到40H單元中。ORG0000HLJMPSTARTORG0030HSTART:MOVSP,#60HMOV30H,#13HMOV31H,#24HMOV32H,#35HMOVA,#00H MOVR0,#30H ADDA,@R0 INCR0 ADDA,@R0 INCR0 ADDA,@R0 MOV40H,A SJMP$ END

編寫程序?qū)崿F(xiàn)編程實(shí)現(xiàn)DPTR減1的運(yùn)算。

由于減1指令中沒有DPTR減1指令,因此必須將DPTR分為DPH和DPL兩部分。ORG0000HLJMPSTARTORG0030HSTART:MOVSP,#60HCLRCMOVA,DPLSUBBA,#01H MOVDPL,A MOVA,DPH SUBBA,#00H ;(A)←(A)-(Cy)-0MOVDPH,A SJMP$ END 7.乘除指令(2條)

功能:實(shí)現(xiàn)乘法或除法操作。特點(diǎn):在指令系統(tǒng)中執(zhí)行時(shí)間最長,均為四周期指令。指令格式:

MULAB;(B)(A)←(A)×(B)

DIVAB;(A)←(A)/(B)…(B)對標(biāo)志位的影響:影響PSW中的Cy,OV,P標(biāo)志位,乘除:Cy=0;P是由A中1的個(gè)數(shù)的奇偶性決定的;若乘積大于FFH→OV=1,否則清0。除法:除數(shù)為0→OV=1,否則清0。算術(shù)運(yùn)算指令小結(jié)對標(biāo)志位的影響:除加1、減1指令外,均影響標(biāo)志位。1.加法運(yùn)算:(ADD——4條)2.帶進(jìn)位加法運(yùn)算:

(ADDC——4條)3.帶借位減法運(yùn)算:(SUBB——4條)操作數(shù):加法、帶進(jìn)位加法、帶借位減法的目的操作數(shù)均是A,最終結(jié)果應(yīng)存入A,源操作數(shù)為Rn、@Ri、direct、#data。加法運(yùn)算(ADD);(A)

(A)+(第二操作數(shù))

帶進(jìn)位加法(ADDC);(A)

(A)+(Cy)+(第二操作數(shù))

帶借位減法(SUBB);(A)

(A)-(Cy)-(第二操作數(shù))4.加1/減1操作:(INC,DEC——9條)

INC,DEC與用加/減法指令做加1/減1操作不同之處在于INC、DEC不影響標(biāo)志位,DPTR無減1。操作數(shù)為A、Rn、direct、@Ri、DPTR。5.單字節(jié)乘/除運(yùn)算:

(MUL,DIV——2條)兩個(gè)單字節(jié)數(shù)的乘/除法運(yùn)算只在A與B之間進(jìn)行。MULAB:(A)與(B)相乘,積為16位數(shù),(B)

積的高8位;(A)

積的低8位DIVAB:(A)除以(B),結(jié)果用2字節(jié)表示,(A)

商的整數(shù)部分;(B)

余數(shù)6.十進(jìn)制調(diào)整:(DAA——1條)用于兩個(gè)BCD碼之間的相加,只能跟在ADD/ADDC之后。2.3.3邏輯運(yùn)算和移位指令(24條)對標(biāo)志位的影響:除了兩條帶進(jìn)位的循環(huán)移位指令外,其余均不影響PSW中的各標(biāo)志位;目的操作數(shù)是A時(shí)影響P標(biāo)志位。分類: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ì)。1.邏輯與運(yùn)算指令(6條)功能:實(shí)現(xiàn)兩個(gè)操作數(shù)的邏輯與。指令格式:ANLA,<src>;

<src>包括Rn、@Ri、direct、#dataANLdirect,<src>

;

<src>包括A、#data適用場合:邏輯與,用于操作數(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適用場合:邏輯或,用于操作數(shù)的某些位不變(這些位或“0”),某些位置1(這些位或“1”)。

已知內(nèi)部RAM的30H單元中存放著數(shù)9的ASCII碼(39H),試編寫程序求其BCD碼。

數(shù)9的ASCII碼為00111001B,而數(shù)9的BCD碼為00001001B。ORG0000HLJMPSTARTORG0030HSTART:MOVSP,#60HMOV30H,#39HANL30H,#0FHSJMP$ END另一種方法:

MOVA,30H CLRC SUBBA,#30H MOV30H,A

SJMP$ END

編寫程序?qū)崿F(xiàn)將累加器A中的高4位傳送到P1口的高4位中,保持P1口的低4位不變。ORG0000HLJMPSTARTORG0030HSTART:MOVSP,#60HMOVA,#35HANLA,#11110000B ANLP1,#00001111B ORLP1,A SJMP$ END

3.邏輯異或運(yùn)算指令(6條)功能:兩個(gè)操作數(shù)的邏輯異或。指令格式:XRLA,<src>;

<src>包括Rn、@Ri、direct、#data

XRLdirect,<src>;

<src>包括A、#data適用場合:邏輯異或,用于操作數(shù)的某些位不變(這些位異或“0”),某些位取反(這些位異或“1”)。

編寫程序?qū)崿F(xiàn)將存放在片內(nèi)RAM的30H單元中數(shù)據(jù)的低4位取反,高2位置1,其余2位清0。ORG0000HLJMPSTARTORG0030HSTART:MOVSP,#60HMOVA,#35H MOVA,30H XRLA,#00001111B ORLA,#11000000B ANLA,#11001111B MOV30H,A

SJMP$ END

循環(huán)移位指令示意圖4.循環(huán)移位指令(4條)不帶進(jìn)位的循環(huán)左、右移位(操作碼為RL,RR)帶進(jìn)位的循環(huán)左、右移位(操作碼為RLC,RRC)特點(diǎn):只能對累加器A進(jìn)行循環(huán)移位。指令格式:

操作碼A功能:A中的數(shù)據(jù)逐位左移1位——乘2,逐位右移1位——除以2。

設(shè)內(nèi)部RAM的30H,31H單元中存有自然數(shù),編程將其擴(kuò)大為原來的2倍。其中,30H單元為高位,31H單元為低位。

因?yàn)槔奂悠鰽中的數(shù)據(jù)逐位左移1位相當(dāng)于原內(nèi)容乘以2,所以可以用左移操作來實(shí)現(xiàn)擴(kuò)大2倍。移位時(shí),應(yīng)注意字節(jié)與字節(jié)之間的銜接。ORG0000HLJMPSTARTORG0030HSTART:MOVSP,#60HMOV30H,#10H MOV31H,#20H CLRCMOVA,31H RLCA MOV31H,A MOVA,30H RLCA MOV30H,A SJMP$ END 5.累加器清0與取反指令(2條)

指令格式:CLRA;(A)←00H

CPLA;(A)←()特點(diǎn):節(jié)省存儲空間,提高程序執(zhí)行效率。

對標(biāo)志位的影響:CLR只影響P標(biāo)志位,CPL不影響標(biāo)志位。

邏輯運(yùn)算和移位指令小結(jié)1.邏輯與、或、異或與(ANL—6條),或(ORL—6條),異或(XRL—6條)。操作碼:ANL、ORL、XRL指令格式:操作碼A,<src>;<src>包括Rn、@Ri、direct、#data

操作碼direct,<src>;<src>包括A、#data功能:與(清0或者保留某些位)、或(置1或者保留某些位)、異或(取反或者保留某些位)。模擬各種數(shù)字邏輯電路的功能,進(jìn)行邏輯電路的設(shè)計(jì)。標(biāo)志位:除目的操作數(shù)是A影響P標(biāo)志,其余均不影響標(biāo)志位。2.循環(huán)移位指令(4條)不帶進(jìn)位的循環(huán)左/右移位(為RL,RR)帶進(jìn)位的循環(huán)左/右移位(RLC,RRC)指令格式:操作碼A標(biāo)志位:

RL,RR影響P標(biāo)志,RLC,RRC影響C、P標(biāo)志。功能:左移1位——乘2,右移1位——除以2。3.累加器清0與取反指令(2條)指令格式:CLR/CPLA標(biāo)志位:CLR只影響P標(biāo)志位,CPL不影響標(biāo)志位。2.3.4控制轉(zhuǎn)移指令(17條)功能:改變PC中的內(nèi)容,控制程序執(zhí)行的流向,實(shí)現(xiàn)程序分支轉(zhuǎn)向。分類:4種,17條。無條件轉(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ī)器周期。

對標(biāo)志位的影響:除了CJNE影響Cy外,其余均不影響標(biāo)志位。1.無條件轉(zhuǎn)移指令(4條)定義:不規(guī)定條件的程序轉(zhuǎn)移。指令格式:

長轉(zhuǎn)移指令:

LJMPaddr16;(PC)←addr15~0

絕對轉(zhuǎn)移指令:

AJMPaddr11;(PC)←(PC)+2,(PC)10~0←addr11

相對(短)轉(zhuǎn)移指令:SJMPrel;(PC)←(PC)+2+rel

間接(散)轉(zhuǎn)移指令:JMP@A+DPTR;(PC)←(DPTR)+(A)注意:(1)指令中的地址或偏移量均可采用標(biā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(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)JMP@A+DPTR功能:實(shí)現(xiàn)程序的分支轉(zhuǎn)移(散轉(zhuǎn)),DPTR為轉(zhuǎn)移目的的起始地址,A為轉(zhuǎn)移目的的偏移量。(6)在編程中,經(jīng)常使用短轉(zhuǎn)移指令SJMP和相對轉(zhuǎn)移指令A(yù)JMP,以便生成浮動(dòng)代碼,并不經(jīng)常使用長轉(zhuǎn)移指令LJMP。

2.條件轉(zhuǎn)移指令(2條)功能:實(shí)質(zhì)上是A判零指令。在規(guī)定的條件滿足時(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的取值范圍

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論