第三章 MCS-51系列单片机的指令系统及汇编语言程序设计_第1页
第三章 MCS-51系列单片机的指令系统及汇编语言程序设计_第2页
第三章 MCS-51系列单片机的指令系统及汇编语言程序设计_第3页
第三章 MCS-51系列单片机的指令系统及汇编语言程序设计_第4页
第三章 MCS-51系列单片机的指令系统及汇编语言程序设计_第5页
已阅读5页,还剩108页未读 继续免费阅读

下载本文档

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

文档简介

第3章MCS-51系列单片机的指令系统及汇编语言程序设计3.1寻址方式3.2指令系统3.3汇编语言程序设计3.4实用汇编语言程序设计3.1寻址方式3.1.1立即寻址3.1.2直接寻址3.1.3寄存器寻址3.1.4寄存器间接寻址3.1.5变址寻址3.1.6相对寻址3.1.7位寻址3.1寻址方式MCS-51的基本指令共111条,按指令所占的字节来分:(1)单字节指令49条,操作码、操作数

同在一个字节中。(2)双字节指令45条,操作码+操作数(3)三字节指令17条,操作码+操作数+操作数。按指令的执行时间来分:(1)1个机器周期(12个时钟振荡周期)指令64条(2)2个机器周期(24个时钟振荡周期)指令45条(3)只有乘、除两条指令的执行时间为4个机器周期(48个时钟振荡周期)。指令格式

MCS-51汇编语言指令格式如下:[标号:]操作码[操作数][;注释]操作码:规定指令进行什么操作

操作数:指令操作的对象指令系统的寻址方式:

寻址方式就是在指令中说明操作数所在地址的方法。共7种寻址方式。

3.1.1立即寻址

操作数在指令中直接给出,需在操作数前面加前缀“#”。例如:

MOVR0,#58H

16位立即数的存放顺序是高8位在前(低地址单元),低8位在后(高地址单元)。例如,

MOVDPTR,#1234H寻址范围:程序存储器3.1.2直接寻址操作数直接以单元地址的形式给出:寻址范围:(1)内部RAM的128个单元(2)特殊功能寄存器。除了以单元地址的形式外,还可用寄存器符号的形式给出。例如:MOVA,80H与MOVA,P0是等价的。例如:(1)、MOV81H,#40HMOVSP,#40H将立即数40H传送给片内RAM地址81H字节单元。(2)、MOVC,18H片内RAM区23H单元的D0位内容送给进位位C3.1.3寄存器寻址操作数在寄存器中寄存器包括A、B、C、DPTR和R0~R7。

例如,DECA;累加器A-1→AA、B既可以是寄存器寻址,也可以是直接寻址。累加器A写做ACC时是直接寻址。B在乘除法指令中为寄存器寻址,在其他指令中为直接寻址。

寻址范围:A、B、C、DPTR和R0~R7。3.1.4.寄存器间接寻址方式

寄存器中存放的是操作数的地址,在寄存器前加前缀标志“@”。访问内部RAM或外部RAM的低256个字节时,只能采用R0或R1作为间址寄存器。例如:

MOVA,@Ri;i=0或1

其中Ri中的内容为40H,把内部RAM40H单元内容送A。寻址范围:(1)访问内部RAM低128个单元,其通用形式为@Ri(2)对外部内部RAM的64K字节的间接寻址,例如: MOVXA,@DPTR3.1.5变址寻址

本寻址方式是以DPTR或PC作基址寄存器,以累加器A作为变址寄存器,由DPTR或者PC中的内容与累加器A内容之和形成操作数在程序存储器中的地址。例如:指令MOVCA,@A+DPTR

其中A的原有内容为05H,DPTR的内容为0400H,该指令执行的结果是把程序存储器0405H单元的内容传送给A。说明:(1)本寻址方式是专门针对程序存储器的寻址方式,寻址范围可达到64KB。(2)本寻址方式的指令只有3条:

MOVCA,@A+DPTR MOVCA,@A+PC JMP@A+DPTR3.1.6相对寻址

用于转移指令中修改PC的值。在相对寻址的转移指令中,操作数为转移地址的位移量,,以“rel”表示,即把PC的当前值加上偏移量就构成了程序转移的目的地址:

