版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第3章
MCS-51
单片机指令系统本章内容MCS-51指令系统的分类、格式及一般说明寻址方式分类指令
掌握MCS-51指令系统的各种寻址方式掌握每条指令的格式、功能及用法掌握指令的操作过程中操作数的变化情况以及对标志位的影响。学会正确选用指令完成简单的任务学习目的3.1概述
一、指令系统概述:
指令:CPU根据人们的意图来执行某种操作的命令。指令系统:是计算机所能够执行的全部指令的集合。程序:是按人们的要求所编制的指令操作序列。程序设计语言:是编写程序的某种规则。三类编程语言:机器语言、汇编语言、高级语言二、MCS-51指令系统特点:
1.MCS-51系列单片机的指令系统共有111条指令,按功能可分为数据传送、算术操作、逻辑操作、程序转移、位操作等5大类。2.指令长度较短:单字节指令49条,双字节指令46条,三字节指令16条。
3.指令执行时间快:单机器周期指令64条,双机器周期指令45条,四机器周期指令2条。4.有丰富的位操作指令。三、指令包含的基本内容
每一条指令通常由操作码和操作数两部分组成。
1.操作码:表示执行什么性质和类型的操作。2.操作数:表示参加操作的数的本身或操作数所在的地址。3.操作结果的去向:指定操作结果存放的地址。四、指令的表示方法1.二进制代码表示——机器语言指令例:0111010000110000
2.助记符表示——汇编语言指令例:MOVA,#30H
MOV表示“传送”助记符。助记符是指令操作码的表现形式,用指令功能的英文缩写字母表示。助记符指令“翻译”成机器指令才能被识别和执行,这个过程叫“汇编”。
助记符指令机器指令通过汇编五、指令的格式操作码+操作数(操作码[D][,S])[标号:]操作码[目的操作数D][,源操作数S][;注释]1.操作码:是用与指令功能一致的2-5个英文缩写表示。2.操作数:是参与操作的数据来源和操作结果存放的目的单元。无操作数指令其操作数隐含在操作码中。4.双字节指令:是指令长度为2个字节,操作码和操作数各占1个字节,共有45条;例:MOVA,#0AH(机器码:011101000001010),代码740AH;作用是将立即数10送入累加器A中。3.单字节指令:指令长度为1个字节,包含有操作码和操作数,共有49条;例:INCDPTR(机器码:10100011),代码A3H,功能是将数据指针内容加1。5.三字节指令:指令长度为3个字节,操作码占1个字节,操作数各占2个字节,共有17条。例:MOV20H,40H;(机器码:100001010100000000100000),代码854020H(注意,机器码中S、D与汇编指令的位置相反);功能是将40H中的内容送到20H单元中。六、操作数的类型1.一位数(位型):是用于内部RAM,查询某一位的状态(0/1),用来控制程序跳转等。2.8位无符号数(字节型):是用于内外存储单元的算术/逻辑运算(0—255)。
操作数类型可以按立即数,位操作数,寄存器操作数以及存储器操作数来分。其中立即数,寄存器操作数以及存储器操作数都可以是8位或者16位。3.8位带符号数(短整型)
:是用于内外存储单元的算术/逻辑运算(-128—127)。5.16位带符号数(整型):是用于内外存储单元的算术/逻辑运算:奇数高字节,偶数低字节(-32768—32767)。
4.16位无符号数(字型):是用于内外存储单元的算术/逻辑运算:奇数高字节,偶数低字节(0—65535)。
七、堆栈操作堆栈:片内RAM中一个特殊空间,称为SP寄存器(堆栈指针),用来存放一些临时性的重要数据和信息。好比仓库一样。操作:送一个地址信号到SP寄存器,就完成堆栈的建立。这个地址就是“栈底”。后面的数据按后进先出的原则“进栈”和“出栈”。进栈一次,SP自动加1。出栈一次,SP自动减少1。所以,SP始终指向栈顶。堆栈概念表示工作寄存器中8个工作寄存器R0~R7之一。表示工作寄存器中可作地址寄存器的R0或R1。作为间址寄存器Rj只能使用R0、R1寄存器。Ri(i=0~7):Rj(j=0~1):3.2指令符号说明代表8位内部数据存储器单元的地址或特殊功能寄存器地址。
代表16位目的地址。表示8位常数。
代表16位常数。
direct:#data:#data16:addr16:rel:表示8位带符号的偏移字节。
addr11:表示11位目的地址。
bit:代表内部RAM或特殊功能寄存器中的直接寻址位。
@:是间址寄存器前缀。
3.3寻址方式一、立即寻址:直接给出操作数而不是地址的寻址方式。
该操作数称为立即数,跟在操作码后,在数前加“#”符号为前缀。共有七种寻址方式,一条指令可能含多种寻址方式:立即寻址、直接寻址、寄存器寻址、寄存器间接寻址、变址寻址(基址寄存器+变址寄存器间接寻址)、相对寻址、位寻址。例:MOVA,#30H
机器码:7430功能:将立即数30H送到累加器A中,操作数A的地址隐含在操作码中。
二、直接寻址:直接给出操作数地址的寻址方式。操作数为内部128个单元的RAM(数据存储器)中的数据,或特殊功能寄存器SFR中的数据,并直接用对应的地址表示。寻址范围:可用于访问程序存储器,也可用于访问数据存储器。
1.访问程序存储器
直接给出程序存储器的16位地址或11位地址。
有长转移LJMPaddr16、绝对转移LJMPaddr11,长调子LCALLaddr16与绝对调子ACALLaddr11等指令。
2.访问数据存储器
直接寻址地址(direct)为8位,可访问三种存储空间:特殊功能寄存器、片内RAM的低128单元及位地址空间。例:MOVACC,#30H机器码:75E030功能:将立即数30H送到累加器A中。注意,这里的ACC就是累加器A。其地址是E0H。与前一个例子比较,前者A是立即寻址方式,后者ACC是直接寻址方式。二者指令形式上相同,但二者机器码不同,功能相同。
例:MOVA,30H机器码:E530功能:将片内RAM30H单元中的内容送到累加器A中。
MOVA,#30H7430程序存储器操作码操作数A80指令执行后,A=30H30来看具体数字变化E530程序存储器操作码操作数MOVA,30HA407F片内RAM30指令执行后,A=7FH7F比较后面的例子注意:直接寻址是访问特殊功能寄存器的唯一方式。
例:MOVPSW,#20H功能:将立即数20H送到PSW中,PSW可以作为直接寻址寄存器的符号地址。
例:ORLC,32H
功能:进位位C与位地址32H的内容相或后结果送至进位位。
直接寻址访问位地址三、寄存器寻址以寄存器的内容为操作数的寻址方式。可进行寄存器寻址的寄存器有:工作寄存器组R0—R7、累加器A、寄存器B、数据指针DPTR、C。例:
ADDA,R2;AA+R2MOVR3,A;R3AINCR0 ;R0R0+1
四、寄存器间接寻址以寄存器的内容为地址,以该地址中的内容为操作数的寻址方式。工作寄存器R0、R1和专用寄存器数据指针DPTR可用于间接寻址,在寄存器前加“@”符号作前缀。用R0、R1作地址指针,MOV指令访问片内RAM。用R0、R1、DPTR作地址指针,MOVX指令访问片外RAM。规则A3050例:MOVA,@R1间址寻址:指令执行后,片内RAM50H单元中的内容4EH送至累加器A。寄存器寻址:指令执行后,R1中的内容50H送至累加器A。例:MOVA,R1R1504E片内RAMR1A503050504E比较寄存器寻址和寄存器间接寻址例:MOVX@DPTR,A指令执行后,累加器A的内容送至片外RAM2000H单元。50片外RAMDPTRA2000302000H30五、变址寻址方式真正操作数地址是以某个寄存器(程序计数器PC或数据指针DPTR)为基地址,再加上一个地址偏移量(A中的内容)来构成,寻址该地址单元,读取数据。用于访问程序存储器,只用于读取,不能存放。主要用于查表性质的访问。例:MOVCA,@A+DPTR基址为2000H,加30H后,读2030H内容,指令执行后,A=1AHDPTRA2000301A程序存储器2030H+20002030301A基址寄存器:PC(程序计数器)或DPTR(数据指针)变址寄存器:A格式:六、相对寻址以当前程序计数器PC内容与给定的偏移量相对地址rel之和作为新的PC值(转移地址)的寻址方式。用于访问程序存储器,应用于程序转移类指令。偏移量:以补码表示,-128~+127。目的地址=源地址+指令字节数(2或3)+rel下一条指令第一字节地址例:SJMP08H
机器码:8008当前PC=2000H,SJMP指令是双字节,偏移量是08H,指令执行后,PC=200AH:跳转到200AH。8008程序存储器操作码操作数2000双字节指令PC2000200A200A022000+08200A七、位寻址方式操作数是某个单元(8位)中的某1位的寻址方式。寻址范围:(1)片内RAM20H~2FH(16个单元),共128位;(2)单元地址能被8整除的特殊功能寄存器SFR(共92个)。00H20H2FH7FH1FH30H80HFFH特殊功能寄存器SFRRAM区普通RAM区位寻址区工作寄存器区27H22H21H20H26H24H25H23H28H2FH总共128个可按位寻址的位单元地址07060504030201000F0E0D0C0B0A090817161514131211101F1E1D1C1B1A191827262524232221202F2E2D2C2B2A292837363534333231303F3E3D3C3B3A393847464544434241407F7E7D7C7B7A7978位地址17D7D6D5D4D3D2D1D0操作数表示方法:
(1)直接用位地址表示。(2)直接用名加位数表示。例:20H单元第0~7位对应的位地址是00H~07H;21H单元第0~7位对应的位地址是08H~0FH;22H单元第0~7位对应的位地址是10H~17H。PSW的第3位用PSW.3表示;P1.0表示P1的第0位。例1:CLRP1.0;(P1.0)←0注意:
1)位地址里的数据只可能是一个0或1;2)有的位地址十分明确,如P1.0,ACC.7等,有的位地址则“不太明确”,如:
[MOVA,17H;(A)←(17H),17H是字节地址]MOVACC.0,17H;(ACC.0)←(17H),这里ACC.0
是位地址所以该指令中的17H是22H单元的第7位例2:SETBACC.7;(ACC.7)←13.4数据传送类指令数据传送类指令共29条,是将源操作数送到目的操作数。指令执行后,源操作数不变,目的操作数被源操作数取代。按指令的功能分类,可分为5大类:数据传送类(29条);算术运算类(24条);逻辑运算及移位类(24);控制转移类(17条);位操作类(17条)。一、片内数据传送指令片内数据传送指令能完成累加器、直接地址、间接地址、寄存器、立即数之间的数据传送。ARi#data@Rjdirectdirect1.以累加器A为一方的传送指令可实现以累加器A为一方,以某工作寄存器、某片内RAM单元、某专用寄存器为另一方的数据传送。MOVA,Ri ;ARi(i=0~7)MOVA,@Rj ;A(Rj)(j=0,1)MOVA,direct ;A(direct)MOVRi,A ;RiAMOV@Rj,A ;(Rj)AMOVdirect,A ;(direct)A2.不以累加器A为一方的传送指令MOVdirect,Ri ;(direct)Ri(i=0~7)MOVdirect,@Rj;(direct)(Rj)(j=0~1)
MOVRi,direct ;Ri(direct)MOV@Rj,direct ;(Rj)(direct)MOVdirect,direct ;(direct)(direct)MOVA,#data ;A#dataMOVRi,#data ;Ri#dataMOV@Rj,#data ;(Rj)#dataMOVdirect,#data ;(direct)#dataMOVDPTR,#data16;DPTR#data163.用立即数置数的指令例:已知内部RAM中(70H)=60H,(60H)=20H,P1作为输入口,数据为#0B7H,执行下列程序:MOVR0,#70HMOVA,@R0MOVR1,0E0HMOVB,@R1MOV@R0,P1MOVP2,P1;R070H;A(70H)=60H;R1(E0H)=ACC=60H;B(R1)=(60H)=20H;(70H)P1=0B7H;P2P1=0B7H执行程序后P2=0B7H,(寄存器)B=20H,(累加器)A=60H,R0=70H,R1=60H二、访问片外RAM的传送指令MOVXA,@Ri ; A(Ri)MOVX@Ri,A ; (Ri)ARi指定的是8位地址,可访问256个片外RAM单元。MOVXA,@DPTR;A(DPTR)MOVX@DPTR,A;(DPTR)ADPTR包含16位地址,由P0口决定低8位地址,P2口决定高8位地址,可访问64K片外RAM单元。例:一系统有2K外部RAM,请设计程序将内存250单元(地址为FAH)的内容送至外存0650H单元中。MOVDPTR,#0650H;0650H送DPTRMOVR0,#0FAH;0FAH送R0MOVXA,@R0;0FAH里的内容送AMOVX@DPTR,A;A内容送0650H地址三、读程序存储器指令(基址寄存器加变址寄存器间址指令)这两条指令多用于查表程序。MOVCA,@A+DPTR;A(A+DPTR)MOVCA,@A+PC;PCPC+1;A(A+PC)例:累加器A的内容为一BCD数(0~9),求用查表法获得相应的ASCII码数。表格:ASCIIBCD39...3130TABTAB+1TAB+9019...近程查表子程序…INCA2100:MOVCA,@A+PC2101:RETTAB:DB30HDB31H
…DB39H
(若初始A=0)…;AA+1(则A=1);A(PC+1+A)(则A(2102);返回(一字节指令,PC+1)(读;表格后,A=30H);表格
DB30H,地址2102HDB31H
…DB39H
…;DPTR#TAB(标号为常数);A(TAB+A);返回
…
;表格DB30HDB31H
…DB39H远程查表(用DPTR)…MOVDPTR,#TABMOVCA,@A+DPTRRET
…TAB:DB30HDB31H
…DB39HDPTR作基址寄存器时,表格可放在64K存贮空间的任何地址,称为远程查表。PC作为基址寄存器时,表格只能放在该条指令下的255单元中,表格大小与位置受一定限制,称为近程查表。四、交换指令XCHA,Ri;XCHA,@Rj;XCHA,direct;XCHDA,@Rj;SWAPA;ARi(i=0~7)A(Rj)(j=0,1)A(direct)A0~3(Rj)0~3(低4位)A0~3
A4~7(高低两半字节数据内容交换)五、进栈出栈指令堆栈是在片内RAM中按照“先进后出,后进先出”原则设置的专用存储区。数据的进栈出栈由栈指针寄存器SP(栈底地址)统一管理。进栈指令:PUSHdirect;SPSP+1(SP)(direct)出栈指令:POPdirect;(direct)(SP)SPSP-1SPSP60H例:已知SP=60H,A=30H,B=70H,执行下列指令626160SP30H61HPUSHAPUSHBPOPASP=A=B=30H70H62H70H61HSP70H指令执行过程:先将30H压入堆栈,再将70H压入堆栈,再将70H弹出堆栈到累加器A中。3.5算术操作类指令共24条指令,分为加法、减法、加一、减一与其他算术操作指令5个小类。对标志位C(进位标志)、AC(辅助进位标志)、OV(溢出标志)有影响。一、加法指令1、不带进位位加法ADD A,Ri;AA+Ri(i=0~7)ADD A,@Rj;AA+(Rj)(j=0~1)ADD A,direct;AA+directADD A,#data;AA+#data2.带进位位加法ADDCA,Ri;AA+Ri+CADDCA,@Rj;AA+(Rj)+CADDCA,direct;AA+direct+CADDCA,#data;AA+#data+C影响标志位:无符号数相加后整个字节有溢出C=1相加后低半个字节有溢出AC=1最高位和次高位有变化时,表示进位(有符号数)OV=1二、减法指令带借位位减法指令SUBBA,Ri;AA-C-Ri(i=0~7)SUBBA,@Rj;AA-C-(Rj)(j=0~1)SUBBA,direct;AA-C-directSUBBA,#data;AA-C-#data影响标志位不够减C=1低半字节不够减AC=1相减时最高位和次高位不同时借位OV=11.乘法指令(无符号数)MULAB;A×BB7~0A7~0影响标志位:总有:C=0若积>255:OV=1功能:将累加器A中的数据与寄存器B中的数据相乘,并将积的低8位存放在A中,高8位存放在B中。三、乘除法指令2.除法指令(无符号数)DIVAB影响标志位:总有:
C=0若除数=0:
OV=1除数≠0:
OV=0功能:将累加器A中的数据除以寄存器B中的数据,并将商存放在A中,余数存放在B中。A/B→A(商),B(余数)四、十进制调整指令DAA把A中两个BCD数相加之和作加6进行修正,调整为2位BCD码数。因为,BCD码中1010~1111在十进制中没有对应项,当运算结果大于9时,就会产生错误。DA指令就是对BCD码十进制数加法运算结果作加6进行修正。特点:(1)只能用在对BCD码数进行ADD或ADDC 操作后使用。减法不能用此指令。(2)影响标志位:有进位时C=1。五、加一指令INCA;AA+1INCRi;RiRi+1(i=0~7)INC@Rj;(Rj)(Rj)+1(j=0~1)INCdirect;directdirect+1INC@DPTR;(DPTR)(DPTR)+1不影响标志位六、减一指令DECA;AA-1DECRi;RiRi-1(i=0~7)DEC@Rj;(Rj)(Rj)-1(j=0~1)DECdirect;directdirect-1不影响标志位。例:编写4位压缩BCD码数相加程序:被加数放在30H、31H单元,加数放在32H、33H单元;要求和放在30H、31H单元中。MOVR0,#30H ;MOVR1,#32H ;MOVA,@R0;ADDA,@R1;DAA;MOV@R0,A ;INCR0;INCR1 ;MOVA,@R0;ADDCA,@R1;DAA;MOV@R0,A ;地址指针指向被加数(个位,十位)地址指针指向加数(个位,十位)将被加数送到A中AA(被加数)+加数(32H单元中)作十进制调整(加6修正)调整后的个、十位数送回30H单元调整地址指针,30H+1H=31H调整地址指针,指向百位、千位地址指针指向被加数(百位,千位)地址指针指向加数(百位,千位)作十进制调整百、千位相加调整后结果送31H3.6逻辑操作类指令共24条,分为与、或、异或、A操作指令。一、与指令ANLA,RiANLA,@RjANLA,directANLA,#dataANLdirect,AANLdirect,#data;AA∧Ri(i=0~7);AA∧(Rj)(j=0~1);AA∧direct;AA∧#data;directdirect∧A;directdirect∧#data二、或指令ORL A,Ri;AA∨Ri(i=0~7)ORL A,@Rj;AA∨Rj(j=0~1)ORL A,direct;AA∨directORL A,#data;AA∨#dataORL direct,A;directA∨directORL direct,#data;directA∨#data三、异或指令XRLA,Ri;AARi(i=0~7)XRL A,@Rj;AARj(j=0~1)XRL A,direct;AAdirectXRLA,#data;AA#dataXRLdirect,A;directAdirectXRLdirect,#data;directA#data四、A操作指令CPLACLRARLARRARLCA;RRCA;CACA;AA(A取反);A0(A清零);An+1An,A0A7(A循环左移1次);AnAn+1,A7A0(A循环右移1次)累加器A带进位标志C循环左移1次累加器A带进位标志C循环右移1次注:左移1相当于乘2,右移相当于除23.7位操作类指令1.位寻址区内部RAM中20H~2FH单元是位寻址区,该区的每一位都赋予了一个位地址,位地址为:00H~7FH。2.特殊功能寄存器:P0、P1、P2、P3、TCON、SCON、IE、IP、PSW、A、B的每一位都有一个位地址。一、位地址空间1.直接地址方式:直接指明地址。如:50H,07H,等位地址00H~7FH在内部RAM中,地址连续。位地址80H~FFH在特殊功能寄存器中,地址不连续。二、位地址的表示方式2.点操作符方式如:PSW.5表示PSW寄存器中的第五位,其位地址为D5H。3.位名称方式如:RS0,RS1,TR0,TR1等CACF0RS1RS0OV-PPSWD7D6D5D4D3D2D1D0D0H4.用户定义名方式伪指令bit,定义某个位地址的标号。格式:[符号]bit[位地址]作用:[符号]代表[位地址],表明在程序中,[符号]跟[位地址]相同。且定义后,程序中不能改变。如:FLGbitF0;经定义,指令中用FLG代替F0。
ALbitP0.0;P0.0的位地址赋予给AL。1.位传送指令MOVC,bit;CbitMOVbit,C;bitC三、位操作类指令作用:将某个位数据bit(或C)值送给C(或bit)。且不影响其他标志位。bit为某个位数据,用位地址表示:如10H。00H~7FH在片内RAM(20H~2FH单元)中。80H~FFH对应于11个特殊功能寄存器。注意:要想传送位数据,只能通过C来完成。2.位逻辑操作指令CPLCCLRCSETBCCPLbitCLRbitSETBbitANLC,bitANLC,/bitORLC,/bitORLC,bit;CC(取反);C0(清零);C1(置1);bit取反;bit0(清零);bit1(置1);CC^bit( C和bit相与);CC^bit,“/”表示取反,但;不改变原来bit中的值;CCbit(位相或,bit值不变);CCbit(C和bit相或)3.位条件转移指令若条件满足则PC值改变,实现程序的转移。否则,顺序执行后面程序JC rel;当C=1时,转移到目标地址:PC+2+rel→PCJNC rel;当C=0时,转移到目标地址:PC+2+rel→PCJBbit,rel;当bit=1时,转移到目标地址:
PC+3+rel→PCJNBbit,rel;当bit=0时,转移到目标地址:
PC+3+rel→PCJBCbit,rel;若bit=1则清bit=0,并转移到目标地址:;PC+3+rel→PC3.8程序转移指令一、无条件转移指令1.绝对转移指令(短跳转)AJMPaddr11;PCPC+2PC10~0addr11(目标地址:是高5位不变,低11位发生变化)机器码:a10a9a800001a7a6a5a4a3a2a1a0由11位直接地址addr11和指令操作码00001组成,为什么是11位地址?这由64KB地址寻址范围来决定:MCS-51系列单片机可以在64KB地址范围内寻址,绝对转移指令(短跳转)的转移范围只在PC当前值所指的2KB地址范围内。例:当前PC=1402H,addr11=200H,转移PC=1200HPC=0001010000000010(1402H)addr11=0000001000000000(200H)(11位)转移PC=0001001000000000(后11位发生变化)一页:256个地址单元(00H~FFH)一区:8页,共2KB地址单元;地址高5位决定区。
64K:32区,256页。F800H~FFFFHF000H~F7FFHE800H~EFFFHE000H~E7FFHD800H~DFFFHD000H~D7FFHC800H~CFFFHC000H~C7FFHB800H~BFFFHB000H~B7FFHA800H~AFFFHA000H~A7FFH9800H~9FFFH9000H~97FFH8800H~8FFFH8000H~87FFH7800H~7FFFH7000H~77FFH6800H~6FFFH6000H~67FFH5800H~5FFFH5000H~57FFH4800H~4FFFH4000H~47FFH3800H~3FFFH3000H~37FFH2800H~2FFFH2000H~27FFH1800H~1FFFH1000H~17FFH0800H~0FFFH0000H~07FFH程序存储器64K地址空间一区2.长转移指令三字节指令,不影响标志位,可在64KB地址范围内无条件转移。LJMPaddr16;PCaddr163.相对短转移机器码:40Hrel本指令在PC内容加2所指地址上,以rel:-128~+127为偏移量,在一页地址范围(256个地址单元)内实现相对短转移。SJMPrel;PCPC+2+rel4.间接长转移指令JMP@A+DPTR;PCA+DPTR机器码:73H在64KB地址范围内无条件转移。例:A=01H,DPTR=3000H,转移地址为PC=3000+1=3001H例:已知A的内容为0,2,4,6,8五个偶数中的一个,又标号TAB的真实地址为1800H,试分析下列程序段的执行结果。MOVDPTR,#TABJMP@A+DPTR…TAB:AJMP100H1802:AJMP200H1804:AJMP300H1806:AJMP400H1808:AJMP500H;TAB送DPTR;跳到@A+DPTR中;短跳转,低11位变100H;高5位不变,低11位变200H分析:若A=0执行TAB:AJMP100HPC+2:
1802H:0001100000000010Adde11:
100H:
001000000001900H:0001100100000000高5位地址不变,低11位改变所以:A=0程序转移到1900H继续执行;A=2程序转移到1A00H继续执行;A=4程序转移到1B00H继续执行;A=6程序转移到1C00H继续执行;A=8程序转移到1D00H继续执行;二、条件转移指令JZrel;A=0PCPC+2+relA≠0PC
PC+2(继续)1.判别累加器A为零转移2.判别累加器A非零转移JNZrel;A≠0PCPC+2+relA=0PC
PC+2(继续)3.比较转移指令(不相等则转移)(影响标志位)CJNEA,#data,rel;#data=A,PCPC+3,C0;A>#data,PCPC+3+rel,C0;A<#data,PCPC+3+rel,C1CJNEA,direct,rel;A>direct,C0CJNERi,#data,rel;Ri>#data,C0CJNE@Rj,#data,rel;(Rj)>#data,C0比较两操作数,若不相等,则转移。转向目标地址是将PC加3,再加相对地址rel构成。若前操作数>后者,0→C;否则,1→C。通过查询C,可以判断大小。4.循环转移指令(减一不为零则转移,继续循环)DJNZdirect,rel;功能与上面相同DJNZRi,rel;RiRi-1;若Ri=0则PCPC+2;若Ri≠0则PCPC+2+rel作用:将Ri(direct)中8位无符号数中的内容减1并送回Ri(direct)。若Ri(direct)不为0,则PC+2+rel形成新地址,送给PC,程序便转向指定的目标地址去执行。否则,结束循环,顺序执行程序。三、调子指令1.绝对调子指令ACALLaddr11; ; ; ; ; ; ;PCPC+2SPSP+1,堆栈地址加1(SP)PC7~0,PC低位数据送SPSPSP+1,堆栈地址加1(SP)PC15~8
保护返回地址PC10~0addr11,转移地址送PC机器码:a10a9a810001a7a6a5a4a3a2a1a0双字节指令,不影响标志位,在2KB地址范围内寻址,以调用子程序。页数决定于addr11的高3位,页内地址决定于addr11的低8位。高5位地址不变。2.长调子指令LCALLaddr16执行操作:PCPC+3SPSP+1(SP)PC7~0SPSP+1(SP)PC15~8PCaddr16三字节指令,在64KB地址范围内调用子程序。3.返主指令RETPC15~8(SP)SPSP-1PC7~0(SP)SPSP-1执行操作:调用子程序后必须返回主程序,因此,每种子程序的最后一条指令必须是返回指令RET。返回时完成将调子程序时压入堆栈的断点地址送回PC以恢复断点功能。堆栈遵循“后进先出”原则。4.中断返主指令RETI中断服务程序的最后一条指令后是中断返主指令。其恢复断点的操作与返回指令RET相同。此条指令前必须将相应的优先级状态触发器清0。作用:先将堆栈SP栈顶值送到PC(高8位断点地址)(同时SP-1→SP),再将SP送到PC(低8位断点地址)(同时SP-1→SP)。程序便返回断点地址去执行。且不影响标志位。即,具备RET功能的同时还打开中断。5.空操作NOP机器码:00;作用:仅产生1个机器周期的延迟,并将PC值加1。3.9伪指令一、伪指令概述标准的MCS-51汇编程序还定义了许多伪指令供用户使用,它是注释性的,多数伪指令汇编时不产生机器语言指令,没有对应的机器码,不令计算机做任何操作,不产生目标程序,不影响程序的执行。仅提供汇编控制信息。但伪指令对汇编程序将汇编语言源程序汇编成目标程序有用。二、定位伪指令
ORGm
用在一段源程序或数据块的前面,说明紧随在后面的程序段或数据块的起始地址。m为十进制或十六进制数。m指出该伪指令后的指令的汇编地址。在一个汇编语言源程序中允许使用多条定位伪指令,但其值应和前面生成的机器指令存放地址不重叠。例如:ORG1000H;程序从1000H开始START:MOV A,#20H;把立即数20H送入累加器A中;MOV B,#30H;把立即数30H送入寄存器B中;三、赋值伪指令EQU
[字符串X]EQU赋值项N用于定义数或汇编符号。使得在程序中,可以用符号来代表相应的数(符号,地址或数字)。即将赋值项N的值赋予字符串X。程序中凡出现该字符串X就等同于该赋值N,其值在整个程序中有效。赋值项N可以是常数、地址、标号或表达式。在使用时,必须先赋值后使用。“字符串X”与“标号”的区别是“字符串”后无冒号,而“标号”后面有冒号。例如:
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年大学环境工程(环境工程施工)试题及答案
- 高一地理(必修一)2026年上学期期中测试卷
- 2025年大学幼儿发展与健康管理(幼儿能力测试)试题及答案
- 2025年中职农业气象(农业气象观测)试题及答案
- 2025年高职汽车检测(汽车检测技术)试题及答案
- 2025年大学化学(工业化学基础)试题及答案
- 2025年中职切纸机操作(裁切精度控制与安全操作)试题及答案
- 2025年大学一年级(建筑装饰工程技术)施工工艺阶段测试题及答案
- 2025年大学食品贮藏与保鲜(贮藏保鲜技术)试题及答案
- 2025年大学大二(生态学)生态系统综合测试试题及答案
- GB/T 21387-2025供水系统用轴流式止回阀
- 合伙开餐饮合同范本
- DB37-T 5345-2025 《建筑工程流态固化土应用技术规程》
- 装表接电工艺培训
- 铝合金铸造生产车间布局设计方案
- 多层折弯板施工方案设计
- 2025年内蒙古公务员录用考试《行测》真题及答案解析
- 乡镇武装工作培训
- 3.3《立体图形的拼搭》(课件)-2025-2026学年一年级数学上册 西师大版
- GB/T 44851.15-2025道路车辆液化天然气(LNG)燃气系统部件第15部分:电容式液位计
- 社区年终工作汇报
评论
0/150
提交评论