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

下载本文档

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

文档简介

4单片机指令系统*4.1单片机指令系统4.2单片机寻址方式*4.3数据传送类指令4.4算术运算类指令4.5逻辑操作类指令4.6控制转移类指令*4.7位操作类指令4.1单片机指令系统4.1.1、单片机指令系统1、指令

①指令:规定计算机执行特定操作的命令。②指令的表达形式:机器码指令和汇编语言指令。机器码指令:用二进制代码表示的指令。汇编语言指令:用助计符来表示的指令。

2、单片机指令系统

单片机指令共有111条指令,使用了七种寻址方式,256个操作码,42种助记符,33种功能,51种基本操作。按字节数分类,单字节指令49条,双字节指令46条,三字节指令16条;按运算速度分类,单周期指令57条,双周期指令52条,四周期指令2条。按照功能分:数据传送类,算术运算、逻辑运算、控制转移和位处理指令。4.1.2指令格式[标号:]操作码助计符[目的操作数,][源操作数][;注释]①标号:指令的符号地址,它通常代表一条程序语句(助计符指令)的机器代码存储单元的地址。②操作码:表示指令进行何种操作,用助记符形式给出,助计符为英语单词的缩写。例如:ADD,MOV,PUSH,MOVX等。③操作数:指令操作的对象。操作数分为目的操作数和源操作数,任何指令的操作都是实现“从源操作数到目的操作数”。操作数可以是数字(地址、数据),也可以是标号或寄存器名。

④注释:对指令功能的说明。

Back

4.2单片机寻址方式4.2.1符号注释作用:描述单片机指令系统的功能。①Rn:选定当前寄存器区的寄存器R0~7。②@Ri:当前选中的工作寄存器组中可作为地址指针的两个工作寄存器R0和R1。③#data:8位常数,即包含在指令中的8位常数。④#data16:16位常数,即包含在指令中的16位常数。⑤direct:8位片内RAM单元(包括SFR)的直接地址。⑥addr11:11位目的地址,用于ACALL和AJMP指令中。⑦addr16:16位目的地址,用于LCALL和LJMP指令中。⑧rel:补码形式的8位地址偏移量,用于相对转移指令中。⑨bit:片内RAM或特殊功能寄存器的直接寻址位地址。⑩@:间接寻址方式中,表示间址寄存器的符号。11.():表示某单元中的内容。12.$:4.2.2单片机寻址方式1、立即寻址指令的操作数紧跟在指令操作码的后面,立即数就是存放在程序存储器中的常数,用“#”号表示。例如:ADDA,#34H;把立即数34H与累加器A2、直接寻址操作数项给出的是参加运算的操作数的地址。直接地址只能用来表示SFR、内部数据存储器以及位地址空间。其中,特殊功能寄存器和位地址空间只能用直接寻址方式来访问。例如:MOVA,3AH3、寄存器寻址寄存器寻址是对R0~R7、累加器A、通用寄存器B、地址寄存器DPTR和进位CY进行操作。其中R0~R7由操作码低3位的8种组合表示,ACC、B、DPTR及CY则隐含在操作码中。例如:MOVA,R24、寄存器间接寻址操作数所指定的寄存器中存放的不是操作数本身,而是操作数的地址。用于访问片内数据存储器或片外数据存储器()。在语法结构上要在其前加@。例如:MOVA,@R05、变址寻址(基址寄存器+变址间接寻址)

以16位寄存器DPTR(或PC)作为基址寄存器,累加器A作为变址寄存器。变址时,把两者的内容相加,得到的结果作为操作数的地址。这种方式常用于查表。变址寻址方式有两类:①以程序计数器当前值为基址,(当前PC值是指本条指令的首址),执行这类指令时,先使PC指向下一条指令地址,然后再与累加器内容相加,形成变址寻址的地址。格式:MOVCA,@A+PC;(PC)=(PC)+1;(A)=(A)+(PC)②以数据指针DPTR为基址,以数据指针内容和累加器内容相加形成变址地址。格式:MOVCA,@A+DPTR;(A)=(A)+(DPTR)