目的地址=源地址+2(或者3)+相对偏移量

偏移量rel是一带符号的8位二进制数补码数。范围是:–128-+127

说明:本寻址方式是专门针对程序存储器的寻址方式,寻址范围可达到64KB。3.1.7位寻址

对一个字节中的某一位单独进行操作时这个操作数的地址称为位地址,对位地址寻址简称位寻址。可以进行位寻址的区域有:寻址范围包括:(1)内部RAM中的位寻址区。(2)特殊功能寄存器中的可寻址位可寻址位在指令中有如下4种的表示方法:a.直接使用位地址。例如PSW.5的位地址为0D5H。b.位名称的表示方法。例如:PSW.5是F0标志位,可使用F0表示该位。c.单元地址加位数的表示方法。例如:(0D0H).5。d.特殊功能寄存器符号加位数的表示方法。例如:PSW.5。1.下列各条指令其源操作数的寻址方式是什么?(1)MOV A,#48H;寻址方式:

立即数寻址

(2)ADD A,60H;寻址方式:直接寻址寄存器寻址

(3)ANL A,@R0;寻址方式:寄存器间接

2、MCS—51指令共有六种寻址方式,分别是立即数寻址、_________、_________、寄存器间接寻址、__________、相对寻址。3、片内RAM可进行位寻址的空间位地址范围是__20H-2FH____________。4、

指令是MCS-51指令系统中执行时间最长且长达4us的。(A)比较转移(B)循环转移(C)增减量(D)乘除法5、8051单片机中既可位寻址又可字节寻址的单元是(

a)20H

b)30H

c)00H

d)70H

6、MOV

A,30H的源操作数为

寻址方式。7、MOVXA,@R0指令中,源操作数采用()寻址方式,指令作用在()区间。A.寄存器,外部数据存储器B.直接,程序存储器C.寄存器间接,内部数据存储器D.寄存器间接,外部数据存储器8、JNZREL指令的寻址方式是()A.立即寻址B.寄存器寻址C.相对寻址

D.位寻址9、MOVXA,@DPTR指令中源操作数的寻址方式是()A.寄存器寻址B.寄存器间接寻址C.直接寻址D.立即寻址3.2MCS-51指令系统111条指令,按功能分类,可分为下面5大类:(1)数据传送类(28条)(2)算术操作类(24条(3)逻辑运算类(25条)(4)控制转移类(17条)(5)位操作类(17条)指令中符号的意义:Rn:当前工作寄存器区的8个工作寄存器R0~R7(n=0~7)。Ri:当前寄存器区中可作间接寻址寄存器的2个寄存器R0、R1(i=0,1)。Direct:直接地址,即8位的内部RAM或特殊功能寄存器的地址。#data:包含在指令中的8位立即数。#data16:包含在指令中的16位立即数。Rel:相对转移指令中的偏移量,为8位的带符号补码数。DPTR数据指针,可用作16位的数据地址寄存器。bit内部RAM或特殊功能寄存器中的直接寻址位。C(或Cy)进位标志位或位处理机中的累加器。addr11

11位目的地址addr16

16位目的地址@

间接寻址寄存器前缀,如@Ri,@A+DPTR(X)

X中的内容。((X))由X寻址的单元中的内容。→箭头右边的内容被箭头左边的内容所取代。3.4.1数据传送类指令

使用最频繁的一类指令,属“复制”性质,而不是“搬家”数据传送类指令不影响标志位:Cy、Ac和OV,影响奇偶标志位P。数据传送示意图1、内部数据传送指令

源操作数和目的操作数都在单片机内部的RAM中1).以累加器为目的操作数的指令

MOVA,Rn;(Rn)→A,n=0~7 MOVA,@Ri;((Ri))→A,i=0,1 MOVA,direct;(direct)→A MOVA,#data;#data→A例如:

MOVA,R6;(R6)→A,寄存器寻址 MOVA,70H;(70H)→A,直接寻址 MOVA,@R0;((R0))→A,间接寻址 MOVA,#78H;78H→A,立即寻址2).以Rn为目的操作数的指令

