微型计算机原理及应用课件-第6章-2_第1页
微型计算机原理及应用课件-第6章-2_第2页
微型计算机原理及应用课件-第6章-2_第3页
微型计算机原理及应用课件-第6章-2_第4页
微型计算机原理及应用课件-第6章-2_第5页
已阅读5页,还剩57页未读 继续免费阅读

下载本文档

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

文档简介

6.2MCS-51汇编指令系统(1)地址标号:本条指令的起始地址的符号表示,但第一个字符必须是字母,其余可以是字母、数字、符号,结尾处必须用半角冒号“:”,标号地址可以缺省。(2)指令助记符:能表征具体操作功能的固定英文字母组合(不区分大小写,一般书写为大写),方便编程人员顾名思义,但是须经“翻译”(汇编)成机器操作码才能被计算机识别,指令助记符是1条指令中必不可少的组成部分。(3).操作数:指令的操作对象,参加运算操作的数,一条指令可以有1~3个操作数,也可以没有操作数(也就是无操作数),数据形式可以用二进制、八进制和十六进制表示,若用字母打头的十六进制数时,前面须加0,否则计算机不能识别,多个操作数之间必须用半角逗号“,”分开。1)立即数。该操作数即为参加运算的数,在指令操作码之后直接携带,无须任何读写操作就可以即时参加运算,MCS-51单片机汇编指令中立即数形式为数据前加“#”符号前缀,8位立即数记为#data(如#30H),16位立即数记为#data16(如#2000H)。MCS-51单片机汇编指令中操作数形式:2)寄存器操作数。该操作数形式为寄存器,寄存器中存放参加运算的数,指令中直接给出被访问寄存器的名字,可以是工作寄存器组,简记为Rn(n=0~7)。3)直接地址操作数。该操作数形式为内部RAM单元地址或SFR,若令中直接给出内部RAM的地址,记为direct,地址范围为内部RAM00H~FFH。4)寄存器间接寻址操作数。该操作数形式为寄存器前加“@”,寄存器中存放的是存储器地址,存储器中存放参加运算的数,指令中给出的是存有存储器地址的寄存器。存储器地址为8位时仅可存于R0或R1寄存器,记为@Ri(i=0,1),存储器地址为16位时,必须放入DPTR,记为@DPTR。参加运算的数可以存放于内部RAM、外部RAM、外设端口及ROM表格中。

(4)注释。用户为阅读程序方便而加注的解释说明。可选项,注释形式不限,对指令执行没有影响,只起指令功能说明作用,用半角分号“;”与操作数或指令隔开。例如

在ROM2000H处存有一条完整汇编指令:ORG2000HLOOP:ADDA,#0A8H;A累加器中的数与操作数A8H相加….

指令中“LOOP”表示指令首地址2000H,“ADD”为表示加法的指令助记符,

“A,#0A8H”为操作数,“;A累加器中的数与操作数A8H相加”为注释。6.2.2MCS-51汇编指令寻址方式CPU寻找具体运算数据的方式称为寻址方式。MCS-51单片机指令系统中最基本的寻址方式有8种,分别为立即寻址方式、直接寻址方式、寄存器寻址方式、寄存器间接寻址方式、位寻址方式、变址寻址方式、绝对寻址方式和相对寻址方式。1.立即寻址方式

指令中给出的是立即数,立即数紧跟操作码存放,取指令即取得立即数,方便快捷。由于立即数没有自己独立的地址,因此立即数只能被读取。MOVA,#35H;将立即数35H送入寄存器A,指令码为7435H。MOVDPTR,#1234H

;将立即数1234H送入寄存器DPTR,

指令码为901234H。2.直接寻址方式

MOVA,35H;将内部RAM35H单元的内容送入寄存器A,指令码为E535H。

MOVR0,0D0H;将内部RAMD0H单元的内容送入寄存器R0,指令码为A8D0H。

MOVA,PSW;将SFR寄存器PSW内容传送至寄存器A,指令码为E5D0H,与

直接寻址指令MOVA,0D0H指令码功能相同。

