第3章指令系统_第1页
第3章指令系统_第2页
第3章指令系统_第3页
第3章指令系统_第4页
第3章指令系统_第5页
已阅读5页,还剩97页未读 继续免费阅读

下载本文档

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

文档简介

第三章MCS-51指令系统内容提要寻址方式数据传送指令算术运算、逻辑运算指令和移位指令控制转移指令位操作指令

3-1概述3.1.1指令格式

计算机通过执行程序完成人们指定的任务,程序由一条一条指令构成,能为CPU识别并执行的指令的集合就是该CPU的指令系统。

MCS-51单片机汇编语言指令格式:

操作码

目的操作数,源操作数操作码指明该指令完成什么操作;

操作数是指明该指令的操作对象。

目的操作数是存放结果的。

3.1.2指令的字节数指令长度:1字节(49),2字节(46),3字节(16)。MOVA,Rn1.一字节指令:2.二字节指令:第一字节:操作码第二字节:操作数MOVA,#data立即数3.三字节指令:第一字节:操作码第二、三字节:操作数(数据、地址)MOVdirect,#dataMCS-51单片机指令系统共有111条指令,分5大类:1)数据传送类指令(28条);2)算术运算类指令(24条);3)逻辑运算及移位类指令(25条);4)控制转移类指令(17条);5)位操作类指令(17条)。3.1.3指令的分类

3.1.4指令中的常用符号Rn:n=(0~7),表示当前工作寄存器R0~R7中的一个。@Ri:i=(0、1),代表R0和R1寄存器中的一个,用作间接寻址寄存器。direct:8位直接字节地址(片内RAM和SFR)#data:8位立即数,即8位常数。通常使用00-FFH中的一个。#data16:表示16位立即数,即16位常数,取值范围为0000H~FFFFH@DPTR:以DPTR为数据指针的间接寻址,用于对片外存储器寻址。addr16:表示16位地址addr11:表示11位地址rel:相对偏移量(为一字节补码)用于相对转移指令中bit:位地址,在位地址空间中。

$:表示当前指令的地址。操作数是指令的重要组成部分,指出了参与操作的数据或数据的地址。寻找操作数的方式称为寻址方式。

MCS-51指令系统共使用了7种寻址方式,包括:寄存器寻址、直接寻址、立即数寻址、寄存器间接寻址、变址寻址、相对寻址和位寻址等。3.2寻

1.寄存器寻址寄存器寻址是指将操作数存放于寄存器中,寄存器包括工作寄存器R0~R7、累加器A、通用寄存器B、地址寄存器DPTR等。

MOV R1,A采用寄存器寻址的指令如下:

MOVP1,A ;将累加器A的内容送到P1口

MOVP1,R4 ;将寄存器R4的内容送到P1口

CLRA ;将累加器A清0CPLA ;将累加器A中的内容取反

RL A ;将累加器A的内容循环左移

2.直接寻址直接寻址是指把存放操作数的内存单元的地址直接写在指令中。在MCS-51单片机中,可以直接寻址的存储器主要有内部RAM区和特殊功能寄存器SFR区。MOVA,3AH注意:1.若直接寻址的地址是SFR中的某一个时,可用名称符号MOVA,SPMOVA,81H2.累加器有A、ACC和E0H三种表示形式INCAINCACCINC0E0H3.字节地址和位地址的区别MOVA,20HMOVC,20H

3.立即数寻址立即数寻址是指将操作数直接写在指令中。

MOVA,#3AH

图3.3立即数寻址示意图注意:立即数前面必须加“#”号,以区别立即数和直接地址。采用立即数寻址的指令如下:

MOV P1,#55H ;将立即数55H送P1口

MOV 20H,#55H ;将立即数55H送20H单元

MOV A,#0F0H ;将立即数0F0H送累加器AMOV R4,#0FH ;将立即数0FH送寄存器R4中

MOV R0,#20H ;将立即数20H送寄存器R0口

4.寄存器间接寻址

将存放操作数的内存单元的地址放在寄存器中,指令中只给出该寄存器。执行指令时,首先根据寄存器的内容,找到所需要的操作数地址,再由该地址找到操作数并完成相应操作。在MCS-51指令系统中,用于寄存器间接寻址的寄存器有R0、R1和DPTR,称为寄存器间接寻址寄存器。注意:间接寻址寄存器前面必须加上符号“@”。MOVA,@R0