MOVRn,A;(A)→Rn,n=0~7 MOVRn,direct;(direct)→Rn,n=0~7MOVRn,#dat;#data→Rn,n=0~7功能:是把源操作数的内容送入当前一组工作寄存器区的R0~R7中的某一个寄存器。3).以直接地址direct为目的操作数的指令

MOVdirect,A;(A)→directMOVdirect,Rn;(Rn)→direct,n=0~7MOVdirect1,direct2; MOVdirect,@Ri;((Ri))→direct MOVdirect,#data;#data→direct功能:把源操作数送入直接地址指出的存储单元。direct指的是内部RAM或SFR的地址。4).以寄存器间接地址为目的操作数的指令

MOV@Ri,A;(A)→((Ri)),i=0,1MOV@Ri,direct;(direct)→((Ri))MOV@Ri,#data;#data→((Ri))5).16位数传送指令

MOVDPTR,#data16;#data16→DPTR唯一的16位数据的传送指令,立即数的高8位送入DPH,立即数的低8位送入DPL。2、外部数据传送指令用于访问片外64K的RAM(包括片外IO接口芯片)MOVX指令执行的时候会使RD或者WR有效

MOVXA,@DPTR

;((DPTR))→A,读外部RAM/IO

MOVXA,@Ri

;((Ri))→A,读外部RAM/IO

MOVX@DPTR,A;(A)→((DPTR)),写外部RAM/IO

MOVX@Ri,A

;(A)→((Ri)),写外部RAM/IO功能:读外部RAM存储器或I/O中的一个字节,或把A中一个字节的数据写到外部RAM存储器或I/O中。

注意:RD*或WR*信号有效。采用DPTR间接寻址,高8位地址(DPH)由P2口输出,低8位地址(DPL)由P0口输出。采用Ri(i=0,1)间接寻址,可寻址片外RAM的256个单元。Ri内容由P0口输出。MOV后“X”表示单片机访问的是片外RAM存储器或I/O。3、程序存储器数据传送指令共两条,用于读程序存储器中的特殊数据指令,均采用基址寄存器加变址寄存器间接寻址方式。

(1)MOVCA,@A+PC以PC作基址寄存器,A的内容作为无符号整数和PC中的内容(下一条指令的起始地址)相加后得到一个16位的地址,该地址指出的程序存储单元的内容送到累加器A。

注意:PSEN*信号有效。例如:(A)=30H,执行地址1000H处的指令1000H:MOVCA,@A+PC本指令占用一个字节,执行结果将程序存储器中1031H的内容送入A。(2)MOVCA,@A+DPTR以DPTR作为基址寄存器,A的内容作为无符号数和DPTR的内容相加得到一个16位的地址,把由该地址指出的程序存储器单元的内容送到累加器A.例如:(DPTR)=8100H(A)=40H执行指令

MOVCA,@A+DPTR本指令的执行结果只和指针DPTR及累加器A的内容有关,与该指令存放的地址及常数表格存放的地址无关,

1.当需要从MCS-51单片机程序存储器取数据时,采用的指令为()。

A)MOV

A,

@R1

B)MOVC

A,

@A

+

DPTR

C)MOVX

A,

@

R0

D)MOVX

A,

@

DPTR

2.MOVXA,@R0指令中,源操作数采用()寻址方式,指令作用在()区间。(A)寄存器,外部数据存储器(B)直接,程序存储器(C)寄存器间接,内部数据存储器(D)寄存器间接,外部数据存储器3.8031单片机中,将累加器A中的数送入外RAM的40H单元,可执行的指令()。(A)MOVR1,40H(B)MOVR1,#40HMOVX@R1,AMOVXR1,A(C)MOVX40H,A(D)MOVR1,#40HMOVX@R1,A4、以给出的指令操作码为依据,请判断MCS—5l单片机的下列各条指令的书写格式是否有错误,如有请说明错误原因。

(1).MOVA,@R7

(2).MOVA,#3000H

(3).MOVX@R0,B

(4).MOVA,30H (5).MOVXA,30H

5、使用简单指令序列完成以下操作(1).将20H单元清零

mov20H,#00H(2).请将ROM3000H单元内容送R7movA,#00HmovDPTR,#3000HmovcA,@A+DPTRmovR7,A(3)、已知某端口地址为2FFFH,将片内RAM20H的内容写到该端口中。movA,20HMOVDPTR,#2FFFHMOVX@DPTR,A4.数据交换指令

