第3章,AT89C51单片机,的指令系统_第1页
第3章,AT89C51单片机,的指令系统_第2页
第3章,AT89C51单片机,的指令系统_第3页
第3章,AT89C51单片机,的指令系统_第4页
第3章,AT89C51单片机,的指令系统_第5页
已阅读5页,还剩120页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

3.1指令系统概述一、基本概念

指令:指挥计算机(CPU)完成各种操作的基本命令。

指令系统:一台计算机所有指令的集合。P.30AT89C51的基本指令共111条二、指令格式

指令由两部分组成,即操作码和操作数。

操作码:规定指令进行什么操作;

操作数:指令操作的对象第3章AT89C51单片机的指令系统

三、指令系统的分类1、按指令占用的存储单元字节数分类机器语言目标程序

汇编语言源程序注释04H

INCA

;将A的内容加174H30HMOVA,#30H;将数30H送入A中85H40H50H

MOV50H,40H

;将片内RAM40H单元内容送入50H单元汇编单字节指令双字节指令三字节指令(1)单字节指令:操作码、操作数同在一个字节中。(2)双字节指令:操作码+操作数。(3)三字节指令:操作码+操作数+操作数。目标程序在存储器中的存储形式2000H04H2001H74H2002H30H2003H85H2004H40H2005H50H2006H2007H2008HINCAMOVA,#30HMOV50H,40H地址内容地址与内容可书写成十六进制,但实质是二进制2、按指令的执行时间来分:(1)1个机器周期(12个时钟振荡周期)指令64条(2)2个机器周期(24个时钟振荡周期)指令45条(3)只有乘、除两条指令的执行时间为4个机器周期3.3指令系统的寻址方式操作数指定了参与运算的数据或数据所在单元的地址。如何得到这个地址称为寻址方式。

不论何种汇编语言,其助记符都包括操作码和操作数两部分。操作码指明了本条指令的功能,操作数代表了指令的操作对象。P.311.寄存器寻址操作数在指定寄存器(A.Rn(n=0~7).DPTR.AB)中……06H……片内数据存储器R7……A06H如:MOVA,R7;将工作寄存器R7中的内容送累加器A2.直接寻址操作数以单元直接地址(direct)的形式给出直接寻址可访问两种地址空间:⑴特殊功能寄存器SFR

(符号指令中可用SFR名暂代)

⑵片内RAM:00~7FH,共128个字节单元。如:MOVA,70H

;A←(70H),把片内RAM地址是70H的单元的内容送入累加器A……66H……片内数据存储器70H……A66H访问片内数据存储器逻辑空间A(E0H)70H例1:MOVA,#70H;A←70H,把8bit立即数70H送入累加器AMOV0E0H,#70H;把8bit立即数70H送E0H单元(即累加器A、SFRAcc)例2:MOVDPTR,#2FC0H;DPTRDPHDPL2FHC0H2FC0H3.立即寻址指令中直接给出参与运算的操作数,立即数之前加“#”予以标识;(这条虽与上一条效果相同但指令不同,)把16bit立即数2FC0H送地址指针寄存器DPTR

70H4.寄存器间接寻址操作数地址存放在指定的寄存器中Ri(R0、R1)或数据指针DPTR中

。前面加@表示间接寻址。可访问片内RAM或外部数据存储器。实现间接寻址的地址指针:Ri(R0、R1):寻址对象为片内RAM的128个单元;

DPTR:寻址对象为外部数据存储器。如:

MOVR0,#60H

;将(地址)60H送入工作寄存器R0

(R0指向60H单元)

MOVA,@R0

;将以R0内容为地址

的片内RAM单元的内容送到累加器A中……36H片内数据存储器……60H…………A60HR0R036H地址指针3.3指令系统的寻址方式

寻址方式就是在指令中提供或指明操作数的方式。1.寄存器寻址方式:操作数在指定寄存器(A.Rn(n=0~7).DPTR.AB)中EF

MOVA,R7;将工作寄存器R7中的内容送累加器A2.直接寻址方式:操作数以单元直接地址(direct)的形式给出85

07

E0MOV0E0H,07H;将07H单元的内容送E0H单元(E0H单元即累加器A)E5

07

MOVA,07H;(这条虽与上一条效果相同但指令不同,)

直接地址direct:00H~7FH片内RAM;

80H…F0HSFR(符号指令中可用SFR名暂代)

3.寄存器间接寻址方式:操作数单元的地址存放在寄存器Ri(R1或R0)中78

40