图3.4寄存器间接寻址示意图注意:寄存器间址指令可以拓宽寻址范围。@Ri用于片内片外RAM寻址。@DPTR可以覆盖片外64KB的ROM/RAM.寄存器间址指令不能用于寻址特殊功能寄存器SFR.MOVR0,#81HMOVA,@R0

5.变址寻址变址寻址是指将基址寄存器与变址寄存器的内容相加,结果作为操作数的地址。DPTR或PC是基址寄存器,累加器A是变址寄存器。该类寻址方式主要用于查表操作。

MOVCA,@A+DPTR

将累加器A和基址寄存器DPTR的内容相加,相加结果作为操作数存放的地址,再将操作数取出来送到累加器A中。

MOVCA,@A+DPTR图3.5变址寻址示意图

6.相对寻址相对寻址是指程序计数器PC的当前内容与指令中的操作数相加,其结果作为跳转指令的转移地址(也称目的地址)。该类寻址方式主要用于跳转指令。

SJMPrel

将PC当前的内容与rel(-128~127)相加,结果再送回PC中,成为下一条将要执行指令的地址。

SJMP54H图3.6相对寻址示意图

7.位寻址位寻址是指按位进行的寻址操作,而上述介绍的指令都是按字节进行的寻址操作。位寻址区包括专门安排在内部RAM中的两个区域:一是内部RAM的位寻址区,地址范围是20H~2FH,共16个RAM单元,位地址为00H~7FH;二是特殊功能寄存器SFR中有11个寄存器可以位寻址,参见有关章节中位地址定义。图3.7位寻址示意图SETB3DH

3.3数据传送类指令数据传送指令是MCS-51单片机汇编语言程序设计中使用最频繁的指令。数据传送操作是指把数据从源地址传送到目的地址,源地址内容不变。

数据目的地址源地址通用格式:

MOV<目的操作数>,

<源操作数>源操作数可以是:累加器A、通用寄存器Rn、直接地址direct、间接地址和立即数;目的操作数可以是:累加器A、通用寄存器Rn、直接地址direct和间接地址(1)内部RAM数据传送指令(15条)内部RAM是数据传送最为频繁的部分,这其中有寄存器、累加器、RAM单元以及特殊功能寄存器之间的相互数据传送。

dir@Ri

Rn#dataAMOVA,

Rn

#datadir

@RiMOVdir,

ARn,@Ri

#data

dir

MOVRn,MOV@Ri,

A

dir

#data

内部RAM、SFR之间的传送MOV指令

Adir

#data立即寻址型传送指令MOVA,#data ;AdataMOVRn,#data ;RndataMOVdirect,#data ;directdataMOV@Ri,#data ;(Ri)dataMOVA,direct ;A(direct)MOVdirect,A ;directAMOVRn,direct ;Rn(direct)MOV@Ri

,direct ;(Ri)(direct)MOVdirect2,

direct1;

direct2(direct1)已知:R1=32H、(30H)=AAH、(31H)=BBH、(32H)=CCH,执行如下指令后A、50H、R6、32H和P1中的内容是什么。MOVA,30HMOV50H,AMOVR6,31HMOV@R1,30HMOVP1,32H直接寻址型传送指令A=AAH(50H)=AAHR6=BBH(32H)=AAHP1=AAHMOVA,@RiMOV@Ri,AMOVdirect,@Ri寄存器寻址型传送指令MOVA,Rn

MOVRn,A MOVdirect,Rn寄存器间址型传送指令已知:

(40H)=11H、(41H)=22H、R0=40H和R1=41H,执行如下指令后A、40H、41H和42H中的内容是什么。MOVA,@R0MOV@R1,AMOV42H,@R1A=11H、(40H)=11H、(41H)=11H和(42H)=11H外部程序存储器ROM数据传送指令MOVCA,@A+DPTR;A

(A+DPTR)MOVCA,@A+PC;PCPC+1,A(A+PC)(2)外部数据传送指令(7条)MOVDPTR,#data16 ;DPTRdata16累加器A中有一个0-9范围内的数,用查表指令找出该数平方值。MOVDPTR,#2000H;