用于累加器A和内部RAM单元之间的字节交换及半字节交换,或者完成累加器A自身的半字节交换。

1)字节交换

XCHA,Rn XCHA,direct XCHA,@Ri例如:(A)=80H,(R7)=08H,(40H)=F0H,(R0)=30H,(30H)=OFH执行下列指令:

XCHA,R7;(A)与(R7)互换XCHA,40H;(A)与(40H)互换XCHA,@R0;(A)与((R0))互换结果:(A)=0FH,(R7)=80H,(40H)=08H,(30H)=F0H2).半字节交换指令

XCHDA,@Ri累加器的低4位与内部RAM低4位交换。例如:(R0)=60H,(60H)=3EH,(A)=59H执行完XCHDA,@R0指令,则(A)=5EH,(60H)=39H。3).累加器半字节自身交换指令

SWAPA将累加器A的高半字节(Acc.7~Acc.4)和低半字节(Acc.3~Acc.0)互换。

例(A)=0C5H,执行指令:

SWAPA

结果:(A)=5CH5.堆栈操作指令MCS-51内部RAM中可以设定一个后进先出(LIFO-LastInFirstOut)的区域称作堆栈.堆栈指针SP指出堆栈的栈顶位置。(1)进栈指令

PUSHdirect先将栈指针SP加1,然后把direct中的内容送到栈指针SP指示的内部RAM单元中。

例如:当(SP)=60H,(A)=30H,(B)=70H时,执行:

PUSHACC

(SP)+1=61H→SP,(A)→61H

PUSHB

;(SP)+1=62H→SP,(B)→62H结果:(61H)=30H,(62H)=70H,(SP)=62H(2)出栈指令

POPdirectSP指示的栈顶(内部RAM单元)内容送入direct字节单元中,栈指针SP减1。例如:当(SP)=62H,(62H)=70H,(61H)=30H,执行:POPDPH;((SP))→DPH,(SP)-1→SPPOPDPL;((SP))→DPL,(SP)-1→SP

结果:(DPTR)=7030H,(SP)=60H3.2.2运算和移位操作类指令

一、算数运算指令1.加法指令

1)不带进位的加法指令

共有4条加法运算指令:ADDA,Rn;(A)+(Rn)→A,n=0~7ADDA,direct;(A)+(direct)→AADDA,@Ri;(A)+((Ri))→A,i=0,1ADDA,#data;(A)+data→A一个加数总是来自累加器A,而另一个加数可由不同的寻址方式得到。结果总是放在A中。使用加法指令时,要注意累加器A中的运算结果对各个标志位的影响:(1)如果位7有进位,则置“1”进位标志Cy,否则清“0”Cy(2)如果位3有进位,置“1”辅助进位标志Ac,否则清“0”Ac(Ac为PSW寄存器中的一位)(3)如果位6有进位,而位7没有进位,或者位7有进位,而位6没有,则溢出标志位OV置“1”,否则清“0”OV。溢出标志位OV的状态,只有在带符号数加法运算时才有意义。当两个带符号数相加时,OV=1,表示加法运算超出了累加器A所能表示的带符号数的有效范围。

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

ADDA,R0结果:(A)=4FH,Cy=1,Ac=0,OV=0,P=1注意:上面的运算中,由于位6和位7同时有进位,所以标志位OV=0。例(A)=85H,(R0)=20H,(20H)=AFH,执行指令:

ADDA,@R0

结果:(A)=34H,Cy=1,Ac=1,OV=1,P=1注意:由于位7有进位,而位6无进位,所以标志位OV=1

2).带进位加法指令标志位Cy参加运算,因此是三个数相加。共4条:ADDC A,Rn;(A)+(Rn)+C→A,n=0~7ADDC A,direct;(A)+(direct)+C→AADDC A,@Ri;(A)+(Ri)+C→A,i=0,1ADDC A,#data;(A)+#data+C→A

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

ADDCA,20H结果为:(A)=85H,Cy=1,Ac=1,OV=0,P=1(A中1的位数为奇数)3).增1指令