MOVR0,#40H;将(地址)40H送入工作寄存器R0

(令R0指向40H单元)F6

MOV@R0,A;将累加器A的内容送到以R0内容为地址的单元中

第一条令R0中的内容为40H,第二条则是把A的内容送片内RAM中地址为40H的单元中。4.立即寻址方式:在指令中给出操作数本身,称立即数,加前缀“#”74

40

MOVA,#40H

;将8位立即数40H送累加器A

75

40

F8

MOV40H,#0F8H;将8位立即数F8H送地址为40H的单元

90

A1

8F

MOVDPTR,#0A18FH;将16位立即数A18FH送地址指针寄存器DPTR

P.31R0所指向的5.变址寻址(以后再介绍)基址寄存器的内容与变址寄存器的内容的和为可寻址单元的地址。该类寻址方式用于访问程序存储器,对查表访问特别有用。基址寄存器(DPTR或PC):存放基准地址;变址寄存器(A):存放偏移量;7.位寻址寻址对象:1、内部RAM的可位寻址区-共128位;2、专用寄存器的可寻址位。例1:MOVC,13HCy0例2:MOVA,13H片内数据存储器……10110111……20H21H22HD7D6……D00110100013HA01101000位地址字节地址符号说明在分类介绍指令之前,把描述指令的一些符号意义首先作一简单的介绍:Rn:当前选中的寄存器区的8个工作寄存器R0~R7之一。Ri:代表R0或R1,用作间接寻址寄存器direct:8位的内部数据存储器单元的地址。包括内部RAM单元的地址及21个SFR的地址。直接寻址。#data:包含在指令中的8位常数。即8位立即数#data16:包含在指令中的16位常数。即

16位立即数bit:内部RAM或SFR中的位地址。位寻址C(即Cy):进位标志或进位位,或布尔处理机中的运算器。@:间接寻址或变址寻址。如@Ri。(×):×地址单元或寄存器中的内容。((×)):以寄存器的内容作为地址的存储单元的内容。←:箭头左边的内容传送到箭头右边的地址单元。/:位操作数的前缀。表示对该位操作数求反。如/bit。以下几个用于对指令的功能及执行过程的解释$:表示当前指令的地址。addr16:16位目的地址。用于LCALL和LJMP指令中。转移范围是64KB程序存储器空间。addr11:11位目的地址。用于ACALL和AJMP指令中。转移的目的地址必须与下一条指令的第一字节在同一个2KB程序存储器区地址空间之内。rel:8位的带符号的偏移地址。用于SJMP和所有的条件转移指令中。以下几个用于控制转移类指令,以后再解释片内数据存储器寻址方式示意图1FH00H20H3区2区1区0区2FH位地址:00H~7FH数据缓冲区堆栈区工作单元7FH30H80HFFH21个SFRA、DPTR、AB可寄存器寻址均可直接寻址可寄存器间接寻址Rn可寄存器寻址可位寻址有些可位寻址片外数据存储器程序存储器寄存器间接寻址。变址寻址(访问表格)3.4.1数据传送指令一般格式:

MOV(MOVC、MOVX)目的操作数,源操作数

除此之外,还有数据交换指令和堆栈操作指令。功能:

将源操作数内容送入目的操作数指定的存储单元,指令执行后,源操作数内容不变,目的操作数内容被修改为源操作数内容。访问片内数据存储器访问程序存储器访问片外数据存储器P.34一、片内数据存储器及寄存器的数据传送指令指令图解dir@RiRn#dataA

操作码汇编指令操作说明74dataMOVA,#data将立即数data送入AE8~EFMOVA,Rnn=0~7,将Rn内容送入AE5directMOVA,direct将direct单元内容送入AE6,E7MOVA,@Rii=0,1;将Ri所指单元内容送入AF8~FFMOVRn,A将A的内容送入RnA8~AFdirectMOVRn,direct将direct单元内容送入Rn78~7FdataMOVRn,#data将立即数data送入RnF6,F7MOV@Ri,A将A的内容送入Ri所指单元A6,A7directMOV@Ri,direct将direct单元内容送入Ri所指单元76,77dataMOV@Ri,#data将立即数data送入Ri所指单元

操作码汇编指令操作说明F5directMOVdirect,A将A的内容送入direct88~8FdirectMOVdirect,Rn将Rn的内容送入direct85direct2direct1MOVdirect1,direct2将direct2的内容送入direct186,87directMOVdirect,@Ri将Ri所指单元内容送入direct75directdataMOVdirect,#data将立即数data送入direct90dataHdataLMOVDPTR,#data16将立即数data16送入DPTRTM数据传送类指令(1)