MOVCA,@A+DPTR(2)ORG1FFBHADDA,#dataMOVCA,@A+PCSJMP$使用Ri进行间接寻址MOVXA,@Ri

;A

(Ri)(i=0,1)MOVX@Ri,A ;(Ri)(A)(i=0,1)Ri寻址范围:256字节注:外部RAM数据传送只能通过累加器A进行使用DPTR进行间接寻址MOVXA,@DPTR ;A

(DPTR)MOVX@DPTR,A ;(DPTR)A外部程序存储器RAM数据传送指令已知外部RAM的88H单元中有一数x,试编一个能把x传送到外部RAM的1818H单元的程序。ORG2000HMOVR0,#88HMOVDPTR,#1818HMOVXA,@R0MOVX@DPTR,ASJMP$END(3)堆栈操作指令进栈指令PUSHdirect ;SPSP+1,(SP)(direct)出栈指令POPdirect ;(direct)(SP),SPSP-1设(30H)=X,(40H)=Y,利用堆栈作为媒体编出30H和40H单元中的内容互相交换的程序。MOVSP,#70HPUSH30HPUSH40HPOP30HPOP40H堆栈操作指令是直接寻址指令。PUSHACCPUSH00HPOPACCPOP00HPUSHAPUSHR0POPAPOPR0(4)数据交换指令(4条)在内部RAM和累加器A之间进行整字节交换指令XCHA,Rn

;ARnXCHA,direct ;A(direct)XCHA,@Ri

;A(Ri)半字节交换指令字节单元与累加器进行低4位的半字节交换。XCHDA,@Ri

;A3~0(Ri)3~0外部RAM的20H单元有一数X,内部RAM的20H单元有一数Y,将它们进行交换。MOVR1,#20HMOVXA,@R1XCHA,@R1MOVX@R1,A50H中有一个0~9的数,编程把它变为相应的ASCII码。MOVR1,#50HMOVA,#30HXCHDA,@R1MOV@R1,A数据传送指令几个注意的地方:MOVXA,@DPTR(外部RAM内容送累加器);执行此指令,P3.7引脚上输出/RD有效信号(低电平),DPTR包含16位地址信息由P0(低8位)、P2口(高8位)提供,数据由P0口输入到累加器。MOVX @DPTR,A执行此指令,P3.6引脚上输出/WR有效信号(低电平),DPTR包含16位地址信息由P0(低8位)、P2口(高8位)提供,数据由P0口写入外部RAM。(1)加ADDADDA,#data;A←A+#data

ADDA,direct;A←A+(direct)ADDA,@Ri;A←A+(Ri)ADDA,Rn;A←A+Rn

3.4算术与逻辑运算和移位指令运算,CY=1,OV=1,AC=0,(PSW)=85H,(A)=6DH例如:MOVA,#0C3HADDA,#0AAH一、算术运算指令(24条)1.加法指令(13条)(2)带进位加ADDCADDCA,#data;A←A+#data+CADDCA,direct;A←A+(direct)+CADDCA,@Ri;A←A+(Ri)+CADDCA,Rn;A←A+Rn+C例如:设累加器A内容为0AAH,R0内容为55H,C内容为1,执行指令:

ADDCA,R0将使(A)=00000000B,AC=1,CY=1,OV=0(3)增量INCINCA;A←A+1INCdirect;direct←(direct)+1INC@Ri;(Ri)←(Ri)+1INCRn;Rn←Rn+1INCDPTR;DPTR←DPTR+1例如:设R0=7EH,片内数据RAM中(7EH)=0FFH,(7FH)=40H,则执行下列指令:INC@R0INCR0INC@R0执行结果:,(7EH)=00H,R0=7FH,(7FH)=41H(1)带借位减SUBBSUBBA,#data;A←A-#data-CSUBBA,direct;A←A–(direct)-CSUBBA,@Ri;A←A-(Ri)-CSUBBA,Rn;A←A-Rn-C例1:设累加器内容为D9H,R0内容为87H,求两者相减结果.

CLRCSUBBA,R0执行后(A)=52H,CY=0,OV=0注意:单字节相减时,须先清借位位,以免相减后结果出错.2.减法指令(8条)

例2:

双字节无符号数相减(R0R1)-(R2R3)→(R4R5)。R0、R2、R4存放16位数的高字节,R1、R3、R5存放低字节,先减低8位,后减高8位和低8位借位。由于低位开始减时没有借位,所以要先清零。其编程如下:

MOVA,R1;取被减数低字节

CLRC;清借位位

SUBBA,R3;低字节相减

MOVR5,A;保存差低字节

MOVA,R0;取被减数高字节

SUBBA,R2;两高字节差减低位借位

MOVR4,A;保存差高字节(2)减量

DECDECA;A←A-1DECdirect;direct←(direct)-1DEC@Ri;(Ri)←(Ri)-1DECRn;Rn←Rn-1例如:执行下述程序

MOVR1,#7FHMOV7EH,#00HMOV7FH,#40HDEC@R1;(7FH)=40H-1DECR1;R1=7FH-1DEC@R1;(7EH)=00H-1结果:R1=7EH,(7EH)=0FFH,(7FH)=3FH

3.二—十进制调整

DAA;将A中二进制相加和调整成BCD码调整方法:和低4位大于9或有半进位则低4位加6;和的高4位大于9或有进位,则高4位加6。

指令根据相加和及标志自行进行判断,因此该指令应紧跟在加指令之后。

例:完成56+17的BCD加法程序。

MOVA,#56H;A存放BCD码56HMOVB,#17H;B存放BCD码17HADDA,B;A=6dHDAA;A=73HSJMP$56H17H6dH673H++乘MULMULAB;BA←(A)×(B)除DIVDIVAB;A(商)B(余数)←A/B4.乘法和除法指令已知两个无符号数分别在30H和31H中,求出它们的乘积,并把结果的低八位放在32H中,高八位放在33H中。ORG1000HMOVR0,#30HMOVA,@R0INCR0MOVB,@R0MULABINCR0MOV@R0,AINCR0MOV@R0,BSJMP$END双操作数指令A与立即数、内部数据存储器间的逻辑操作

ANL(ORL,XRL)A,#dataANL(ORL,XRL)A,directANL(ORL,XRL)A,@RiANL(ORL,XRL)A,RnANL(ORL,XRL)direct,AANL(ORL,XRL)direct,#data寄存器R7~R0

累加器AANL,ORL,XRL寄存器间址@R1,@R0立即数#data直接directANL,ORL,XRL二、逻辑运算指令(20条)例如:设A的内容为0C3H,R0为0AAH,执行指令(ANL、ORL、XRL)后,结果如下:

XRLA,R0;0C3H(11000011B)

0AAH(10101010B)69H(01101001B)ANLA,R0;(A)=82HORLA,R0;(A)=EBH例:

有一双字节正数,求其负数的补码。解:对于一个16位数,R3存高8位,R2存低8位,求补结果仍存R3、R2。求补的参考程序如下:MOVA,R2;低8位数送ACPLA;低8位数取反

INCA;加1得低8位数补码

MOVR2,A;存补码低8位

MOVA,R3;高8位数送ACPLA;高8位取反

ADDCA,#00H;加低8位进位

MOVR3,A;存补码高8位CLRA;A清零CPLA;A求反单操作数指令RLA;左移RRA;右移RLCA;带进位左移RRCA;带进位右移SWAPA三、移位指令(5条)移位指令操作示意图RLARLCARRARRCACYCYRRARLARLCARRCA1001011000101101AA设01001011A1CY11001011A000101101A1CYCYSWAPA;4位环移

指令交换A中低和高半字节,(位3~0和位4~7).例如:MOVA,#A3HSWAPA

结果:(A)=3AH3.5控制转移和位操作类指令

控制转移类指令的本质是改变程序计数器PC的内容,从而改变程序的执行方向。控制转移指令分为:无条件转移指令、条件转移指令和调用/返回指令。助记符格式机器码(B)相应操作指令说明机器周期LJMPaddr1600000010addr15~8addr7~0PCaddr16程序跳转到地址为addr16开始的地方执行2注意:①该指令结果不影响程序状态字寄存器PSW。②该指令可以转移到64KB程序存储器中的任意位置。

1.无条件转移指令(4条)

1)长转移指令(1条)某程序起始地址为A080H,用什么办法使得开机便执行该程序。长转移指令?

2)绝对转移指令(1条)助记符格式机器码(B)相应操作指令说明机器周期AJMPaddr11a10a9a800001addr7~0PCPC+2