5条增1指令: INCA INCRn;n=0~7 INCdirect INC@Ri;i=0,1 INCDPTR不影响PSW中的任何标志。

第5条指令INCDPTR,是16位数增1指令。指令首先对低8位指针DPL的内容执行加1的操作,当产生溢出时,就对DPH的内容进行加1操作,并不影响标志Cy的状态。2、减法指令

1)带借位减法4条指令:SUBBA,Rn;(A)-(Rn)-Cy→A,n=0~7SUBBA,direct;(A)-(direct)-Cy→ASUBBA,@Ri;(A)-((Ri))-Cy→A,i=0,1SUBBA,#data;(A)-#data-Cy→A

从累加器A中的内容减去指定的变量和进位标志Cy的值,结果存在累加器A中。如果位7需借位则置“1”Cy,否则清“0”Cy;如果位3需借位则置“1”Ac,否则清“0”Ac;如果位6需借位而位7不需要借位,或者位7需借位,位6不需借位,则置“1”溢出标志位OV,否则清“0”OV。例(A)=C9H,(R2)=54H,Cy=1,执行指令:

SUBBA,R2

结果:(A)=74H,Cy=0,Ac=0,OV=1(位6向位7借位)

2).减1指令4条指令: DECA ;(A)-1→A DECRn ;(Rn)-1→Rn,n=0~7 DECdirect ;(direct)-1→direct DEC@Ri ;((Ri))-1→(Ri),i=0,1减1指令不影响标志位。3.乘法指令

MULAB;A×B→BA

完成两个8位无符号整数的乘法运算。结果的高8位存放在B中,低8位存放在A中。如果积大于255,则置“1”溢出标志位OV

4.除法指令

DIVAB;A/B→A(商),余数→B如果B的内容为“0”(即除数为“0”),则存放结果的A、B中的内容不定,并置“1”溢出标志位OV。5.十进制调整指令用于对BCD码十进制数加法运算结果的内容修正。

指令格式:DAA两个BCD码按二进制相加之后,必须经本指令的调整才能得到正确的压缩BCD码的和数。二进制数的加法运算原则并不能适用于十进制数的加法运算,有时会产生错误结果。例如:(a)3+6=90011+0101=1001运算结果正确(b)7+8=150111+1000=1111运算结果不正确(c)9+8=171001+1000=00001C=1结果不正确二进制数加法指令不能完全适用于BCD码十进制数的加法运算,对结果作有条件的修正——十进制调整修正方法应是:(a)累加器低4位大于9或辅助进位位Ac=1,则进行低4位加6修正。(b)累加器高4位大于9或进位位Cy=1,则进行高4位加6修正。(c)累加器高4位为9,低4位大于9,则高4位和低4位分别加6修正。具体是通过执行指令:DAA

来自动实现的。例(A)=56H,(R5)=67H,把它们看作为两个压缩的BCD数,进行BCD数的加法。执行指令:

ADDA,R5DAA由于高、低4位分别大于9,所以要分别加6进行十进制调整对结果进行修正。结果为:(A)=23H,Cy=1可见,56+67=123,结果是正确的。1、.下列程序段执行后,(R0)=_______,(7EH)=____,(7FH)=_______。MOVR0,#7EH

MOV7EH,#0FFHMOV7FH,#40H1NC@R01NCR01NC@R02、假定(SP)=40H,

(39H)=30H,(40H)=60H。执行下列指令:POP

DPHPOP

DPL后,DPTR的内容为

,SP的内容是

。3.下列各条指令其源操作数的寻址方式是什么?各条指令单独执行后,A中的结果是什么?)设(60H)=35H,(A)=19H,(R0)=30H,(30H)=0FH。(1)MOV A,#48H ;寻址方式:,(A)=

(2)ADD A,60H ;寻址方式:,(A)=4、阅读下列程序段,写出每条指令执行后的结果,并说明此程序段完成什么功能?MOV R1,#30H(R1)=

MOV A,#64H;(A)=

ADD A,#47H;(A)=

,(CY)=

,(AC)=

DA A;(A)=

,(CY)=

,(AC)=

MOV @R1,A;(R1)=

,(30H)=

此程序段完成的功能:5、把DPTR的内容压入堆栈6.执行下面一段程序;