指令中给出的是直接地址操作数,该地址紧跟指令操作码存放,取指令即取得该地址,MCS-51单片机指令系统中的直接寻址方式仅限于对存储于片内RAM中的数据进行寻址,寻址范围是00H~FFH。(1)访问内部RAM可通过R0和R1作为间接寻址寄存器。MOVR0,#50HMOV@R0,A(2)访问外部RAM或外设端口,可采用DPTR或R0、R1作为间接寻址寄存器。

当地址为00H~FFH时,可用寄存器R0或R1;

当地址为0000H~FFFFH时,则必须用寄存器DPTR。MOVDPTR,2000HMOVXA,@DPTRMOVR1,50HMOVXA,@R1MOVDPTR,0050HMOVXA,@DPTR4.寄存器间接寻址方式指令中给出存有操作数地址的寄存器5.位寻址方式(1)片内RAM低128B的位寻址区20H~2FH,共16个单元128位,位地址范围为00H~7FH;3)字节地址加位序号的形式MOVC,0D0H.04)直接使用位地址形式

MOVC,0D0H指令操作数为位累加器C和位地址。MOVC,00H;将00H位送至位累加器C,指令码为A200H。(2)片内RAM高128B单元中可以位寻址的11个特殊功能寄存器,共88位。访问可以位寻址的SFR某位,可写成4种形式。例如:读取程序状态寄存器PSW的第0位操作。1)特殊功能寄存器加位序号的形式MOVC,PSW.02)位的符号地址(位名称)的形式MOVC,P6.变址寻址方式

MCS-51单片机的变址寻址是以数据指针DPTR或PC作为基址寄存器,以累加器A作为变址寄存器,以两者内容相加形式新的16位地址作为操作数地址,再从该地址读出数据送入寄存器A。

MOVCA,@A+PC;将A+PC所合成的地址所指的ROM单元的内容读出送入A,PC为本条指令地址下一条指令的首地址,指令码为83H。

MOVCA,@A+DPTR;将A+DPTR所合成的地址所指的ROM单元的内容读出送入A,指令

码为93H。

绝对寻址方式指令给出的操作数为存储器地址,绝对寻址的目的是通过改变程序指针PC的内容,实现程序的转移。绝对寻址方式对应绝对转移指令,指令中的操作数为程序转移的目标地址。7.绝对寻址方式

LJMP2000H;转移至ROM2000H处执行程序,执行指令后PC=2000H,指令码022000H。LCALL2000H

;调用入口地址为2000H的子程序,指令码为122000H。8.相对寻址方式

相对寻址方式指令中给出的操作数为-128~+127之间的有符号数(补码),相对寻址的目的也是通过改变程序指针PC的内容,实现程序的转移和执行。相对寻址方式对应相对转移指令,指令中的操作数为地址偏移量,程序转移的目标地址为当前PC值加上偏移量,当前PC值指得是相对转移指令的下一条指令的首地址。1000H:SJMP1055H;在ROM1000H处的无条件相对转移指令,指令码为8053H,当前PC为1000H+2,其转移目标地址为1000H+2+53H=1055H。1000H:JZ1055H

;在ROM1000H处的有条件相对转移指令,指令码为6053H,当前PC为1000H+2,若A=0,则转移目标地址为1000H+2+53H=1055H,若A≠0,则转移目标地址为1000H+2=1002H,即顺序执行。MCS-51指令系统共包含111条基本指令,按照指令的功能不同可分为数据传送类指令(29条)、算术运算和逻辑运算类指令(48条)、移位和位操作类指令(17条)和跳转及控制类指令(17条)4类。6.2.3.2MCS-51指令中的常用符号(1)Rn(n=0~7):表示当前工作寄存器R0~R7中的某个寄存器。(2)Ri(i=0或1):表示寄存器R0或R1。(3)#data:表示8位立即数。(4)#data16:表示16位立即数。6.2.3MCS-51汇编指令系统6.2.3.1MCS-51指令系统分类

(5)direct:表示片内RAM的某存储单元地址。既可以是片内RAM低128B的单元地址,也可以是高128B中特殊功能寄存器的单元地址或符号地址。

(6)addr11:用无符号数表示的11位二进制绝对地址偏移量,取值范围在0000H~07FFH,主要用于ACALL指令和AJMP指令。

(7)addr16:表示16位目的地址,主要用于LCALL指令和LJMP指令。