P.47例-B1:已知R0=30H,片内数据存储器(30H)=50H,(40H)=60H,执行下列各指令后,A中内容是多少?

MOVA,R0;MOVA,@R0;MOVA,40H;MOVA,#40H;…………60H30H……50H……R0A40H30HXX片内数据存储器30HA=30HR050HA=50H60H40HA=60HA=40H40HX7片内数据存储器20HX8X5X1X4X3X2R1A30HBDPLDPHX640H30H10H片内数据存储器及寄存器的数据传送指令例-B2:分析执行下列程序段后,各相关存储单元和寄存器内容有何变化? MOVR1,#40H;R1= MOVA,R1;A= MOV30H,A;(30H)=MOV20H,30H;(20H)= MOV@R1,#30H;(40H)= MOV20H,@R1(20H)= MOVB,#10H;B= MOVDPL,20H;DPL=MOVDPH,0F0H;DPH=40H40H40H40H40H40H40H40HR130H30HR130H30H10H30H30H10H10H执行后A=40HB=10HR1=40HDPTR=1030H(20H)=30H(30H)=40H(40H)=30H【例3-B2】标出各操作数的寻址方式,各指令的机器代码

MOVR1,#40H; MOVACC,R1; MOV30H,A; MOV20H,

0E0H; MOV@R1,#30H; MOV20H,@R1; MOVB,#10H; MOVDPL,20H; MOVDPH,0F0H;寄存器寻址寄存器寻址寄存器寻址寄存器间接寻址寄存器间接寻址直接寻址直接寻址直接寻址直接寻址直接寻址直接寻址直接寻址直接寻址直接寻址直接寻址立即寻址立即寻址立即寻址79

4089

E0F5

3085

E02077

3087

2075

F01085

208285

F083机器码字节数222322333MOVRn,#dataMOVdirect,RnMOVdirect,AMOVdirect1,direct2MOV@Ri,#dataMOVdirect,@RiMOVdirect,#dataMOVdirect1,direct2MOVdirect1,direct2例-B3写出各操作数寻址方式、各指令的机器代码及执行结果

MOVA,#40H MOV40H,#0F8H

MOVR0,ACC

MOV30H,@R0

MOVR6,30H寄存器寻址立即寻址直接寻址立即寻址寄存器寻址寄存器寻址直接寻址直接寻址直接寻址寄存器间接寻址机器码字节数274H40H375H40HF8H2A8HE0H286H30H2AEH30H;A=40H;(40H)=F8H;R0=40H;(30H)=F8H;R6=F8H执行上述程序段后A=40H,R0=40H,R6=F8H,(30H)=F8H,(40H)=F8H。作业一:

P.28--1.2.3.4.6.7.补充

如下程序段,请在指令左边写出各机器指令代码,在各操作数下方注明其寻址方式,分析每条指令执行后的结果以及最终A、B、R1、R5、(3AH)、(3BH)等单元的内容。

MOVR1,#3AHMOVA,#48H MOV@R1,ACC MOVB,3AH MOV3AH,#5CH MOV3BH,@R1 MOVR5,0F0H MOV@R1,#7DH MOV0E0H,3BHA外部数据存储器程序存储器

@Ri,A@DPTR,AA,@RiA,@DPTRMOVXMOVCA,@A+PCA,@A+DPTRMOVXMOVC二、片外数据传送指令先送给A片外数据传送指令

特点:

只能与A之间进行数据传送

只能采用寄存器间接寻址方式操作码汇编指令操作说明E0MOVXA,@DPTR将DPTR所指的片外数据存储器单元内容送入AF0MOVX@DPTR,A将A的内容送入DPTR所指的片外数据存储器单元E2,E3MOVXA,@Ri将Ri所指的片外数据存储器单元内容送入AF2,F3MOVX@Ri,A将A的内容送入Ri所指的片外数据存储器单元例-B4:编程将片外数据存储器2040H单元的内容传送到3000H单元。

ORG1000HMOVDPTR,#2040HMOVXA,@DPTR;MOVDPTR,#3000HMOVX@DPTR,A;LP:SJMPLPDPLDPTRDPHDPTR……A……X1……X22040H3000H片外数据存储器片内数据存储器20H40HX130H00HDPTRX12040H单元内容送入AA的内容送入3000H单元三、查表指令

程序存储器主要用来存放程序,也可存放表格常数,要取出表格常数时,可以采用查表指令。特点