MOVSP,#60HMOVA,#10HMOVB,#01HPUSHA

PUSHBPOPAPOPBA,B的内容是:(A)=(B)=7.若(A)=50H,(B)=A0H,执行MULAB后,(A)=

(B)=

(CY)=

(OV)=8、.(R0)=4BH,(A)=84H,片内RAM(4BH)=7FH,(40)=20HMOVA,@R0MOV@R0,40HMOV40H,AMOVR0,#35H问执行程序后,R0=A=4BH=40H=9、.若PSW=00,执行下列程序后,PSW的各位状态如何?MOVA,#0FBHMOVPSW,#10HADDA,#7FH二、逻辑运算指令1.逻辑与指令 ANLA,Rn;(A)∧(Rn)→A,n=0~7 ANLA,direct;(A)∧(direct)→A ANLA,#data;(A)∧#data→AANLA,@Ri;(A)∧((Ri))→A,i=0~1 ANLdirect,A;(direct)∧(A)→direct ANL direct,#data;(direct)∧#data→direct

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

ANLA,R0结果:(A)=05H2.逻辑或指令 ORLA,Rn;(A)∨(Rn)→A,n=0~7 ORLA,direct;(A)∨(direct)→A ORLA,#data;(A)∨data→A ORLA,@Ri;(A)∨((Ri))→A,i=0,1 ORLdirect,A;(direct)∨(A)→direct ORLdirect,#data;(direct)∨#data→direct

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

ORLP1,A 结果:(P1)=37H3.逻辑异或指令

XRLA,Rn;(A)⊕(Rn)→A XRLA,direct;(A)⊕(direct)→A XRLA,@Ri;(A)⊕((Ri))→A,i=0,1 XRLA,#data;(A)⊕#data→A XRLdirect,A;(direct)⊕(A)→direct XRLdirect,#data;(direct)⊕#data→direct

例(A)=90H,(R3)=73H执行指令:

XRLA,R3结果:(A)=E3H

4.累加器清零

CLRA功能:累加器A清“0”。不影响Cy、Ac、OV等标志。5.累加器取反CPLA功能:累加器A的内容按位逻辑取反,不影响标志。6.移位指令左环移指令

RLA

功能:累加器A的8位向左循环移位,位7循环移入位0,不影响标志。带进位左环移指令:RLCA

功能:将累加器A的内容和进位标志位Cy一起向左环移一位,Acc.7移入进位位Cy,Cy移入Acc.0,不影响其它标志。右环移指令:RRA

功能:累加器A的内容向右环移一位,Acc.0移入Acc.7,不影响其它标志。带进位右环移指令:RRCA功能:累加器A的内容和进位标志Cy一起向右环移一位,Acc.0进入Cy,Cy移入Acc.7。1.执行下列程序段后,(P1)=_______。MOVP1,#5DHCPLP1.1CPLP1.2CLRP1.6SETBP1.72.执行下列程序段后,(A)=_______,(CY)=____。MOVA,#C5HRLA3、设(A)=38H,R0=28H,(28H)=18H,执行下列程序后,(A)=()ORLA,#27HANLA,28HXCHDA,@R0CPLA4.阅读下列程序,说明其功能。MOVR0,#dataMOVA,@R0RLAMOVR1,ARLARLAADDA,R1MOV@R0,ARET5、已知(R0)=20H,(20H)=10H,(P0)=30H,(R2)=20H,执行如下程序段后(40H)=MOV@R0,#11HMOVA,R2ADDA,20HMOVPSW,#80HSUBBA,P0XRLA,#45HMOV40H,A6、若执行XRLP2,#

后,可对P2口的低四位取反。7、执行ORP1,#

后,可对P1口的高四位置1。3.2.3控制转移类指令

1.无条件转移指令

LJMPaddr16;adder16-PCAJMPaddrll;addr11-PC;SJMPrel;PC+2+rel-PCJMP@A+DPTR;A+DPTR-PC;LJMP:长转移指令,转移范围64KB。AJMP:2K字节范围内的无条件跳转指令,64K程序存储器空间分为32个区,每区2K字节,转移的目标地址必须与AJMP下一条指令的地址的高5位地址码A15-A11相同。执行指令时,先PC加2,然后把addrll送入PC.10~PC.0,PC.15~PC.11保持不变,程序转移到目标地址。本指令是为能与MCS-48的JMP指令兼容而设的。SJMP:实现的程序转移是双向的。在编写程序时,直接写上要转向的目标地址标号就可以。例如:

LOOP: MOVA,R6

SJMPLOOP ┇程序在汇编时,由汇编程序自动计算和填入偏移量。JMP@A+DPTR:间接跳转指令由A中8位无符号数与DPTR的16位数内容之和来确定。以DPTR内容作为基址,A的内容作变址。给A赋予不同的值,即可实现程序的多分支转移。2.条件转移指令

1)累加器判别转移指令

JZrel ;如果累加器为“0”,则转移 JNZrel ;如果累加器非“0”,则转移2).比较不相等转移指令 CJNEA,direct,rel CJNEA,#data,rel CJNERn,#data,rel CJNE@Ri,#data,rel比较前面两个操作数的大小,如果它们的值不相等则转移。如果第一操作数(无符号整数)小于第二操作数(无符号整数),则置进位标志位Cy,否则清“0”Cy。3).减1不为0转移指令这是一组把减1与条件转移两种功能结合在一起的指令。共两条指令: DJNZRn,rel ;n=0~7 DJNZdirect,rel将源操作数(Rn或direct)减1,结果回送到Rn寄存器或direct中去。如果结果不为0则转移。允许程序员把寄存器Rn或内部RAM的direct单元用作程序循环计数器。主要用于控制程序循环。以减1后是否为“0”作为转移条件,即可实现按次数控制循环。3.调用子程序指令(1).短调用指令:ACALLaddrll与AJMP指令相类似,是为了与MCS-48中的CALL指令兼容而设的。(2).长调用指令:LCALLaddr16(3).子程序的返回指令:RET执行本指令时: (SP)→PCH,然后(SP)-1→SP (SP)→PCL,然后(SP)-1→SP功能:从堆栈中退出PC的高8位和低8位字节,把栈指针减2,从PC值开始继续执行程序。(4).中断返回指令

RETI功能:与RET指令相似,两指令不同之处,是本指令执行的同时要清除对应的中断优先级状态位,恢复中断逻辑。4.空操作指令

NOP3.2.4位操作指令

1.数据位传送指令

MOVC,bit MOVbit,C例

MOVC,06H;(20H).6→Cy 06H是内部RAM20H字节位6的位地址。

MOVP1.0,C;Cy→P1.02.位清零指令 CLRC ;清“0”Cy CLRbit ;清“0”bit位3.位置1指令

SETBC ;置“1”Cy SETBbit ;置“1”bit位4.位取反指令

CPLC ;Cy求反CPLbit ;bit位求反5.位逻辑指令(1)与指令

ANLC,bit ;bit∧Cy→Cy ANLC,/bit; ;/bit∧Cy→Cy

(2)或指令 ORLC,bit ORLC,/bit6.位控制转移类指令

JCrel ;如果进位位Cy=1,则转移 JNCrel ;如果进位位Cy=0,则转移 JBbit,rel ;如果直接寻址位=1,则转移 JNBbit,rel ;如果直接寻址位=0,则转移 JBCbit,rel ;如果直接寻址位=1则转移,并清0直接寻址位1.以下哪一条是位操作指令()。A、MOVP0,#0FFHB、CLRP1.0C、CPLAD、POPPSW2.已知(SP)=60H,子程序SUBTRN的首地址为0345H,现执行位于0123H的ACALLSUBTRN双字节指令后,(PC)=___,(61H)=_______,(62H)=____。3.3汇编语言程序设计3.3.1汇编语言程序设计步骤3.3.2汇编语言程序设计方法

3.3汇编语言程序设计3.3.1汇编语言程序设计步骤单片机应用程序的设计通常可以分成以下5步:(1)程序设计准备阶段(2)程序流程图绘制阶段(3)源程序的编辑阶段(4)程序的汇编阶段(5)程序的调试阶段3.3.2汇编语言的构成两种基本类型:指令语句和伪指令语句(1)指令语句已在第3章介绍每一条指令语句在汇编时都产生一个指令代码——机器代码(2)伪指令语句