(8)rel:用补码形式表示的8位二进制相对地址偏移量,取值范围在-128~+127。主要用于相对转移指令,用以形成转移的目标地址。

(9)bit:表示位地址。

(10)B:表示B寄存器。

(11)ACC:寄存器A对应的SFR形式。

(12)C:表示PSW中的进位标志位Cy。

(13)$:表示当前指令的地址。6.2.3.3.MCS-51指令长度判定规则

在MCS-51单片机指令系统中指令长度判定规则是:每条指令基本长度为1个字节,若指令操作数为8位立即数data或8位直接地址direct或相对地址偏移量rel或绝对地址偏移量addr11或地址符号$或者位地址bit或者SFR中的任意形式,每出现1次,指令长度须在基本长度上增加1个字节;若指令操作数中出现16位立即数data16或16位地址addr16中的某1个,每出现1次,指令长度须在基本长度上增加2个字节。6.2.3.4.数据传送类指令

数据传送类指令主要完成数据的传送、交换和保存等功能。数据传送指令一般不影响任何标志位,但当目标地址为A时,将会影响奇偶标志位P。按照操作方式可将其分为内部数据传送指令、外部数据传送指令、数据交换指令和堆栈操作指令。1.内部数据传送类指令(MOV)MOV目,源(1).立即寻址型数传送指令MOVA,#data;data→AMOVRn,#data;data→RnMOV@Ri,#data;data→(Ri)双字节MOVdirect,#data;data→directMOVDPTR,#data16;data16→DPTR

;唯一的一条16位数传送指令三字节MOVDPTR,#1234HMOVA,#20HMOVR5,#30HMOVR0,#30HMOV@R0,#40HMOV31H,#50HMOV32H,#40(2).直接寻址型传送指令双字节MOVA,direct;(direct)→AMOVdirect,A;(A)→directMOVRn,direct;(direct)→RnMOV@Ri,direct;(direct)→(Ri)MOVdirect2,direct1;(direct1)→direct2三字节

例.已知R0=20H,(20H)=11H,(30H)=22H,(40H)=33H问8051执行如下指令后,累加器A、50H、R5、20H和60H单元中的内容是什么?MOVA,20HMOV50H,AMOVR5,30HMOV@R0,40HMOV60H,50H(A)=11H,(50H)=11H,(R5)=22H,(20H)=33H,(60H)=11H(3).寄存器寻址型传送指令

MOVA,Rn;Rn→A

MOV@Ri,A;A→(Ri)MOVRn,A;A→RnMOV

direct,A;A→(direct)MOVdirect,Rn;Rn→(direct)(4).寄存器间址型传送指令MOVA,@Ri;((Ri))→AMOV@Ri,A;

A→(Ri)MOVdirect,@Ri;((Ri))→direct

例.已知R0=30H,R1=40H,(30H)=AAH,(40H)=BBH,问8051执行如下指令后,累加器A、30H、40H和50H单元中的内容是什么?MOVA,@R0MOV@R1,AMOV50H,@R1(A)=AAH,(30H)=AAH,(40H)=AAH,(50H)=AAH注意:a.指令不能创造

b.A影响PSWMOVRn,@RiMOV#data,A2.外RAM(或I/O)与寄存器A之间的传送指令(MOVX)实现外RAM(或I/O)与A之间的数据传送MOVXA,@Ri;((Ri))→AMOVX@Ri,A;A→(Ri)MOVXA,@DPTR;((DPTR))→AMOVX@DPTR,A;A→(DPTR)00H~0FFH0000H~0FFFFH注意:a.建立指针

b.A参与

例.将内部50H单元中的数X送到外部RAM2500H单元中,将外部RAM2501H单元内容送入内部40H单元。MOVA,50HMOVDPTR,#2500HMOVX@DPTR,AMOVDPTR#2501HMOVXA,@DPTRMOV40H,A3.ROM中的数据查询指令(MOVC)变址寻址,查表指令A变址,DPTR,PC作基址,两者相加的得ROM某单元地址,将该地址中的数→AMOVCA,@A+DPTRMOVCA,@A+PCDPTR存放表首址,可以是任意地址A中存放偏移量A+DPTR=新地址PC为查表指令下一条指令首地址,A+A’+PC=新地址A’为修正量=表首址-PC