只能将表格常数读入A中表格常数采用变址寻址方式操作码汇编指令操作说明93MOVCA,@A+DPTR将以A+DPTR为地址的程序存储器单元内容送入A83MOVCA,@A+PC将以A+PC为地址的程序存储器单元内容送入A指令执行后的值指令功能说明例:已知DPTR=2000H,A=E0H,则执行MOVCA,@A+DPTR过程如下图所示:2000H+E0H=20E0HE0HA20H00HDPTRDPHDPL47H…………93H……ROM2040H20E0HALU程序存储器47H应用例-B5:用查表方法求片内数据存储器30H单元内容(0~9)的平方值,并存入31H单元。y=x2

分析:假设先将0~9的平方值连续存放在程序存储器2009H开始的单元中。则每个平方值存放的单元地址=表格首地址+自变量自变量即为待求平方值的数。表格地址内容y表首地址自变量x2009H00H

2009H+0200AH01H

2009H+1200BH04H

2009H+2200CH09H

2009H+3………2012H51H

2009H+9ROMDPTRAxy方法1 :(使用MOVCA,@A+DPTR指令)

ORG1FF0H MOVA,30H;取数(即自变量,作偏移量送A) MOVDPTR,#2009H(或#TAB);表格首址送DPTR

MOVCA,@A+DPTR;查表取平方值 MOV31H,A;存结果LP:SJMPLP ORG2009HTAB: DB0,1,4,9,16,25 DB36,49,64,81;平方值表格

DB(定义字节伪指令)

方法2::(使用MOVCA,@A+PC指令)

ORG2000H2000HE530MOVA,30H;取数2002H2404ADDA,#04H;加差址2004H83MOVCA,@A+PC

;查表2005HF531NPC:MOV31H,A;存结果2007H80FELP:SJMPLP2009H00TAB:DB0,1,4,9,16,25200AH01DB36,49,64,81;平方值表

差址=TAB-NPC=2009H-2005H=04HALU04H20H05H0若使用查表指令MOVCA,@A+PC

;A←((A)+(PC))指令执行前(A)=0+4,(PC)=2004HPC取指执行2005+4=2009HAPCPC指令执行后的值200483H……ROM……002009200501200A04200B…………表格图解

……

……2004H832005H(NPC)F52006H312007H802008HFE2009H(TAB)00200AH01200BH04200CH09…………MOVCA,@A+PCNPC:MOV31H,ALP:SJMPLPTAB:DB0,1,4,9,16,25DB36,49,64,81该条指令执行后的值PC表头差址差址=表头地址—PC=TAB—NPC=4ADDA,#04H;加差址ORG2000HMOVA,30H;取数方法2也可写成:

ORG2000HMOVA,30H;取数

ADDA,#TAB—NPC;加差址MOVCA,@A+PC;查表NPC:MOV31H,A;存结果LP:SJMPLPTAB:DB0,1,4,9,16,25DB36,49,64,81;平方值表【思考】指出下列非法指令违背了什么样的概念或规则?1.MOV@R3,A2.MOVDPTR,A3.MOV#2AH,A4.MOVA,@DPTR5.MOVDPTR,10H6.MOV40H,DPTR7.MOVX40H,#30H8.MOVX201AH,A9.MOV201AH,A10.MOV@R0,R411.MOVA,@DPTR12.MOVDPTR,R1MOVX@DPTR,R114.PUSHA15.POPR216.PUSH@R1四、交换指令数据交换指令图解XCHD7~D0D7~D0XCHDD7~D0SWAPdir@RiRnA字节交换低4位交换高4位、低4位交换交换指令操作码汇编指令操作说明C8~CFXCHA,Rn将Rn内容与A中内容全交换C5directXCHA,direct将direct中内容与A中内容全交换C6,C7XCHA,@Ri将Ri所指单元内容与A中内容全交换D6,D7XCHDA,@Ri将Ri所指单元内容低4位与A中内容低4位交换C4SWAPAA中内容高4位与低4位交换例:已知A=34H,R1=50H,片内数据存储器(50H)=56H,分析执行下列指令的结果。

XCHA,R1;A=,R1=XCHA,@R1;A=,(50H)=XCHDA,@R1;A=,(50H)=SWAPA;A=50H34H56H34H36H54H43H不影响标志位CACOV

3.4.2算术运算类指令

积>FF则0V=1B=0则0V=1不影响ACOV标志结果存累加器A