是为汇编服务的。在汇编时没有机器代码与之对应。3.3.3常用的伪指令

1.ORG(ORiGin)汇编起始地址命令

格式:ORG16位地址或标号

在汇编语言源程序的开始,通常都用一条ORG伪指令来实现规定程序的起始地址。如不用ORG规定,则汇编得到的目标程序将从0000H开始。例如:例:ORG伪指令使用方法说明:单元地址机器码(H)标号指令助记符;注释DB “MCS”DB “51”4D43533531

7850 EC 26 FB1000H1003H2000H2002H2003H2004HORG 1000HORG 2000HStart: MOV R0,#50H MOV A,R4 ADD A,@R0 MOV R3,A

在一个源程序中,可多次使用ORG指令,来规定不同的程序段的起始地址。但是,地址必须由小到大排列,地址不能交叉、重叠。例如:

ORG2000H ┇ORG2500H ┇

ORG3000H ┇

2.END(ENDofassembly)

汇编终止命令汇编语言源程序的结束标志,用于终止源程序的汇编工作。在整个源程序中只能有一条END命令,且位于程序的最后。3.DB(DefineByte)

定义字节命令格式:[标号:]DB字节型数表DB功能是从标号指定单元开始定义(存储)若干个字节,ORG2000HDB30H,40H,24,“C”,“B”汇编后: (2000H)=30H (2001H)=40H (2002H)=18H(10进制数24) (2003H)=43H(字符“C”的ASCII码) (2004H)=42H(字符“B”的ASCII码)10进制数自然转换成16进制数,字母按ASCII码存储。4.DW(DefineWord)

定义数据字命令格式:[标号:]DW字型数表从标号指定的地址开始,在程序存储器的连续单元中定义16位的数据字。例如:

ORG2000H

DW1246H,7BH,10汇编后:(2000H)=12H;(2001H)=46H;第1个字(2002H)=00H;(2003H)=7BH;第2个字(2004H)=00H;(2005H)=0AH;第3个字5.DS

定义存储空间命令[标号:]DS表达式从指定的地址开始,预留若干字节的存储单元已备源程序执行过程中使用。6.EQU(EQUate)

赋值命令字符名称EQU数据或汇编符号用于给标号赋值。赋值以后,其标号值在整个程序有效。

例如:TESTEQU2000H

表示标号TEST=2000H,在汇编时,凡是遇到标号TEST时,均以2000H来代替。7、DATA(赋值)伪指令:格式:字符名DATA表达式功能:将右边“表达式”的值赋给左边的“字符名”注意:这里的表达式允许是一个数据或地址,也可以是包含被定义的“字符名”在内的表达式,但不能是汇编符号,如R0~R7等DATA伪指令与EQU伪指令的区别:EQU定义的字符名必须“先定义后使用”,而DATA定义的“字符名”没有这种限制DATA伪指令可放在程序的任何位置,比EQU伪指令灵活

8、BIT(位地址赋值)伪指令:格式:字符名BIT位地址功能:将位地址赋予BIT前面的字符名,经赋值后可用该字符名代替BIT后面的位地址注意:被定义后,“字符名”是一个符号位地址有些汇编程序不允许使用BIT伪指令,用户只能用EQU伪指令定义位地址变量,但是用这种方式定义时,EQU语句右边只能是实际的物理地址,而不能使符号位地址

如: K1BIT20H KKBITK1 X2EQU6DH X2EQUK1√×

3.3.2汇编语言程序设计方法顺序结构、分支结构和循环结构,再加上广泛使用的子程序和中断服务子程序。1.顺序结构2.分支结构程序中含有转移指令,无条件分支,有条件分支。有条件分支又分为:单分支结构和多分支结构。3.循环结构4.子程序5.中断服务子程序分支程序设计(1)简单分支程序简单分支程序是分支程序中最简单、最基本的一种,其结构如下图所示。例:设在内部RAM的SORC开始连续两个单元中有一个双字节数,编写程序将其取补后存入RESULT开始的两个连续单元。参考程序如下:B16NEG:MOVR0,#SORC+1 MOVR1,#RESULT+1MOVA,@R0CPLAINCAMOV@R1,ADECR0DECR1

温馨提示

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

评论

0/150

提交评论