PC10~0addr11程序跳转到地址为PC15~11addr11开始的地方执行,2KB内绝对转移2注意:①该指令结果不影响程序状态字寄存器PSW。②该指令转移范围是2KB。例

指令KWR:AJMPKWR1的执行结果。解:设KWR标号地址=1030H,KWR1标号地址=1100H.

该指令执行后PC首先加2变为1032H,然后由1032H的高5位和1100H的低11位拼装成新的PC值0001000100000000B,即程序从1100H开始执行。

3)相对转移指令(1条)助记符格式机器码(B)相应操作指令说明机器周期SJMPrel10000000relPCPC+2PCPC+rel-126~+129短转移2注意:①该指令结果不影响程序状态字寄存器PSW。

该指令的转移范围是以本指令的下一条指令为中心的-126~+129字节以内。③在实际应用中,LJMP、AJMP和SJMP后面的addr16、addr11或rel都是用标号来代替的,不一定写出它们的具体地址。4)变址寻址的无条件转移指令(1条)

助记符格式机器码(B)相应操作指令说明机器周期JMP@A+DPTR01110011PCA+DPTR64KB内相对转移2注意:①该指令结果不影响程序状态字寄存器PSW。②该指令通常用于散转(多分支)程序。

CM:MOVR1,ARLAADDA,R1MOVDPTR,#PMTB

JMP@A+DPTRPMTB:LJMPPM0LJMPPM1LJMPPM2LJMPPM3LJMPPM4累加器中放有一个编号0~4,程序存储器中放有起始地址为PMTB的三字节长转移指令表。编程使机器按照累加器A中的命令编号去执行相应的命令程序。

1)累加器A判0指令(2条)助记符格式机器码(B)相应操作机器周期JZrel0110000rel若A=0,则PCPC+2+rel,否则程序顺序执行2JNZrel01110000rel若A≠0,则PCPC+2+rel,否则程序顺序执行2注意:①以上指令结果不影响程序状态字寄存器PSW。

转移范围与指令SJMP相同。2.条件转移指令(8条)

外部RAM中以DATA1为起始地址的数据块以零为结束标志。编程将之传送到DATA2为起始地址的内部RAM区。

ORG0500HMOVR0,#DATA1MOVR1,#DATA2LOOP:MOVXA,@R0

JZDONEMOV@R1,AINCR0INCR1SJMPLOOPDONE:SJMP$END

2)比较转移指令(4条)

助记符格式机器码(B)相应操作机器周期CJNEA,#data,rel10110100datarel若A≠#data,则PCPC+3+rel,否则顺序执行;若A<#data,则CY=1,否则CY=02CJNERn,#data,rel10111rrrdatarel若Rn≠#data,则PCPC+3+rel,否则顺序执行;若Rn<#data,则CY=1,否则CY=02CJNE@Ri,#data,rel1011011idatarel若(Ri)≠#data,则PCPC+3+rel,否则顺序执行;若(Ri)<#data,则CY=1,否则CY=02CJNEA,direct,rel10110101directrel若A≠(direct),则PCPC+3+rel,否则顺序执行;若A<(direct),则CY=1,否则CY=02注意:①以上指令结果影响程序状态字寄存器PSW的CY标志。②转移范围与SJMP指令相同。

3)减1非零转移指令(2条)助记符格式机器码(B)相应操作机器周期DJNZRn,rel11011rrrrelRnRn-1,若Rn≠0,则PCPC+2+rel,否则顺序执行2DJNZdirect,rel11010101directrel(direct)(direct)-1,若(direct)≠0,则PCPC+3+rel,否则顺序执行2注意:①DJNZ指令通常用于循环程序中控制循环次数。②转移范围与SJMP指令相同。③以上指令结果不影响程序状态字寄存器PSW。

编程将片内RAM中以DAT为起始地址的数据块中的连续十个无符号数相加并将和送回SUM单元。设和不超过8位。

MOVR2,#0AHMOVR0,#DATCLRALOOP:ADDA,@R0INCR0

DJNZR2,LOOPMOVSUM,ASJMP$END

3.调用和返回指令(5条)

1)绝对调用指令(1条)助记符格式机器码(B)相应操作机器周期ACALLaddr11a10a9a810001addr7~0PCPC+2SPSP+1,(SP)PC0~7SPSP+1,(SP)PC8~15PC0~10addr112注意:①该指令结果不影响程序状态字寄存器PSW。