例.已知累加器A中有一个0~9范围内的数,用以上查表指令编出能查出0~9的平方值的程序。设平方表首地址为2000H。1).采用DPTR作为基址寄存器:MOVDPTR,#2000MOVCA,@A+DPTRMOV40H,A;

┇ORG2000HDB00H,01H,09H,04H,10H,19H,24H,31H,40H,51H

若A=03H,得到新地址2003H,从该地址中查表得9并存入累加器A中。ORG1FF7H1FF7HMOVA,#data;data为0-9之一。

1FF9HADDA,#04H;A+修正量。1FFBHMOVCA,@A+PC;查平方表。1FFCHMOV40H,A;查得平方送内部RAM40H单元,该指令为两字节指令。1FFEHSJMP$;停机指令,该指令为两字节指令。

2000HDB00H2001HDB01H

┇2004HDB10H2009HDB51H(2).若采用PC作为基址寄存器:4.数据交换指令XCHA,Rn;A

RnXCHA,@Ri;A((Ri))XCHA,direct;A(direct)XCHDA,@Ri;A((Ri))3~0注:必须经过A例.已知外部RAM的60H单元中有1个数X,内部RAM的60H单元中有1个数Y,编程实现内外部RAM60H单元内容互换。MOVR0,#60H;

60H→R0MOVXA,@R0;((R0))→AXCHA,@R0;

((R0))

AMOVX@R0,A;

A→(R0)

例.利用数据交换指令,将内部RAM60H单元中的低位BCD码转换成ASCⅡ码,并将结果存到外部2500H中。MOVR0,#60HMOVA,#30HXCHDA,@R0MOVDPTR,#2500HMOVX@DPTR,A5.堆栈操作指令PUSHdirect;SP+1→SP,(direct)→SPPOPdirect;(direct)→SP,SP-1→SP

例.设(30H)=X,(40H)=Y,试利用堆栈区域实现30H和40H单元中的数据交换MOVSP,#60H

;

Y→61HPUSH30H

;

X→62HPOP40H

;

X→40HPOP30H

;

Y→30HPUSHAPUSHACC(或E0H)(1)加法指令1)不带进位CY的加法指令ADD

注:8位二进制数,必须有A参与,结果在A中1.算术运算类指令6.2.3.5.运算类指令ADDA,#data;(A)+data→AADDA,direct;

(A)+(direct)→AADDA,Rn;

(A)+(Rn)→AADDA,@Ri;

(A)+((Ri))→A

参加运算的两个二进制数可被“看作”无符号数(0~255),也可以被“看作”有符号数的补码(-128~+127),结果为补码形式,影响PSW.例:编程求9AH+75H,并分析对PSW的影响。MOVA,#9AHADDA,#75H无符号数,结果为271

带符号数,(-102)+117=152).带进位CY的加法指令ADDCADDCA,#data;A+data+Cy→AADDCA,direct;A+(direct)+Cy→AADDCA,Rn;A+Rn+Cy→AADDCA,@Ri;A+((Ri))+Cy→A例.编程求3875H+6549H,结果的高低字节分别存于内部RAM的31H单元和30H单元。

ORG0100HMOVA,#75HADDA,#49HMOV30H,AMOVA,#38HADDCA,#65HMOV31H,ASJMP$END3)加1指令

注:只有第一条指令能对PSW的P标志位产生影响,其余四条都不会对标志位产生影响,只要是对A的操作都会影响PSW。INC

A

INC

Rn

INC

direct

INC

@Ri

INC

DPTR

例.编程实现内部RAM30H~33H单元内容对应传送至内部RAM40H~43H单元中。MOVR0,#30HMOVR1,#40HMOVA,@R0MOV@R1,A;(30H)→40H。INCR0INCR1MOVA,@R0MOV@R1,A;(31H)→41H。INCR0INCR1MOVA,@R0MOV@R1,A;(32H)→42H。(2)

减法指令SUBBA,#data;A-data-Cy→ASUBBA,direct;A-(direct)-Cy→ASUBBA,Rn;A-Rn-Cy→ASUBBA,@Ri;A-((Ri))-Cy→A1)带借位Cy的减法指令

特别指出,在MCS-51指令中,没有不带借位位的减法指令,如果想不考虑借位位,就在该减法指令前加一条Cy的清零指令。CLRC;