6、相对寻址

以程序计数器PC的当前值为基址,加上相对寻址指令的字节长度,再加上指令中给定的偏移量rel的值.(rel是8位带符号数,用二进制补码表示),形成相对寻址的地址。例如:JNZ75H;JNZrel;JNZPRO1;7、位寻址

位寻址是指对片内RAM的位寻址区和某些可进行位寻址的特殊功能寄存器中的位进行操作的寻址方式。例如:SETB3DH注意:位地址与字节地址在形式上是一样的,但有本质区别。

Back4.3数据传送类指令4.3.1片内数据传送类指令格式:MOV目的操作数,源操作数;

1、累加器为目的操作数的指令MOVA,Rn;寄存器寻址MOVA,direct;直接寻址MOVA,@R0;间接寻址MOVA,#data;立即寻址2、以寄存器Rn为目的操作数的指令MOVRn,AMOVRn,directMOVRn,#data

3、以直接地址为目的操作数的指令MOVdirect,AMOVdirect,RnMOVdirect,@RiMOVdirect,#dataMOVdirect,direct4、以间接地址为目的操作数的指令MOV@Ri,AMOV@Ri,directMOV@Ri,#date5、16位数据传送指令MOVDPTR,#data164.3.2外部数据传送类指令格式:MOVX目的操作数,源操作数;1、通过Ri间接寻址

MOVXA,@RiMOVX@Ri,A这两条指令适应外部0B~256B数据区与累加器A进行数据交换。2、通过DPTR间接寻址

MOVXA,@DPTRMOVX@DPTR,A这两条指令适应外部64KB数据区与累加器A进行数据交换。注意:外部数据与外部数据进行交换也只有通过累加器中转。4.3.3查表指令

MOVCA,@A+PCMOVCA,@A+DPTR注:这两条指令只适用于程序存储器查表操作。查阅学生成绩子程序:

MOVA,#5;学号MOVDPTR,#2000HORG1000HMOVCA,@A+DPTR;…PRO1:…RETPRO2:….RETORG2000HTABLE:DB80DB68DB70DB50DB90DB86……END

MOVA,#0;学号

ADDA,#3;对表格与查表指令差距进行修改1FFFH:MOVCA,@A+PCNOPNOP2000H:NOP2001H:DB80DB68DB70DB50DB90DB86……4.3.4堆栈操作指令

PUSHdirect;压栈(SP)+1SP;指针自动加1(direct)(SP):把直接地址单元中的内容压到以SP中内容作为地址的单元.

POPdirect;出栈((SP))direct把SP中内容作为地址,将该地址单元中的内容弹出给直接地址.(SP)-1SP;指针自动减14.3.5交换指令XCHA,RnXCHA,directXCHA,@RiXCHDA,@Ri;低4位互换SWAPA;A的低4位和高4位互换注意:数据的交换只有通过累加器A才能完成。

Back4.4算术运算类指令(+-*/INCDECDA)1、加法指令格式:ADDA,源操作数;功能:(A)+(源操作数)A功能:(A)+(源操作数)AADDA,RnADDA,directADDA,@RiADDA,#data2、带进位加法指令ADDCA,源操作数;功能:(A)+(源操作数)+(CY)AADDCA,RnADDCA,directADDCA,@RiADDCA,#data

用于多字节加法的高字节加法运算.以上指令影响PSW中的标志位.我们可以根据CY和OV中的内容判断无符号和有符号数加法的溢出情况.eg:将20H为首地址的连续两个单元中的16位数和以30H为首地址的连续两个单元中的16位数相加,结果放到以40H作为首地址的连续两个单元中:MOVA,20H;把被加数低8位放A中ADDA,30HMOV40H,A;低8位和放40H中.MOVA,21H;把被加数高8位放A中ADDA,31HJCOVERMOV41H,A;低8位和放40H中.…OVER:…3、带借位的减法指令式