CyCyTM特点:一般会影响标志寄存器PSW的状态3.程序状态字寄存器PSW(标志寄存器)记存CPU执行算术运算及某些操作的一些特征标志信息,以备后用SFR名+位次:PSW.7PSW.6PSW.5PSW.4PSW.3PSW.2PSW.1PSW.0

字节地址+位次:0D0H.70D0H.60D0H.50D0H.40D0H.30D0H.20D0H.10D0H.0位地址:D7HD6HD5HD4HD3HD2HD1HD0HSFR名字节地址位名称进位标志位辅助进位标志位溢出标志位奇偶标志位用户标志位工作寄存器区选择控制位加减运算时最高位向上有进/借位则置‘1’加减运算时D3位向D4位有进/借位则置‘1’BCD数运算修正用加减运算时D7、D6位向上的进/借位不同则置‘1’补码运算时表征溢出A中‘1’的个数为奇则置‘1’表征8位码的奇偶性P.14图2-3PSW的格式半进位标志位随时根据A的内容变化生成位次dir@RiRn#dataA一、加法指令1、加法指令

操作码汇编指令操作说明24dataADDA,#data立即数data与A中内容相加,结果存入A,影响PSW位状态。25directADDA,directDirect单元内容与A中内容相加,结果存入A,影响PSW位状态。28~2FADDA,RnRn内容与A中内容相加,结果存入A,影响PSW位状态。26,27ADDA,@RiRi所指单元内容与A中内容相加,结果存入A,影响PSW位状态。例:A(A)+((Ri))【例3-1】

(A)=53H,(R0)=FCH,执行指令

ADDA,R001010011+)11111100

101001111Cy=1,Ac=0,P=1(A中“1”的位数为奇数)OV=0(位6和位7同时有进位),结果:(A)=4FH,【例3-2】

(A)=85H,(R0)=20H,(20H)=AFH,执行指令:

ADDA,@R0

10000101+)10101111

100110100结果:(A)=34H,Cy=1,Ac=1,OV=1(位7有进位,而位6无进位),P=1P.382、带进位加法指令带进位加法指令常用于多字节数相加。操作码汇编指令操作说明34dataADDCA,#data立即数data与A中内容带进位相加,结果存入A,影响PSW位状态。35directADDCA,directDirect单元内容与A中内容带进位相加,结果存入A,影响PSW位状态。38~3FADDCA,RnRn内容与A中内容带进位相加,结果存入A,影响PSW位状态。36,37ADDCA,@RiRi所指单元内容与A中内容带进位相加,结果存入A,影响PSW位状态。指令执行前状态A(A)+((Ri))+Cy【例3-3】

(A)=85H,(20H)=FFH,Cy=1,执行指令:

ADDCA,20H10000101+)11111111

P.38执行前Cy:

1110000101(A)=85H,Cy=1,Ac=1,OV=0,P=1结果为:例-B6片内RAM30H,31H和40H,41H分别存放一个两字节无符号数,编程将两数相加,并将结果存入30H开始的单元。ORG1000HMOVA,30H;取第一数低字节 ADDA,40H;加上第二数低字节 MOV30H,A;存结果低字节 MOVA,31H;取第一数高字节 ADDCA,41H;加上第二数高字节MOV31H,A及低字节进位

MOVA,#0 ADDCA,#0;高字节相加的进位 MOV32H,A SJMP$(31H)(30H)第一数高字节低字节+(41H)(40H)第二数(32H)(31H)(30H)结果3、带借位减法指令操作码汇编指令操作说明94DataSUBBA,#dataA中内容与立即数data带借位相减,结果存入A,影响PSW位状态。95directSUBBA,directA中内容与Direct单元内容带借位相减,结果存入A,影响PSW位状态。98~9FSUBBA,RnA中内容与Rn内容带借位相减,结果存入A,影响PSW位状态。96,97SUBBA,@RiA中内容与Ri所指单元内容带借位相减,结果存入A,影响PSW位状态。A(A)-((Ri))-Cy指令执行前状态【例3-5】(A)=C9H,(R2)=54H,Cy=1,执行指令

SUBBA,R2

11001001—)01010100—)

011101001执行前Cy(A)=74H,Cy=0,Ac=0,OV=1(位6向位7借位而位7无向上借位),P=0结果为:4、加1减1指令

加1指令仅操作数为A时会影响P标志,对其他标志均无影响。操作码汇编指令操作说明04INCAA中内容加108~0FINCRnRn中内容加106,07INC@RiRi所指单元内容加105directINCdirectdirect单元内容加1A3INCDPTRDPTR内容加15、减1指令