调用范围与AJMP指令相同。设ACALLaddr11在程序存储器中的地址为1FFEH,SP为60H。指出堆栈的变化以及被调用子程序的地址范围。?

2)长调用指令(1条)助记符格式机器码(B)相应操作机器周期LCALLaddr1600010010addr15~8addr7~0PCPC+3SPSP+1,SPPC0~7SPSP+1,SPPC8~15PCaddr162注意:①该指令结果不影响程序状态字寄存器PSW。

②调用范围与LJMP指令相同。

MOVSP,#70HMA:LCALL8192H其中MA=0500H,堆栈如何变化,pc的内容是什么??3)返回指令(2条)助记符格式机器码(B)相应操作机器周期RET00100010PC8~15

(SP),SPSP-1PC0~7(SP),SPSP-1子程序返回指令2RETI00110010PC8~15

(SP),SPSP-1PC0~7(SP),SPSP-1中断返回指令2注意:该指令结果不影响程序状态字寄存器PSW。

ORG1000HMOVSP,#70HMOVR0,#20HMOVR2,#0BHACALLZEROMOVR0,#30HMOVR2,#0FHACALLZEROMOVR0,#40HMOVR2,#10HACALLZEROSJMP$ZERO:MOV@R0,#00HINCR0DJNZR2,ZERO

RETEND试利用子程序技术编出令20H~2AH、30H~3EH和40H~4FH三个子域清零的程序。4)空操作(1条)助记符格式机器码(B)相应操作指令说明NOP00000000PCPC+1消耗1个机器周期注意:该指令结果不影响程序状态字寄存器PSW。位操作类指令位操作指令的操作数是“位”,其取值只能是0或1,故又称之为布尔操作指令。位操作指令的操作对象是片内RAM的位寻址区(即20H~2FH)和特殊功能寄存器SFR中的11个可位寻址的寄存器。片内RAM的20H~2FH共16个单元128个位,我们为这128个位的每个位均定义一个名称:00H~7FH,称为位地址。对于特殊功能寄存器SFR中可位寻址的寄存器的每个位也有名称定义。

对于位寻址,有以下三种不同的写法。第一种是直接地址写法,如MOVC,0D2H,其中,0D2H表示PSW中的OV位地址。第二种是点操作符写法,如MOVC,0D0H.2(PSW.2)。第三种是位名称写法,如MOVC,OV。助记符格式机器码(B)相应操作指令说明机器周期MOVC,bit10100010CYbit位传送指令,结果影响CY标志2MOVbit,C10010010bitCY位传送指令,结果不影响PSW2注意:位传送指令的操作数中必须有一个是进位位C,不能在其它两个位之间直接传送。进位位C也称为位累加器。

1.位传送指令(2条)

2.位置位和位清零指令(4条)助记符格式机器码(B)相应操作指令说明机器周期CLRC11000011CY0位清0指令,结果影响CY标志1CLRbit11000010bitbit0位清0指令,结果不影响PSW1SETBC11010011CY1位置1指令,结果影响CY标志1SETBbit11010010bitbit1位置1指令,结果不影响PSW1ANLC,bitANLC,/bitORLC,bitORLC,/bitCPLCCPLbit

3.位运算指令(6条)例用位操作指令实现X=X0⊕X1,设X0为P1.0,X1为P1.1,X为ACC.0。解:因位操作指令中无异或指令,依据X=X0⊕X1=X0/X1+/X0X1用与、或指令完成,编程如下:

XBITACC.0X0BITP1.0X1BITP1.1;位定义

MOVC,X0ANLC,/X1;C=X0∧/X1MOV20H,C;暂存于20H单元

MOVC,X1ANLC,/X0;C=/X0∧X1ORLC,20H;C=X0X1+X0X1MOVX,CSJMP$4.位控制转移指令(1)判CY标志指令(2条)

助记符格式机器码(B)相应操作机器周期JCrel01000000rel若CY=1,则PCPC+2+rel,否则顺序执行2JNCrel01010000rel若CY=0,则PCPC+2+rel,否则顺序执行2注意:以上结果不影响程序状态字寄存器PSW。

MOVA,20H