SUBBA,RnSUBBA,directSUBBA,@RiSUBBA,#data注意事项:①减法运算在计算机中变成了补码运算。②减法指令只有带借位的,要实现不带借位的减法操作,须将PSW中的CY清0。③减法指令同样影响PSW中的位的值。MOVA,20HCLRCSUBBA,30HMOV40H,AMOVA,21HSUBBA,31HJBOV,OVERMOV41H,A4、乘法指令格式:MULAB;表示(A)×(B)这条指令的功能是把累加器A和寄存器B中两个无符号数相乘,所得16位积低字节存放在A中,高字节存放在B中,若乘积大于FFH,则OV置1,,CY总是为0。5、除法指令格式:DIVAB;(A)÷(B)这条指令的功能是进行A除B的运算,A和B的内容均为8位无符号整数。执行指令后,整数商存于A中,余数存于B中。执行本指令后,标志CY和OV均复位,只有当除数为0时,OV标志置1,说明除法溢出。

6、加1指令(不影响标志位:FFH+1=00H)

INCAINCRnINCdirectINC@Ri

INCDPTR7、减1指令(不影响标志位00H-1=FFH)

DECADECRnDECdirectDEC@Ri8、二十进制调整指令:DAA

Back

4.5逻辑操作类指令1、逻辑“与”指令

ANLA,RnANLA,directANLA,@RiANLA,#dataANLdirect,AANLdirect,#data2、逻辑“或”指令ORLA,Rn

ORLA,directORLA,@RiORLA,#dataORLdirect,AORLdirect,#data3、逻辑“异或”指令XRLA,Rn

XRLA,directXRLA,@RiXRLA,#dataXRLdirect,AXRLdirect,#data4、循环移位指令

RLA;左移;RRA;右移;RLCA;带进位左移;用于串行数据传送设计RRCA;带进位右移;用于串行数据传送设计5、取反指令

CPLA

6、清“0”指令

CLRA

Back4.6控制转移类指令1、无条件转移指令

LJMPaddr16;64KB范围之内跳转(PC)目=addr16

AJMPaddr11;2KB范围之内跳转(PC)起+2与PC目的高5位相同,保证在2KB范围

SJMPrel;256B范围内跳转(-128——127)(PC)起+2+rel=(PC)目在实际应用中,我将指令写成:LJMPLOOPAJMPLOOPSJMPLOOP

2、条件转移指令

JZrel;若A=0,则(PC)起+2+rel=(PC)目JNZrel;若A≠0,则PC+2+relCJNEA,direct,relCJNEA,#data,relCJNERn,#data,reLCJNE@Ri,#data,rel这四句语句执行过程是这样的:若“目的操作数”≠“原操作数”则转移到:(PC)起+3+rel=(PC)目;当“目的操作数”<“原操作数”;1=C,否则,0=CDJNZRn,rel;若Rn-1≠0,则PC+2+rel=PCDJNZdirect,rel3、间接转移指令

JMP@A+DPTR;(A)+(DPTR)=(PC)这一条散转指令,应用在程序存储器中。4、子程序调用和返回指令

LCALLadr16;(PC)+3=(PC)断点地址,断点地址自动压栈(系统的硬件自动完成)(SP)+1=(SP)先低8位PC0~7=((SP)),(SP)+1=(SP)后高8位PC8~15=((SP)),转移到addr16=(PC)目,执行子程序

ACALLaddr11;PC+2=PC,(SP)+1=(SP)PC7~0=((SP)),(SP)+1=(SP)PC15~8=((SP)),addr11=PC10~0压栈过程同上(机器码生成规则类似于AJMP)

RET;子程序返回断点地址自动出栈(硬件自动完成)先高8位((SP))=PC15~8,(SP)-1=(SP)后低8位

温馨提示

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

评论

0/150

提交评论