减1指令仅操作数为A时会影响P标志,对其他标志均无影响。操作码汇编指令操作说明14DECAA中内容减118~1FDECRnRn中内容减116,17DEC@RiRi所指单元内容减115directDECdirectdirect单元内容减1【例3-6】

(A)=0FH,(R7)=19H,(30H)=00H,(R1)=40H,(40H)=0FFH,执行指令

DEC A ;(A)-1→A=0EH DEC R7 ;(R7)-1→R7=18H DEC 30H ;(30H)-1→30H=FFH DEC @R1 ;((R1))-1→(R1)=FEH

结果为

(A)=0EH,(R7)=18H,(30H)=0FFH,(40H)=0FEH,P=1,不影响其他标志6、乘除指令操作码汇编指令操作说明A4MULABBA(A)×(B)若乘积大于FFH,则OV=1,否则OV=0;Cy=0;影响P。84DIVABA、B中两无符号整数相除(A/B),结果商存入A,余数存入B。当除数B=0时,OV=1,否则OV=0;Cy=0;影响P结果低8位结果高8位【例3-7】(A)=FBH,(B)=12H,执行指令

DIV AB

结果为

(A)=0DH,(B)=11H,Cy=0,OV=0。7、十进制调整指令例(1)(2) 00110101BCD35

+)

01000001BCD41

01110110BCD7601010110BCD56+)01111000BCD7811001110••••••非BCD码,必须进行调整。十进制调整指令十进制调整规则若结果低4位大于9或Ac=1,则补加06H调整。若结果高4位大于9或Cy=1,则补加60H调整。若结果高4位等于9且低4位大于9,则补加66H调整。例:01011001BCD59+)01111000BCD7811010001••••••非BCD码

+)低4位Ac=1高4位大于901100110100110111BCD137判断调整过程由十进制调整指令DAA自动完成十进制调整指令

注意:

DAA指令仅对BCD码加法运算结果进行调整。使用时紧跟ADD(ADDC)指令之后。操作码汇编指令操作说明D4DAA十进制调整,对BCD码十进制加法运算结果调整对标志位的影响:调整过程中,若高位产生进位,则Cy=1,若无进位,Cy保持原状态。OV、Ac不受影响。ADDA,R5

;A=BDH,Cy=0,Ac=0,OV=1,P=0

DAA

;Cy=1,A=23H,Ac=0,OV=1,P=1第一条指令按二进制加与上一条指令执行后的状态一致A=23H=00100011B奇数个“1”结果:Cy=1,A=23H,(应看作BCD码123H,代表十进制数123,与56+67=123一致,正确)Ac=0,OV=1,P=1【例3-4】

(A)=56H,(R5)=67H,把它们看作为两个压缩的BCD数,进行BCD数的加法。执行指令:例-B7:片内RAM30H,31H和40H,41H分别存放一个两字节无符号BCD数,编程将两数相加,并将结果存入30H开始的单元。ORG1000HMOVA,30H;取第一数低字节ADDA,40H;加上第二数低字节

DAA;十进制调整MOV30H,A;存结果低字节MOVA,31H;取第一数高字ADDCA,41H;加上第二数高字节

DAA

;十进制调整MOV31H,A及低字节进位

MOVA,#0ADDCA,#0;高字节相加的进位;无需进行十进制调整(其结果为00H或01H)

MOV32H,ASJMP$【练习】如果是双字节数相加结果只需双字节呢?如果是双字节二进制数相加(不是BCD数)呢?如果是双字节二进制数相减结果为双字节二进制数呢?如果是单字节二进制数相加结果为双字节呢?如果是(31H)、(30H)的双字节数加上(41H)、(40H)中的双字节数,三字节结果存放于(52H)、(51H)、(50H)中,前者为高字节,如何编程。dir@RiRnA算术运算指令图解BDPTR#DATAADDADDADDADDADDCADDCADDCADDCSUBBSUBBSUBBSUBBDAINCINCINCINCINCDECDECDECDECMULDIV3.4.3逻辑操作类指令跟‘0’相与的位被屏蔽(清0)跟‘1’相或的位被置1跟‘1’相异或的位被求反TM一、逻辑“与”运算指令操作码汇编指令操作说明54dataANLA,#datadata与A内容相“与”,结果存入A55directANLA,directdirect内容与A内容相“与”,结果存入A58~5FANLA,RnRn内容与A内容相“与”,结果存入A56,57ANLA,@RiRi所指单元内容与A内容相“与”,结果存入A52directANLdirect,Adirect内容与A内容相“与”,结果存入direct53directdataANLdirect,#datadata与direct内容相“与”,结果存入direct二进制数的逻辑与运算