CJNEA,#50D,COMPSJMPLOOP2COMP:JNCLOOP3LOOP1:LOOP2:LOOP3:已知20H中有一个无符号数X,若它小于50,则转向LOOP1;若等于50,则转向LOOP2执行,若大于50,则转向LOOP3执行。

(2)条件转移指令(3条)

助记符格式机器码(B)相应操作指令说明机器周期ANLC,bit10000010bitCYCY∧bit位与指令2ANLC/bit10110010bitCYCY∧位与指令2ORLC,bit01110010bitCYCY∨bit位或指令2ORLC/bit10100010bitCYCY∨位或指令2CPLC10110011CY位取反指令2CPLbit10110010bit位取反指令,结果不影响CY2助记符格式机器码(B)相应操作指令说明机器周期ANLC,bit10000010bitCYCY∧bit位与指令2ANLC/bit10110010bitCYCY∧位与指令2ORLC,bit01110010bitCYCY∨bit位或指令2ORLC/bit10100010bitCYCY∨位或指令2CPLC10110011CY位取反指令2CPLbit10110010bit位取反指令,结果不影响CY2助记符格式机器码(B)相应操作指令说明机器周期ANLC,bit10000010bitCYCY∧bit位与指令2ANLC/bit10110010bitCYCY∧位与指令2ORLC,bit01110010bitCYCY∨bit位或指令2ORLC/bit10100010bitCYCY∨位或指令2CPLC10110011CY位取反指令2CPLbit10110010bit位取反指令,结果不影响CY2助记符格式机器码(B)相应操作指令说明机器周期ANLC,bit10000010bitCYCY∧bit位与指令2ANLC/bit10110010bitCYCY∧位与指令2ORLC,bit01110010bitCYCY∨bit位或指令2ORLC/bit10100010bitCYCY∨位或指令2CPLC10110011CY位取反指令2CPLbit10110010bit位取反指令,结果不影响CY2助记符格式机器码(B)相应操作指令说明机器周期ANLC,bit10000010bitCYCY∧bit位与指令2ANLC/bit10110010bitCYCY∧位与指令2ORLC,bit01110010bitCYCY∨bit位或指令2ORLC/bit10100010bitCYCY∨位或指令2CPLC10110011CY位取反指令2CPLbit10110010bit位取反指令,结果不影响CY2c机器码(B)相应操作指令说明机器周期ANLC,bit10000010bitCYCY∧bit位与指令2ANLC/bit10110010bitCYCY∧位与指令2ORLC,bit01110010bitCYCY∨bit位或指令2ORLC/bit10100010bitCYCY∨位或指令2CPLC10110011CY位取反指令2CPLbit10110010bit位取反指令,结果不影响CY2助记符格式机器码(B)相应操作机器周期JBbit,rel00100000bitrel若bit=1,则PCPC+3+rel,否则顺序执行2JNBbit,rel00110000bitrel若bit=0,则PCPC+3+rel,否则顺序执行2JBCbit,rel00010000bitrel若bit=1,则PCPC+3+rel,bit0,否则顺序执行2注意:① JBC与JB指令的区别是:前者转移后并把寻址位清0,后者只转移不清0寻址位。②以上指令结果不影响程序状态字寄存器PSW。

已知外部RAM2000H开始处有一个数据块以回车符(0DH)结束,编写一个程序把正数送入片内30H开始的区域,负数送入40H开始的区域.

MOVDPTR#2000HMOVR0,#30HMOVR1,#40HNEXT:MOVXA,@DPTRCJNEA,#0DH,COMPSJMPDONECOMP:JBACC.7,LOOPMOV@R0,AINCR0INCDPTRSJMPNEXTLOOP:MOV@R1,AINCR1INCDPTRSJMPNEXTDONE:SJMP$END常用伪指令单片机汇编语言程序设计中,除了使用指令系统规定的指令外,还要用到一些伪指令。伪指令又称指示性指令,具有和指令类似的形式,但汇编时伪指令并不产生可执行的目标代码,只是对汇编过程进行某种控制或提供某些汇编信息。下面对常用的伪指令作一简单介绍。一、汇编起始指令ORG指令格式为:ORGnn

该指令的作用是指明后面的程序或数据块的起始地址,它总是出现在每段源程序或数据块的开始。式中,nn

温馨提示

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

评论

0/150

提交评论