0→Cy

例:编程求9875H-6354H,结果的高低字节分别存入内部RAM的21H和20H单元中。ORG0100HCLRCMOVR0,#20HMOVA,#75HSUBBA,#54HMOV@R0,AMOVA,#98HSUBBA,#63HINCR0MOV@R0,ASJMP$END

DECA;(A)-1→A

DECRn;(Rn)-1→Rn

DECdirect;(direct)-1→direct

DEC@Ri;((Ri))-1→(Ri)注意:没有DECDPTR指令!3)十进制调整指令紧跟在ADD或ADDC指令之后且只能用于BCD码加法运算中

DAA2)减1指令

例.编写程序实现78+53的BCD加法过程。

MOVA,#78HADDA,#53HDAACLRCy

;0→Cy。MOVA,#9AH;用十六进制数(99H+1=)9AH表示十进制数100的BCD码。SUBBA,#53H;求十进制数53的BCD补码。ADDA,#78H;减法转加法,减去1个数可用加这个数的补码来完成。DAA;对寄存器A中结果进行加法调整。例

编写程序实现78-53的BCD减法过程。

特别指出,在MCS-51单片机指令系统中没有十进制减法调整指令,因此,BCD减法运算可采用补码运算法则将减法转化为加法,最后用十进制加法调整指令进行调整。(4)

乘法和除法指令

注意:在使用乘除法指令时,只对8位无符号数进行乘除运算,被乘数或被除数只能来自累加器A,乘数或除数必须来自累加器B,对于乘法运算,结果的高8位存入B中,低8位存入A中,对于除法运算,商数存入A中,余数存入B中。MULAB;A×B→A和BDIVAB;A÷B→A和B

例.已知两个8位无符号数分别放在50H和51H中,编程求两数之积,并把积的低字节存入52H中,积的高字节存入53H中。INCR1MOV@R1,AINCR1MOV@R1,BSJMP$ENDORG2000HMOVR1,#50HMOVA,@R1INCR1MOVB,@R1MULAB2.逻辑运算指令(1)

逻辑与操作指令ANL

A,direct

;A∧(direct)→AANL

A,#data

;A∧data→AANL

A,Rn

;A∧(Rn)→AANL

A,@Ri;A∧((Ri))→AANL

direct,#data

;(direct)∧data→directANL

direct,A

;(direct)∧A→direct

某位与0相与,该位清零,称为屏蔽;

某位与1相与,该位不变,称为截取。

例将内部RAM30H单元存放的某数字(0~9)的ASCII码转换为非压缩BCD码。ANL30H,#0FH;(30H)∧0FH→30HORL

A,direct

;(A)∨(direct)→AORL

A,#data

;(A)∨data→AORL

A,Rn

;(A)∨(Rn)→AORL

A,@Ri;(A)∨((Ri))→AORL

direct,#data

;(direct)∨data→directORL

direct,A

;(direct)∨(A)→direct

某位与0“或”则该位保持不变;

某位与1“或”则该位置1(置位)。(2)

逻辑或操作指令例

将内部RAM30H单元存放的某数字(0~9)的非压缩BCD码转换为ASCII码。

ORL30H,#30H;(30H)+0FH→30H,若(30H)=05H,指令执行后

(30H)=35H(`5`)。(3)

逻辑异或操作指令某位与1“异或”则该位取反;某位与0“异或”则该位不变。XRL

A,direct

;(A)

⊕(direct)→AXRL

A,#data

;(A)⊕data→AXRL

A,Rn

;(A)⊕(Rn)→AXRL

A,@Ri;(A)⊕((Ri))→AXRL

direct,#data

;(direct)

⊕data→directXRL

direct,A

;(direct)⊕(A)→direct

例.编程将片外RAM2000H单元中的数高4位取反,低4位不变。ORG2000HMOVDPTR,#2000HMOVXA,@DPTRXRLA,#0F0HMOVX@DPTR,ASJMP$END(4)

累加器清零和取反指令CLRA;0→A,累加器A清零CPLA;A→A,累加器A取反

