




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
本章主要内容1.MCS-51单片机的寻址方式、2.数据传送指令3.算术逻辑运算指令4.移位指令指令:计算机用于控制各功能部件完成某一指定动作的指示和命令称为指令。指令的表示形式:
(1)指令的二进制形式
机器码、源程序的目标代码均为二进制形式,直接为计算机识别和执行。读/写和记忆困难。(2)指令的十六进制形式
指令的十六进代码需翻译成二进制代码才能被计算机识别和执行。特点是方便读,写和记忆困难。
(3)指令助记符
用英文字母、单词表征指令的功能。其源程序必须翻译成机器码(目标代码)才能被计算机识别和执行,转换成机器语言的过程称为汇编,特点是方便读/写和记忆。3.1概述
3.1.1指令的三种表示形式0010010000001000B
2408H
ADDA,#08H指令格式:指令的表示方式称为指令格式,它规定了指令的长度和内部信息的安排。完整的指令格式如下:[标号:]操作码[操作数][,操作数][;注释]标号:指本条指令起始地址的符号,也称为指令的符号地址
代表该条指令在程序编译时的具体地址。操作码:又称助记符,它一般是英文的缩写,规定了指令具体的操作功能,描述指令的操作性质,是指令语句的关键,指令中不可缺少的部分。操作数:可以是一个具体的数据,或是存放数据的地址。注释:可选项,是为增加程序的可读性而设置的,是针对某指令而添加的说明性文字,不产生可执行的目标代码。3.1.2汇编语言指令格式其中符号地址和操作码之间用“:”作为分隔符,也可再加上若干空格。操作码和操作数之间用空格作为分隔符。操作数之间用“,”作为分隔符。注释之前用“;”作为分隔符。MAIN:MOVA,#10H3.1.3指令的分类
MCS-51指令系统有111条指令,可按下列几种方式分类:1.按指令字节数分类
每条指令在程序存储器ROM中占据一定的空间,以字节为单位。按指令所占字节数分类:单字节(49条),双字节(46条),3字节(16条)。2.按指令执行时间分类
每条指令在执行时要花去一定的时间,以机器周期为单位。按指令执行时间分类:单机器周期指令(65条)、双机器周期指令(44条)和四机器周期指令(2条)。3.按功能分类
按功能可分为5大类:数据传送指令(29条)、算术操作指令(24条)、逻辑操作指令(24条)、控制转移指令(17条)和位操作指令(17条)。指令的字节数:
一般地,指令操作码占1字节;操作数中,直接地址direct占1字节,8位数据#data占1字节,16位数据#data16占两字节;操作数中的A、B、R0~R7、C、@Ri、DPTR、@A+DPTR、@A+PC、SFR等均隐含在操作码中。(1)1字节指令(单字节指令)
①指令中无操作数,只有操作码。NOPRET②操作数的寄存器号隐含在指令码中。
MOVA,Rn;指令码为11101rrr
INCDPTR
;指令码为A3H(2)2字节指令(双字节指令)
指令的第一字节为操作码,第二字节为操作数。指令的格式:操作码操作数
MOVA,#data;指令码为01110100#data(3)3字节指令(三字节指令)
指令的第一字节为操作码,第二字节为目的操作数,第三字节为源操作数。指令的格式:操作码目的操作数,源操作数
ANLdirect,#data;指令码为01010011direct#data3.1.4指令中的常用符号
Rn:表示当前工作寄存器R0~R7中的一个。@Ri:表示寄存器间接寻址,常作间接寻址的地址指针。其中Ri代表R0和R1寄存器中的一个。direct:表示内部数据存贮器单元的地址及特殊功能寄存器SFR的地址,对SFR而言,既可使用它的物理地址,也可直接使用它的名字。
#data:表示8位立即数,即8位常数,取值范围为#00H~#0FFH
#data16:表示16位立即数,即16位常数,取值范围为#0000H~#0FFFFH。
addr16:表示16位地址。
addr11:表示11位地址rel:用补码形式表示的地址偏移量,取值范围为-128~+127bit:表示内部RAM和SFR中的具有位寻址功能的位地址。@:表示间接寻址寄存器或基址寄存器的前缀符号。$: 表示当前指令的地址。/: 位操作数的前缀,表示对该位操作数取反,如:/bit。(x):表示存储单元x的内容。((x)):表示以寄存器或存储单元x的内容作为地址的存储单元的内容。→:表示数据传送方向C:表示PSW中的进位标志位Cy。寻址方式:在计算机中,说明操作数所在地址的方法称为指令的寻址方式。或者为指令按地址获得操作数的方式。MCS-51单片机的指令系统提供了七种寻址方式,分别为:
3.2寻址方式
立即寻址、直接寻址、寄存器寻址、寄存器间接寻址、变址寻址、相对寻址、位寻址
定义:立即参与操作的数据直接写在指令中,这种寻址方式称为立即寻址。表示方法:立即数通常使用#data或#data16表示,在立即数前面加“#”标志,区别于直接寻址中的直接地址(direc或bit)。
MOVA,#64H;(A)←立即数64HADDA,#05H;(A)←(A)+立即数05H
MOVDPTR,#1000H;(DPTR)←1000H3.2.1立即寻址
3.2.3直接寻址定义:将操作数的地址直接存放在指令中,这种寻址方式称为直接寻址。寻址范围:片内RAM区00H-7FH、SFRMOVR1,1FH;(R1)←(1FH)MOV30H,4AH;(30H)←(4AH)3.2.2寄存器寻址定义:操作数存放在某个工作寄存器Rn(R0~R7)或部分专用寄存器中特点:由指令指出某一个寄存器的内容作为操作数。存放操作数的寄存器在指令代码中不占据单独的一个字节,而是嵌入(隐含)到操作码字节中。寻址范围:四组通用寄存器Rn(R0~R7)、部分专用寄存器(A,B,Cy)。
MOVA,B
;(A)←(B)
MOV30H,R0;(30H)←(R0)3.2.4寄存器间接寻址定义:指令给出的寄存器中存放的是操作数据的单元地址特点:是一种二次寻找操作数地址的寻址方式,寄存器前边必须加前缀符号“@”。不能用于寻址特殊功能寄存器SFR。
寻址范围:内部RAM低128B(只能使用R0或R1作间址寄存器)、外部RAM(00H-FFH)(使用R0或R1作间址寄存器或者DPTR)
外部RAM(0100H-FFFFH)(只能使用DPTR作间址寄存器)。
MOVR1,#30H;(R1)←立即数30HMOV@R1,#0FFH;(30H)←立即数FFHMOVA,@R1;(A)←((30H))=立即数FFH
3.2.5变址寻址定义:操作数存放在变址寄存器(累加器A)和基址寄存器(DPTR或PC)相加形成的16位地址单元中。称为基址加变址寄存器间接寻址,简称为变址寻址。特点:在执行变址寻址指令时,MCS-51单片机先把基地址(DPTR或PC的内容)和地址偏移量(A的内容)相加,以形成操作数地址,再由操作数地址找到操作数,并完成相应的操作。变址寻址方式是单字节指令。寻址范围:只能对程序存储器ROM进行寻址,主要用于查表性质的访问。注意:累加器A中存放的操作数为00H~FFH(无符号数)。共有三条变址寻址指令:
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;(A)←((A)+(DPTR))3.2.6相对寻址定义:将程序计数器PC的当前值(取出本条指令后的PC值)与指令第二个字节给出的偏移量(rel)相加,形成新的转移目标地址。称为相对寻址方式。寻址范围:只能对程序存储器ROM进行寻址。相对地址偏移量(rel)是一个带符号的8位二进制补码,其取值范围为
128~+127(以PC为中间的256个字节范围)。在实际编程中,“rel”通常用“标号”代替。如:
SJMPrel;(PC)←(PC)+2+rel
双字节指令
相对转移指令的目的地址=指令地址+指令字节数+偏移量特点:相对寻址方式是为实现程序的相对转移而设计的,为相对转移指令所使用,其指令码中含有相对地址偏移量,能生成浮动代码。3.2.7位寻址定义:指令中给出的操作数是一个可单独寻址的位地址特点:位寻址是直接寻址方式的一种,其特点是对8位二进制数中的某一位的地址进行操作。(3)位的符号地址(位名称)的形式。
对于部分特殊功能寄存器,其各位均有一个特定的名字,所以可以用它们的位名称来访问该位。ANLC,P;(C)←(C)∧(P)(1)直接使用位地址形式。
MOVC,00H;(Cy)
←(00H)
其中:00H是片内RAM中20H地址单元的第0位。(2)字节地址加位序号的形式
MOVC,20H.0;(Cy)
←(20H.0)寻址范围:片内RAM低128B中位寻址区、部分SFR(其中有83位——单元地址可被8整除的SFR的各位可以位寻址)。(4)字节符号地址(字节名称)加位序号的形式。对于部分特殊功能寄存器(如状态标志寄存器PSW),还可以用其字节名称加位序号形式来访问某一位。CPLPSW.6;(AC)←()
[例]
指出下列指令中源操作数的寻址方式
MOVA,R1;(A)←(R1)
ADDA,#05H;(A)←(A)+立即数05HMOVA,@R1;(A)←((R1))MOV30H,4AH;(30H)←(4AH)
MOVCA,@A+DPTR;(A)←((A)+(DPTR))SJMP#81H;(PC)←(PC)+2-127
MOV65H,C;(65H)←(Cy)寄存器寻址立即寻址寄存器间接寻址直接寻址变址寻址相对寻址位寻址3.3数据传送指令
数据传送指令共29条,可分为五类内部RAM间传送:(MOV——16条)外部RAM与累加器间传送:(MOVX——4条)ROM向累加器传送:(MOVC——2条)数据交换:(SWAP,XCH,XCHD——5条)堆栈操作:(PUSH,POP——2条)1.内部RAM数据传送指令(16条)(1)以累加器A为目的操作数(4条)
MOVA,<src>
其中:
<src>包括Rn、@Ri、direct、#data。
如:MOVA,30H——A
(30H)
(2)以工作寄存器Rn为目的操作数(3条)
MOVRn,<src>
其中:
<src>包括A、direct、#data。
如:MOVR7,#30H——R7
#30H(3)以直接地址单元为目的操作数(5条)
MOVdirect,<src>
其中:
<src>包括A、Rn、@Ri、direct、#data。
如:MOV30H,20H;30H
(20H)(4)以间址寄存器@Ri为目的操作数(3条)
MOV@Ri,<src>
其中:
<src>包括A、direct、#data。
如:MOV@R1,A;(R1)
(A)(5)16位数据传送指令(1条)
MOVDPTR,#data16
如:MOVDPTR,#1000H;DPTR
#1000H
注:(2)、(3)、(4)、(5)均不影响标志位。内部数据传送指令的传送关系如下图所示。源和目的操作数同为一种寻址方式只有直接地址direct,即:允许在两个内部RAM的直接地址之间进行传送数据,不允许在两个工作寄存器之间直接进行传送数据。MOVA,@R0MOV30H,32HMOV32H,@R1MOV31H,A例:已知(30H)=11H,(31H)=12H,(32H)=13H,
R0=30HR1=31H,下列程序执行完后30H,31H,32H内存的数据分别是?2.外部RAM数据传送指令(4条)
CPU与外部数据存储器之间进行数据传送时,必须使用外部传送指令,只能通过累加器A,采用寄存器间接寻址(用R0,R1和DPTR三个间接寻址的寄存器)方式完成。指令格式:
MOVXA,<src>MOVX<dest>,A其中:
<src>、<dest>包括@DPTR、@Ri。Ri(R0,R1)只能访问片外RAM的低256个单元;DPTR可以访问片外RAM的全部64KB的空间。
如:MOVXA,@R1;A
((R1))
MOVX@DPTR,A;(DPTR)
(A)3.程序存储器(ROM)数据传送指令(查表指令)(2条)
程序存储器的数据传送是单向的,并且只能读到累加器A中。这类指令专门用于查表,又称为查表指令。
指令格式:MOVCA,@A+DPTP;
A←((A)+(DPTR))
MOVCA,@A+PC;PC←(PC)+1A←((A)+(PC))
(1)查表的位置要求不同
采用DPTR作为基地址寄存器,表可以放在64KB程序存储器空间的任何地址,使用方便,故称为远程查表。采用PC作为基地址寄存器,具体的表在程序存储器中只能在查表指令后的256B的地址空间中,故称为近程查表。(2)偏移量的计算方法不同采用DPTR作为基地址寄存器,A为欲查数值距离表首地址的值;采用PC作为基地址寄存器,A的值必须预先加一数data:data=表首地址-当前指令的PC值-1例:已知A中有一个0-9范围内的数,用查表指令给出该数的平方MOVDPTR,#TABLEMOVCA,@A+DPTRORG2000HTABLE:DB0,1,4,9,16,25,36,49,64,81ADDA,#data
MOVCA,@A+PCSJMP$TABLE:DB0,1,4,9,16,25,36,49,64,81data=MOVC与表首间的指令所占字节数如果表中数据每个占不止一个字节时,MOVC命令前对A适当调整4.数据交换指令(5条)(1)半字节数据交换指令(2条)
指令格式:
SWAPA;(A)3~0←→(A)7~4
XCHDA,@Ri
;(A)3~0←→((Ri))3~0
(2)字节交换指令(3条)指令格式:XCHA,<src>
其中:
<src>包括Rn、@Ri、direct。5.堆栈操作指令(2条)指令格式:
PUSHdirect;SP←(SP)+1,(SP)←(direct)
POPdirect;direct←((SP)),SP←(SP)
1PUSH和POP后一定是直接的地址
PUSHACC(不能写成PUSHA)
POP00H(不能写成POPR0)例:已知外部RAM的20H单元中有一个数X,内部RAM的20H单元中有一个数Y,编程使它们相互交换MOV
R0,20HMOVXA,@R0XCH
A,R0MOVX@R0,AMOVR0,20HMOVA,R0XCHA,@R0MOVR0,A例:已知50H单元中有一个0-9的数,编程转换为其ASCII码MOVA,#30HADDA,50HMOV50H,AMOVA,#30HMOVR0,#50HXCHDA,@R0例:设(A)=7BH;(35H)=11H
已知(SP)=60H执行下面程序,则:
PUSHACCPUSH35HPOPACCPOP35H
;61H#7BH;62H(35H)即:62H#11H;A(62H)即:A#11H;35H(61H)即:35H#7BH3.4算术与逻辑运算和移位指令
算术运算指令的两个参与运算的操作数,一个存放在累加器A中(此操作数也为目的操作数);一个存放在R0~R7、片内RAM(direct)、@Ri(片外RAM)中,或是#data(立即数)。算术运算指令可分为:加法运算:
(ADD——4条)带进位加法运算:
(ADDC——4条)带借位减法运算:
(SUBB——4条)加1/减1操作:
(INC,DEC——9条)单字节乘/除法运算:
(MUL,DIV——2条)十进制调整:
(DAA——1条)3.4.1算术运算1.加法指令(4条)指令格式:
ADDA,<src>;A←(A)+<src>
其中:
<src>包括Rn、@Ri、direct、#data。ADD对PSW中的所有标志位均产生影响。2.带进位的加法指令(4条)指令格式:
ADDCA,<src>;A←(A)+<src>+(Cy)
其中:
<src>包括Rn、@Ri、direct、#data。对标志位的影响:ADDC对PSW中的所有标志位均产生影响。
3.带借位的减法指令(4条)
指令格式:
SUBBA,<src>;A←(A)-<src>-(Cy)
其中:
<src>包括Rn、@Ri、direct、#data。对标志位的影响:SUBB对PSW中的所有标志位均产生影响。MCS-51中没有不带借位的减法指令,欲实现不带借位的减法计算,应预先置Cy=0(利用CLRC指令),然后利用带借位的减法指令SUBB实现计算。默认补码格式相加,有溢处时OV置1原码格式相加时,有溢出时,Cy为14.十进制调整指令(1条)
功能:对运算结果的十进制数进行BCD码修正,指令格式:DAA
5.加1指令(5条)
功能:加1指令又称为增量指令,使操作数所指定的单元的内容加1。指令格式:INC<dest>;<dest>←<dest>+1其中:
<dest>包括A、Rn、direct、@Ri、DPTR。对标志位的影响:除对累加器A操作影响P标志位外,其他操作均不影响PSW的各标志位。
6.减1指令(4条)
功能:减1指令又称为减量指令,操作数所指定的单元的内容减1。指令格式:DEC<dest>;<dest>←<dest>-1
其中:
包括A、Rn、direct、@Ri。(DPTR无减1)对标志位的影响:同加1指令。十进制调整指令不能对减法指令进行修正。BCD码减法必须采用BCD补码运算法则,变减法为补码加法(被减数+减数的补码,减数的补码=9AH-减数,99H+1H=9AH)。然后对其进行十进制调整来实现。
1、完成85+59的BCD加法程序和一般加法程序2、已知被减数在存储单元30H中,减数在31H中,编程的差放入32H中3、已知被减数91,减数36,编程把差放入存储单元32H中CLRCMOVA,#5BH;#91SUBBA,#24H;#36MOV
32H,ACLRCMOVA,#9AHSUBBA,#36HADDA,#91HDAAMOV32H,AMOVA,#85ADDA,#59MOV
A,#85HADD
A,#59HDA
ACLR
CMOV
A,30HSUBBA,31HMOV
32H,A已知:M1和M2单元中存放有两个16位无符号数X1和X2(低8位在前,高8位在后)试写出X1+X2并把结果放在M1和M1+1单元(低8位在前,高8位在后)的程序,设两数之和不会超过16位。MOVR0,#M1MOVR1,#M2MOVA,@R0ADDA,@R1MOV@R0,AINCR0INCR1MOVA,@R0ADDCA,@R1MOV@R0,ASJMP$7.乘除指令(2条)
功能:实现乘法或除法操作。特点:乘除指令在MCS-51指令系统中执行时间最长,均为四周期指令。
指令格式:
MULAB
;B
A←(A)×(B)
DIVAB
;A←(A)/(B)…B
对标志位的影响:乘除指令影响PSW中的Cy,OV,P标志位。其中,Cy位总是被清0的,乘法运算中,若乘积大于FFH,则OV标志位置1,否则清0。除法运算中,若除数为0,则OV标志位置1,否则清0。例:已知两个8位无符号乘数分别在30H和31H存储单元中,编写使它们相乘后,积的低8位放在32H单元,高8位放在33H单元MOV
A,30HMOV
B,31HMUL
ABMOV32H,AMOV33H,BMOV
R0,#30HMOV
A,@R0INC
R0MOV
B,@R0MUL
ABINC
R0MOV
@R0,AINC
R0MOV
@R0,B3.4.2逻辑运算(20条)对标志位的影响:逻辑运算和移位指令中除了两条带进位的循环移位指令外,其余均不影响PSW中的各标志位。但当目的操作数是累加器A时,影响PSW中的奇偶校验位P。分类:常用的逻辑运算和移位类指令的操作数都是8位的。有5种逻辑与运算:(ANL——6条)逻辑或运算:(ORL——6条)逻辑异或运算:(XRL——6条)累加器清零/取反:(CLR,CPL——2条)累加器移位操作:
(RL,RLC,RR,RRC—4条)功能:除用于逻辑运算外,还可用于模拟各种数字逻辑电路的功能,进行逻辑电路的设计。1.逻辑与运算指令(6条)
功能:实现两个操作数的逻辑与。指令格式:ANLA,<src>
其中:
<src>包括Rn、@Ri、direct、#data。
ANLdirect,<src>
其中:
<src>包括A、#data。适用场合:实现逻辑与,主要用于操作数的某些位不变(这些位与“1”),某些位置0(这些位与“0”)。2.逻辑或运算指令(6条)功能:实现两个操作数的逻辑或。指令格式:ORLA,<src>
其中:
<src>包括Rn、@Ri、direct、#data。
ORLdirect,<src>
其中:
<src>包括A、#data。适用场合:实现逻辑或,主要用于操作数的某些位不变(这些位或“0”),某些位置1(这些位或“1”)。例:已知R0=30H,(30H)=AAH,指令执行后A和30H单元中的内容?(1)MOVA,#0FFHANLA,R0(2)MOVA,#0FHANLA,30H(3)ANL30H,#0F0H
例:设A=EAH,P1=F1H,编程把累加器A中的低4位送入P1口低四位,P1口高4位不变MOVR1,AANLA,#0FHANLP1,#0F0HORLP1,AMOVA,R13.逻辑异或运算指令(6条)
功能:实现两个操作数的逻辑异或。指令格式:XRLA,<src>
其中:
<src>包括Rn、@Ri、direct、#data。
XRLdirect,<src>
其中:
<src>包括A、#data。适用场合:实现逻辑异或,主要用于操作数的某些位不变(这些位异或“0”),某些位取反(这些位异或“1”)。4.累加器清0与取反指令(2条)
指令格式:CLR
A;A←00H
CPL
A
;A←()对标志位的影响:CLRA指令只影响PSW的P标志位,CPLA指令不影响PSW各标志位。
例:已知外部RAM的30H中的数是AAH,编程使其高四位不变,低4位取反MOV
R0,#30HMOVXA,@R0XRLA,#0FHMOVX
@R0,A例:已知30H中有一个正数X,编程得到-X的补码MOVA,30HCPLAINCAMOV30H,AXRL30H,#0FH功能:累加器A中的数据逐位左移一位相当于原内容乘2,而逐位右移一位相当于原内容除以2。循环移位指令示意图如右图所示。
3.4.3.移位指令(4条)
不带进位的循环左移RL
不带进位的循环右移RR
带进位的循环左移RLC带进位的循环右移RRC特点:只能对累加器A进行循环移位。指令格式:
操作码A例:已知30H和31H中有一个16位二进制数,30H中为低8位,编程使其扩大到2倍,并且其扩大后不超过65536CLR
CMOV
A,30HRLC
AMOV
30H,AMOV
A,31HRLC
AMOV
31H,A3.5控制转移和位操作指令功能:改变程序计数器PC中的内容,控制程序执行的流向,实现程序分支转向。无条件转移:(LJMP,AJMP,SJMP,JMP——4条)条件转移(判断跳转):(JZ,JNZ,CJNE,DJNZ——8条)子程序调用及返回:(LCALL,ACALL,RET,RETI——4条)空操作:(NOP——1条)
“耗时”一个机器周期。
对标志位的影响:除了CJNE影响PSW的进位标志位Cy外,其余均不影响PSW的各标志位。
3.5.1
位操作指令(17条)
1.无条件转移指令(4条)
定义:不规定条件的程序转移称为无条件转移指令。
长转移指令:
LJMPaddr16;PC←addr15~0
绝对转移指令:AJMPaddr11;PC←(PC)+2,PC10~0←addr11
相对(短)转移指令:SJMPrel;PC←(PC)+2+rel
间接(散)转移指令:JMP@A+DPTR;PC←(DPTR)+(A)注意:(1)使用转移指令时,指令中的地址或偏移量均可采用标号,只有在执行前才被汇编成实际的二进制地址。(2)指令的转移范围:
在执行当前转移指令后的PC值的基础上:
长转移指令LJMP:64KB
绝对转移指令AJMP:2KB
相对(短)转移指令SJMP:-128~+127(用补码表示)间接(散)转移指令JMP:64KBLJMP
0110HORG2A00HBEGIN:AJMP
0110H注意:(3)相对(短)转移指令SJMPrel中地址偏移量的计算:
rel=转移目标地址-转移指令地址(当前PC值)-2(4)原地踏步(暂停当前的程序,并不是真的停机)的实现
SJMP$
或
LP:SJMPLP
(5)间接(散)转移指令:JMP@A+DPTR常用于实现程序的分支转移(散转)。DPTR为转移目的的起始地址,A为转移目的的偏移量。(6)在编程中,经常使用短转移指令SJMP和相对转移指令AJMP,以便生成浮动代码,并不经常使用长转移指令LJMP。例:A中有待处理的命令编号0-4,程序存储器中有起始地址位PMTB的三字节长转移指令,编程可依据A中的命令号执行相应命令程序MOVB,#03HMULABMOVDPTR,#PMTBJMP@A+DPTRPMTB:LJMPPM0;转入0号命令LJMPPM1….指令格式:
JZrel;若A=0,则转移PC←(PC)+2+rel
若A≠0,则顺序执行PC←(PC)+2
JNZrel;若A≠0,则转移PC←(PC)+2+rel
若A=0,则顺序执行PC←(PC)+2指令的转移范围:
rel的取值范围是在执行当前转移指令后的PC值基础上的-128~+127(用补码表示)。可以采用符号地址表示。偏移量rel的计算方法:
rel=转移目标地址-转移指令地址(当前PC值)-22.条件转移指令(2条)
功能:在规定的条件满足时进行程序转移,否则程序往下顺序执行。MCS-51单片机中,条件转移指令实质上是累加器A判零指令。例:已知外部RAM中以DATA1为起始地址的数据块以零为结束标志,编程将数据传送到以DATA2为起始地址的内部RAM中MOVDPTR,#DATA1MOVR0,#DATA2LOOP:MOVXA,@DPTRJZOVERMOV@R0,AINCDPTR
INCR0SJMPLOOPOVER:SJMP$3.比较转移指令(4条)
指令格式:
CJNE目的操作数,源操作数,rel;
三字节指令
CJNEA,direct,relCJNEA,#data,relCJNERn,#data,relCJNE@Ri,#data,rel(源为#data时,目的为A、Rn、@Ri;源为direct,目的为A。)功能:把两个操作数进行比较,以比较的结果作为条件来控制程序的转移。指令的转移范围:rel的取值范围是在执行当前转移指令后的PC值基础上的-128~+127(用补码表示)。可以采用符号地址表示。若(目的操作数)=(源操作数),则程序继续执行,(PC)←(PC)+3若(目的操作数)>(源操作数),则程序转移,(PC)←(PC)+rel+3,Cy←0若(目的操作数)<(源操作数),则程序转移,(PC)←(PC)+rel+3,Cy←1例:比较两数大小x存放在片内存储单元DATA1,y存放在DATA2,结果存放在DATA3如果x=y,结果为0如果x>y,结果为1如果x<y,结果为-1MOVA,DATA1
CJNE
A,DATA2,D1MOVDATA3,#00HSJMPOVERD1:JCD2MOVDATA3,#01HSJMPOVERD2:MOVDATA3,#0FFHOVER:SJMP$指令格式:
DJNZ<dest>,rel;<dest>←<dest>-1
若<dest>≠0,则转移(PC)←(PC)+2+rel
<dest>=0,则不转移(PC)←(PC)+2
其中:
<dest>为Rn、direct,为direct时为3字节指令4.循环(减1条件)转移指令(2条)功能:具有减1判非0则转移的功能。主要用于控制程序循环,实现按循环次数控制循环的目的。例:编程令片内RAM中以DAT为起始地址的数据块中的连续10个无符号数相加,并将累加和送到SUM单元,累加和不超过8位。MOVR0,#DATMOVR1,#0AHCLRALOOP:ADDA,@R0INCR0DJNZR1,LOOPMOVSUM,A主程序与子程序之间的调用关系如左图所示,两级子程序嵌套的示意图如右图所示。
5.子程序调用与返回指令(4条)定义:具有完整功能的程序段定义为子程序,供主程序调用。功能:供主程序在需要时调用。子程序可以在程序中反复多次使用,以简化源程序的书写。特点:子程序可以嵌套,有利于模块化程序设计。指令格式:(1)绝对短调用指令
ACALLaddr11;(PC)←(PC)+2,
(SP)←(SP)+1,(SP)←(PC)7~0(SP)←(SP)+1,(SP)←(PC)15~8,(PC)10~0←addr11
其中:
addr11为11位地址,实际编程时可以用符号地址。并且只能在2KB范围以内调用子程序。(2)绝对长调用指令
LCALLaddr16;(PC)←(PC)+3,
(SP)←(SP)+1,(SP)←(PC)7~0(SP)←(SP)+1,(SP)←(PC)15~8,(PC)15~0←addr16
其中:
addr16为16位地址,实际编程时可以用符号地址。可以在64KB范围以内调用子程序。子程序调用指令的功能:必须具有自动把程序计数器PC中的断点地址保护到堆栈中,且将子程序入口地址自动送入程序计数器PC中的功能。子程序返回指令的功能:必须具有自动把堆栈中的断点地址恢复到程序计数器PC中的功能。(3)子程序返回指令
RET;(PC)15~8←((SP)),(SP)←(SP)
1,
(PC)7~0←((SP)),(SP)←(SP)
1(4)中断返回指令
RET
I;(PC)15~8←((SP)),(SP)←(SP)
1,
(PC)7~0←((SP)),(SP)←(SP)
1注:中断服务程序是一种特殊的子程序,它是在计算机响应中断时,由硬件完成调用而进入相应的中断服务程序。区别在于RET是从子程序返回,RETI是从中断服务程序返回。无论是RET还是RETI都是子程序执行的最后一条指令。6.空操作指令NOP(1条)指令格式:
NOP;(PC)←(PC)+1功能:不执行任何操作,消耗了一个机器周期,常用于软件延时或在程序可靠性设计中用来稳定程序。例:编程使20H~2AH、30H~3EH和40H~4FH三个区域被清零MOVR0,#20HMOVR1,#0AH
ACALL
QL
MOVR0,#30HMOVR1,#0EH
ACALL
QLMOVR0,#40HMOVR1,#0FH
ACALL
QLSJMP$QL:MOV
@R0,#00HINC
R0DJNZ
R1,QL
RET3.5.2位操作指令
位操作(布尔变量操作):字节中的某个位。每位只能取0或1。指令的寻址范围:片内RAM位寻址区20H~2FH,SFR中的11个可位寻址特殊寄存器中的83个可寻址位。
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年绿色照明项目合作计划书
- 2025年丝绢纺织及精加工产品项目建议书
- 五年级数学(小数乘除法)计算题专项练习及答案
- 三年级数学计算题专项练习及答案集锦
- 右肺低分化腺癌护理查房
- 陕西青年职业学院《药学专业创新创业拓展》2023-2024学年第二学期期末试卷
- 集宁师范学院《物流管理前沿讲座》2023-2024学年第一学期期末试卷
- 集美大学诚毅学院《英语视听说(四)》2023-2024学年第二学期期末试卷
- 青岛工学院《机能实验学》2023-2024学年第二学期期末试卷
- 青岛幼儿师范高等专科学校《建筑给水排水》2023-2024学年第一学期期末试卷
- 【初中生物】食物中营养物质课件2024-2025学年人教版生物七年级下册
- 2025河北保定钞票纸业限公司招聘33人易考易错模拟试题(共500题)试卷后附参考答案
- 中专药品gsp考试试题及答案
- 智慧教育解决方案
- 2025年共青团入团积极分子考试测试试卷题库及答案
- 2024-2025学年人教版数学七下 第七章 相交线与平行线(含答案)
- 小件物品寄存和随车托运登记表
- 手压式手电筒设计(棘轮机构及电路设计)
- 产品被预警、召回、索赔、退货及顾客投诉管理程序
- 岩棉板外墙保温真石漆施工方案
- 股权激励机制在万科集团中的运用分析
评论
0/150
提交评论