0^0=01^0=00^1=01^1=1

例:

逻辑与运算常用来将一个数据的某些位清零(屏蔽),而保持其他位不变。

例-B8:将30H单元的高4位清零,低4位保持不变,可用下面指令实现。

ANL30H,#0FH(#00001111B)10110011B^)

01111101B

0011

0001B和0相与和1相与【例3-9

】(A)=07H,(R0)=0FDH,执行指令:

ANLA,R0

结果:(A)=05H二、逻辑“或”运算指令操作码汇编指令操作说明44dataORLA,#datadata与A内容相“或”,结果存入A45directORLA,directdirect内容与A内容相“或”,结果存入A48~4FORLA,RnRn内容与A内容相“或”,结果存入A46,47ORLA,@RiRi所指单元内容与A内容相“或”,结果存入A42directORLdirect,Adirect内容与A内容相“或”,结果存入direct43directdataORLdirect,#datadata与direct内容相“或”,结果存入direct二进制数的逻辑或运算

0v0=01v0=10v1=11v1=1

例:

逻辑或运算常用来将一个数据的某些位置1,而保持其他位不变。

例-B9:将30H单元的低4位置1,高4位保持不变,可用下面指令实现。

ORL30H,#0FH(#00001111B)

10100001Bv)01101101B

11101101B和1相或和0相或【例3-10】

(P1)=05H,(A)=33H,执行指令

ORLP1,A

结果:(P1)=37H三、逻辑“异或”运算指令操作码汇编指令操作说明64dataXRLA,#datadata与A内容“异或”,结果存入A65directXRLA,directdirect内容与A内容“异或”,结果存入A68~6FXRLA,RnRn内容与A内容“异或”,结果存入A66,67XRLA,@RiRi所指单元内容与A内容“异或”,结果存入A62directXRLdirect,Adirect内容与A内容“异或”,结果存入direct63directdataXRLdirect,#datadata与direct内容“异或”,结果存入direct

二进制数的逻辑异或运算

0

0=01

0=10

1=11

1=0

例:

逻辑异或运算常用来将一个数据的某些位取反,而保持其他位不变。

例-B10:将A的奇数位取反而偶数位保持不变,可用下面指令实现。 XRLA,#0AAH(XRLA,#10101010B)

10100001B

)01101101B11001100B和1相异或和0相异或【例3-11】(A)=90H,(R3)=73H执行指令:

XRLA,R3结果:(A)=E3H四、累加器清零、取反指令操作码汇编指令操作说明F4CPLAA中内容按位取反E4CLRAA中内容清零累加器清零、取反指令例:将累加器A的内容取反。(1)CPLA(2)XRLA,#0FFH例:将累加器A清零。(1)CLRA(2)ANLA,#0(3)MOVA,#0五、循环移位指令操作码汇编指令操作说明23RLAA中内容循环左移一位,D7移入D003RRAA中内容循环右移一位,D0移入D733RLCAA中内容带进位位循环左移一位,D7移入C,C移入D013RRCAA中内容带进位位循环右移一位,D0移入C,C移入D7RLCA操作示意:CyD7D6D5D4D3D2D1D0RLA操作示意:D7D6D5D4D3D2D1D0逻辑运算指令图解dir@RiRnA#DATAANLANLANLANLORLORLORLORLXRLXRLXRLXRLRLANLORLXRLRLCRRRRCCLRCPL

逻辑运算指令只有目的操作数为A时会影响P,

对其他标志无影响。【例B3-11】8位二进制码算术左移(无符号数乘2):

CLRC;Cy清0RLCA;左移1位,低位补0,原最高位进到Cy中

【例B3-12】8位二进制码逻辑右移(无符号数除2):

CLRC ;Cy清0RRCA;右移1位,高位补0,原最低位移到Cy中

【思考】DPTR(DPH、DPL)中的16位二进制码算术左移(乘2)【思考】DPTR(DPH、DPL)中的16位二进制码逻辑右移(除2)【思考】指出下列非法指令违背了什么样的概念或规则?ADD20H,#10HINC@R5DECDPTRADDC

#30H,ARLCADEC#60HANL4AH,R0ORLR0,#8AH作业二:

P.51—7、8、9、10、15、16

补充:请分析下列程序段执行后有关单元的内容。