例.已知片内50H单元中有一个负数X,编程求X补码的程序。ORG2000HMOVA,50HCPLAINCAORLA,#80HMOV30H,ASJMP$END6.2.3.6移位和位操作指令RLA;RRA;RLCA;RRCA;SWAPA;1.移位指令例编程使内部RAM30H单元中的数乘10(设乘积小于256)。ORG0100HMOVA,30HRLAMOVB,ARLARLAADDA,BMOV30H,ASJMP$END例已知有1个16位无符号数,高8位存于累器加A中,低8位存于寄存器B中,编程使此数乘2(设乘积小于65536)。ORG2000HCLRCMOVR0,AMOVA,BRLCAMOVB,AMOVA,R0RLCASJMP$END例在内部RAM50H和51H单元存有两个非压缩BCD数,编程将它们紧缩为1个字节放入内部RAM50H。ORG1000HMOVR1,#50HMOVA,@R1SWAPAINCR1ORLA,@R1DECR1MOV@R1,ASJMP$END2位操作指令(1)位传送指令MOVC,bitMOVbit,C例.将20H位的内容传送到5AH位MOVC,20HMOV5AH,C(2)位置位和位清零指令CLRCCLRbitSETBCSETBbit(3)位逻辑运算指令ANL

C,bit

ANL

C,/bit

ORL

C,bit

ORL

C,/bit

CPL

CCPLbit例M、N和W都代表位地址,编程求Y。ORG0100HMOVC,NORLC,WANLC,MCPLCMOVY,CSJMP$

END例M、N和Y都代表位地址,编程完成M、N中内容的异或操作,结果存放在Y中。ORG0100HMOVC,NANLA,/MMOVY,CMOVC,MANLC,/NORLC,YMOVY,CSJMP$END6.2.3.7.跳转及控制转移指令

改变程序计数器PC内容为目标,实现程序转移。1无条件转移指令(1)长转移指令LJMPaddr16;PC←addr16

指令执行后,PC指向addr16,可以是64KB程序空间任意地址。Addr16经常用标号地址表示转移目标。

若标号地址START代表0100H,则指令0000H:LJMPSTART,表示MCS-51单片机开机或系统复位后,从0100H处开始执行程序。(2).短转移指令AJMPaddr11;PC+2→PC,addr11→PC10~0双字节双周期指令

需要指出,AJMP指令中给出的转移目标地址必须与下一条指令的地址(即PC+2)在同一个2KB区域(X000H~X7FFH或X800H~XFFFH),addr11仅代表转移目标地址的低11位(A10~A0),其值由转移目标地址所在页确定。例

根据以下短转移指令,求addr11。①

2000H:AJMP2600H②2A00H:AJMP29F0H①addr11=0600H

目标地址=2600H②addr11=01F0H目标地址=29F0H(3)

相对转移指令SJMPrel;PC+2+rel→PC双字节双周期指令rel(-128~+127)rel=目标地址-(源地址+2)

例根据以下相对转移指令,求偏移量rel。

0100H:SJMP0155H

②0100H:SJMP0F6H

对①目标地址为0155H,rel=0155H-(0100H+2)=0157H

,其指令码为8053H。对②目标地址为00F6H,rel=00F6H-(0100H+2)=F4H(负数)=[-12]补,其指令码为80F4H。SJMP$;指令码为80FEHrel=FEH=[-2]补目标地址为PC+2-2=PC,‘原地踏步’(4).变址寻址指令(散转指令)JMP

@A+DPTR

;A+(DPTR)→PC

例:已知累加器A中放有待处理命令编号0~3,程序存储器中放有始址为TAB的二字节短转移指令,编程使机器按照累加器A中的命令编号转去执行相应的命令程序。ORG1000H

RLAMOVDPTR,#TABJMP@A+DPTRTAB:AJMPKL0AJMPKL1AJMPKL2AJMPKL3┇2条件转移指令

需要判断某种条件是否满足而决定程序流程,实现程序分支。

例编程将内部RAM50H单元与60H单元中数作差,结果放在A中,若A=0,则使(40H)=00H,否则使(40H)=FFH。

(1).累加器A的判零转移指令

JZ

rel

;

若A=0,则(PC)+2+rel→PC

若A≠0,则(PC)+2→PC

JNZ

rel

;