MOVA,#68H MOVR0,#40H PUSHACC ADDA,#50H MOV@R0,A MOVA,R0 INCR0 MOV@R0,A POPB ORLA,40H答:A=F8H,R0=41H,B=68H,(40H)=B8H,(41H)=40HANLA,R5R3单条指令实现3.4.5位操作指令位传送位清0位求反位置位位逻辑与位逻辑或bit:位直接地址(00H~7FH、80h…F7H),位直接寻址方式C:位累加器,位寄存器寻址方式P.45

20H.6ByteTM1、位传送指令 MOVC,bit;将位地址bit的内容送入C MOVbit,C;将C的内容送入bit位 例:已知片内RAM(20H)=05H执行 MOVC,00H MOV07H,C

位地址=00000101B,;Cy=(00H)bit=(20H.0)=1;(07H)bit=(20H.7)=1之后:片内RAM20H单元的D7位变为1(20H)=10000101B=85H12.位修改指令

位清0指令

CLRC;将Cy清0 CLRbit;将bit位清0

位取反指令

CPLC CPLbit

位置1指令

SETBC SETBbit【例3-13】

CLRC ;0→Cy

CLR27H ;0→24H.7位

CPL08H

;21H.0求反→21H.0位

SETBP1.7 ;1→P1.7位24H.721H.097H或90H.7P.45【例3-12】

MOVC,

06H

;20H.6→Cy

MOVP1.0,C

;Cy→P1.090H或90H.03.位逻辑运算指令

ANLC,bit ANLC,/bit

ORLC,bit ORLC,/bit

例-补充利用位逻辑指令,模拟下图所示硬件逻辑电路功能。参考子程序如下:

PR2:MOVC,P1.1;Cy←(P1.1)ORLC,P1.2;Cy←(P1.1)∨(P1.2)ANLC,P1.0;Cy←A∧(P1.0)CPLC;Cy←MOVF0,C;B点逻辑值暂存于F0(F0即PSW.5位)MOVC,P1.3;Cy←(P1.3)ANLC,/P1.4;Cy←(P1.3)∧ORLC,F0;Cy←D∨BMOVP1.5,C;运算结果输出到P1.5端

RET硬件逻辑电路图=A点逻辑=B点逻辑=D点逻辑【例B3-14】如下控制梯形图,请用MCS-51程序实现:

MOVC,P1.3;取P1.3ANLC,P1.2;串联P1.2ORLC,P2.1;并联P2.1ANLC,/P2.0;串联P2.0常闭点MOVP2.0,C;输出P2.0输入开关量输出驱动请与可编程逻辑控制器的梯形图程序相比较,各自的实现原理与特点?LD

OUT

3.4.4控制转移指令

控制转移指令的功能就是改变程序计数器PC的内容,控制程序从原顺序执行地址转移到目标地址处继续执行。

PC:16位可预置加1计数器每取一个字节指令代码,自动加1执行跳转指令时将目标地址置入PCPC(程序计数器,程序指针):始终存放着下一条CPU要取出执行的指令在程序存储器中的地址。始终指向要取出执行的下一条指令代码存放单元,控制转移指令有无条件转移指令和条件转移指令。P.673.4.4控制转移类指令指令助记符中只需写目标指令前的标号

P.43(POPPC)无条件转移条件转移比较转移循环控制相减但不存差值,生成了Cy减1后回存再判00H否执行相对转移:PC←PC+rel;∴rel=[目标地址-下一指令址]低8位

目标地址下一指令址+偏移量A=00H时转移A≠00H时转移ByteTM兼容于MCS-4864K范围内一、无条件转移指令

1、长转移指令 LJMPaddr163字节;PCaddr16

功能:将addr16送入PC,在执行完该条指令后,程序转移到addr16处继续执行。

例:……

LJMPNEXT……

NEXT:…… 转移的目标地址一般用标号表示转移的目标地址转移范围不受限制。P.442、相对转移指令SJMPrel2字节;PCPC+2+rel

转移的目标地址当前指令地址下一条指令地址偏移量rel=[目标地址—下一条指令地址]低8位rel是8位带符号数,转移范围为-128~+127。

在程序中,rel用目标地址标号表示。例:SJMPNEXT……NEXT:

指令LOOP:SJMPLOOP

也可写成SJMP$

3、短转移指令(了解)AJMPaddr112字节;PC10~0

addr11PC15~11不变转移的目标地址应与该转移指令的下一条指令地址的高5位一致,2K范围内转移。4、间接长转移指令(散转指令,了解)JMP@A+DPTR

例:编程实现,根据片内RAM30H单元内容(0~9)转移至入口地址为OPR0~OPR

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论