若A≠0,则(PC)+2+rel→(PC)若A=0,则(PC)+2→PCORG1000HCLRCMOVA,50HSUBBA,60HJZZEROMOV40H,#0FFHSJMPSTOPZERO:MOV40H,#00HSTOP:SJMP$

END(2)

位控制转移类指令1).判Cy转移指令JC

rel

;

若(CY)=1,则(PC)+2+rel→PC

若(CY)=0,则(PC)+2→PCJNC

rel

;若(CY)=0,则(PC)+2+rel→PC

若(CY)=1,则(PC)+2→PC

JB

bit,rel

;若(bit)=1,则(PC)+3+rel→PC

若(bit)=0,则(PC)+3→PCJNB

bit,rel

;若(bit)=0,则(PC)+3+rel→PC

若(bit)=1,则(PC)+3→PC

JBC

bit,rel

;若(bit)=1,则(PC)+3+rel→PC且0→bit

若(bit)=0,则(PC)+3→PC2).判直接寻址位转移指令三字节指令减法操作,但不保存结果,影响CY若是无符号数,可根据CY直接判断大小3.比较转移指令

CJNE

A,direct,rel

;

若(A)≠(direct),则(PC)+3+rel→(PC)若(A)=(direct),则(PC)+3→(PC),形成CYCJNE

A,#data,rel

CJNE

Rn,#data,rel

CJNE

@Ri,#data,rel

例.已知50H与60H均为无符号数,请比较两数大小,将较大的数送到50H中,将较小的数送到60H中。ORG1000HMOVA,50HCJNEA,60H,L1L1:JNCSTOPXCHA,60HMOV50H,ASTOP:SJMP$END3.循环控制转移指令

例编程实现片内RAM50H为首地址的连续10个单元中的无符号数求和,并把求和结果送到片外RAM2000H单元中(假设和不产生进位)。DJNZ

Rn,rel

;若(Rn)-1≠0,则(PC)+2+rel→PC

若(Rn)-1=0,则(PC)+2→PC

DJNZ

direct,rel

ORG1000HMOVDPTR,#2000H

MOVR5,#0AHMOVR0,#50HCLRALOOP:ADDA,@R0INCR0DJNZR5,LOOPMOVX@DPTR,ASJMP$END4.子程序调用指令和返回指令

子程序调用和返回指令实际上是一种特殊的程序转移,调用子程序即是转移至子程序入口地址处去执行子程序,返回指令即是转移至返回地址(调用指令下一条指令的首地址)继续原来的程序,但与一般转移指令的不同之处在于,调用子程序时须将返回地址压入堆栈,返回指令执行时须将返回地址出栈,而一般转移指令不涉及堆栈操作。1).长调用指令

LCALL

addr16

;(PC)+3→PC,(SP)+1→SP,(PC7-0)→SP,(SP)+1→SP,(PC15-8)→SP,addr16→PC

2)短调用指令

ACALL

addr11;(PC)+2→PC,(SP)+1→SP(PC7-0)→SP,(SP)+1→SP(PC15-8)→(SP),addr11→(PC10-0)(1)子程序调用指令

子程序调用指令指令执行完后,程序就会转移到指令操作数所指目的地址处去执行新的指令。例已知SUBTRN=0123H,单片机执行如下指令

MOVSP,#07HSUBTRN:ACALL0345H堆栈中的数据如何变化,PC中的内容是什么?SP=09H,(08H)=25H,(09H)=01H,PC=0345H。

(2)返回指令

1)子程序返回

RET

;(SP)→PC15-8,(SP)-1→SP

(SP)→PC7-0,(SP)-1→SP

2)中断返回RETI;

(SP)→PC15-8,(SP)-1→SP

(SP)→PC7-0,(SP)-1→SP

NOP

;(PC)+1→PCPC加1,消耗一个机器周期外,没有执行任何操作。可用于程序的等待和短时间的延时。

ORG1000HLOOP:SETBP1.0LCALLDELAYCLRP1.0

LCALLDELAYSJMPLOOP例利用NOP指令产生方波。6.2.3.8.空操作指令DELAY:NOP;空操作

NOPNOPNOPRETEND6.2.4MCS-51汇编伪指令伪指令:解释性指令、指示信息、协助编译、不产生机器代码。功能:定义符号、程

温馨提示

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

最新文档

评论

0/150

提交评论