版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第2章单片机的指令系统
§2.1指令系统概述单片机所能执行的指令的集合称为指令系统。以助记符、符号地址、标号等书写程序的语言称为汇编语言。2.1.1指令分类〔1〕按功能分〔2〕按字长分〔3〕按执行时间分2.1.2指令格式[标号]:操作码[目的操作数],[源操作数];[注释]2.1.3指令字长和指令周期指令周期是指执行一条指令所需要的时间。
2.1.4符号约定⑴#data:8位立即数,取值在00H~0FFH之间。⑵#data16:16位立即数,取值在0000H~0FFFFH之间。⑶Rn:工作存放器,n=0~7,即工作存放器组中的一个工作存放器。⑷Ri:用于存放器间接寻址的工作存放器,i=0或1,即工作存放器R0和R1。⑸direct:8位直接地址,片内RAM地址00H~0FFH。⑹addr11:11位目的地址。⑺addr16:16位目的地址。⑻bit:位地址。⑼DPTR:双数据指针存放器⑽Pi:MCS-51单片机的I/O口,i=0~3。⑾@:存放器间接寻址前缀。⑿rel:8位带符号地址偏移量。⒀$:当前指令的地址。⒁(X):片内RAM单元X中的内容。⒂((X)):X中的内容所指向单元的内容。⒃←:左边的内容被右边的内容所取代。§2.2寻址方式2.2.1直接寻址
直接寻址:指令中直接给出操作数存储地址的寻址方式。1.寻址范围。 〔1〕片内RAM的低128单元。 〔2〕特殊功能存放器SFR。2.使用本卷须知 寻址特殊功能存放器SFR时,可以用直接地址,也可以用存放器名。 INCA;A内容加1,存放器寻址方式 INCACC ;直接寻址方式 INC0E0H ;直接寻址方式2.2.2立即寻址立即寻址:在指令中直接给出操作数的寻址方式。
例如:将十进制数200传送到累加器A中。 MOVA,#0C8H MOV A,#200 MOVA,#11001000B 2.2.3存放器寻址 存放器寻址:操作数存放于存放器中的寻址方式。 可用于存放器寻址的存放器有: 〔1〕四个工作存放器组中的工作存放器R0~R7,共32个工作存放器。 〔2〕特殊功能存放器,如A、B、DPTR、Pi等。2.2.4存放器间接寻址 存放器间接寻址:操作数的地址存放在存放器中的寻址方式。1.寻址范围〔1〕片内RAM256B地址单元。〔2〕对片外RAM64KB地址单元。 例如:将片内RAM55H单元的数据50H传送到累加器A中。指令如下: MOVR0,#55H MOVA,@R0;执行结果〔A〕=50H 例如:将片外RAM0500H单元的数据50H传送到累加器A中。指令如下: MOVDPTR,#0500H MOVXA,@DPTR2.使用本卷须知 〔1〕为区别存放器寻址方式,作为存放器间接寻址的存放器前面加@。 〔2〕存放器间接寻址方式不能用于对特殊功能存放器SFR的寻址。 例如:MOVR0,#0F0H; MOVA,@R0〔3〕堆栈操作指令也是间接寻址方式,它以堆栈指针SP作为间接寻址存放器。2.2.5变址寻址 变址寻址:以DPTR或PC中的数据为根本地址,以A中的数据为地址偏移量,基地址与地址偏移量之和作为被寻址数据地址的寻址方式。 查表操作指令为: MOVCA,@A+PC MOVCA,@A+DPTR 例如:将程序存储器050AH单元中的常数50H送到累加器A中。指令如下: MOVA,#0AH MOVDPTR,#0500H MOVCA,@A+DPTR 几点说明: 〔1〕变址寻址方式只能对程序存储器进展寻址,因此只能用于读取数据,而不能用于存放数据,它主要用于查表操作。 〔2〕变址寻址指令只有3条: MOVCA,@A+PC MOVCA,@A+DPTR JMP@A+DPTR2.2.6相对寻址 相对寻址:在执行程序的过程中,CPU寻找相对于当前程序计数器PC值的下一条指令地址的寻址方式。 例如:当程序状态字存放器PSW的最高位时,程序转移到标号为LOOP的语句执行。 ORG0000H SJMPMAIN ORG0030H MAIN:SETBC JCLOOP ………… LOOP:MOVA,#30H ……………2.2.7位寻址 位寻址:针对可位地址的片内RAM空间和可位寻址的特殊功能存放器进展寻址的方式。〔1〕内部RAM的位寻址区,共16个单元的128位,单元地址为20H~7FH,位地址的表示方法可以用直接位地址或单元地址加位的表示方法。 例如:将2FH单元的最高位的值传送到PSW.7。指令如下: MOVC,7FH MOVC,2FH.7〔2〕特殊功能存放器SFR中可位寻址的存放器共11个,其位地址在指令中有4种表达方式。 例如:对程序状态字PSW存放器辅助进位位AC进展操作 ①直接使用位地址:MOVC,0D6H ②位名称表示法:MOVC,AC ③单元地址加位的表示法:MOVC,0D0H.6 ④专用存放器符号加位的表示法: MOVC,PSW.6§2.3数据传送类指令2.3.1内部数据传送指令MOV<目的操作数>,<源操作数>;注释 〔1〕立即寻址数据传送指令 指令功能:把源操作数送指定单元或存放器,源操作数为立即数。 MOVA,#data MOVRn,#data MOV@Ri,#data MOVdirect,#data〔2〕片内RAM单元与累加器A间传送数据指令MOVA,RnMOVRn,AMOVA,@RiMOV@Ri,AMOVA,directMOVdirect,A〔3〕片内RAM单元间的数据传送指令 MOVdirect,Rn MOVRn,direct MOVdirect,@Ri MOV@Ri,direct MOVdirect2,direct1例2-1:将P1口读得的数据传送给P2口。指令如下: 直接寻址: MOV0A0H,90H 通过累加器A: MOVA,P1 MOVP2,A 直接传送: MOVP2,P1例如:将R0中的数传给R7。指令如下: MOVA,R0 MOVR7,A〔4〕十六位数据传送指令 MOVDPTR,#data16 例2-2:将数据1000H传送到数据指针DPTR中。指令如下: MOVDPTR,#1000H 例2-3:设内部RAM中〔30H〕=40H,〔40H〕=10H,P1口作输入口,〔P1〕=0CAH,程序如下: MOVR0,#30H MOVA,@R0 MOVR1,A MOVB,@R1 MOV@R1,P1 MOVP2,P1 执行后的结果是什么?2.3.2堆栈操作指令 PUSHdirect;SP←(SP)+1,(SP)←(direct) POPdirect;direct←((SP)),SP←(SP)-1例2-4:设〔30H〕=X,〔40H〕=Y,试用堆栈实现30H和40H单元中的数据交换。 MOVSP,#50H PUSH40H PUSH30H …………… POP40H POP30H2.3.3数据交换指令〔1〕整字节交换指令XCHA,Rn;〔A〕←→〔Rn〕XCHA,@Ri;〔A〕←→〔〔Ri〕〕XCHA,direct;〔A〕←→〔direct〕〔2〕低半字节交换指令XCHDA,@Ri;(ACC.3~ACC.0)←→((Ri.3)~〔Ri.0))〔3〕累加器高、低半字节交换指令SWAPA;(ACC.7~ACC.4)←→(ACC.3~ACC.0) 例2-6片内50H单元中有一个十进制数0~9,试编程把它变为相应的ASCII码并存入50H单元。2.3.4外部数据传送指令存储器〔1〕用数据指针DPTR作地址存放器的存放器间接寻址指令MOVXA,@DPTR;A←((DPTR))MOVX@DPTR,A;(DPTR)←〔A〕〔2〕用Ri作地址存放器的存放器间接寻址指令MOVXA,@Ri ;A←((Ri))MOVX@Ri,A ;(Ri)←〔A〕例2-6:假设外部RAM中,〔20FFH〕=30H,〔2100H〕=15H。执行以下指令后A中的内容是多少?MOVDPTR,#20FFHMOVA,@DPTRINCDPTRMOVA,@DPTR 例2-7:把片外RAM的70H单元中的一个数X,送到片外RAM的1010H单元。2.3.5查表操作指令MOVCA,@A+DPTR;A←((A〕+(DPTR))MOVCA,@A+PC;A←((A)+(PC))例2-8:累加器A中有一个0~9范围内的数,用以上查表指令编出能查出该数平方值的程序。设平方表表头地址为TABLE。〔1〕采用DPTR作为基址存放器MOVDPTR,#TABELMOVCA,@A+DPTRTABLE:DB0,1,4,9,16 DB25,36,49,64,81〔2〕采用PC作为基址存放器ORG1FFBH1FFBHADDA,#data;修正量1FFDHMOVCA,@A+PC ;查表1FFEHSJMP$2000HDB02001HDB12002HDB4…2021HDB81§2.4算术运算和逻辑指令2.4.1算术运算指令1.加法指令〔1〕不带进位的加法指令 ADDA,Rn ADDA,direct ADDA,@Ri ADDA,#data 例2-9:试分析8051执行如下指令后,累加器A和PSW各标志位的变化状况。 MOVA,#0CFH ADDA,#0A5H〔2〕带进位加法指令带进位加法运算指令常用于多字节加法运算。ADDCA,Rn; A←(A)+(Rn)+CyADDCA,direct; A←(A)+(direct)+CyADDCA,@Ri; A←(A)+((Ri))+CyADDCA,#data; A←(A)+data+Cy 例2-10:设〔A〕=0AAH,〔R0〕=55H,Cy=1执行如下指令后,PSW的值是多少? ADDCA,R02.带借位减法指令SUBBA,Rn ;A←(A)+(Rn)-CySUBBA,direct ;A←(A)-(direct)-CySUBBA,@Ri ;A←(A)-((Ri))-CySUBBA,#data ;A←(A)-data-Cy3.加1和减1指令〔1〕加1指令INCA ;A←〔A〕+1INCRn ;Rn←〔Rn〕+1INCdirect ;direct←〔direct〕+1INC@Ri ;〔Ri〕←〔〔Ri〕〕+1INCDPTR ;DPTR←〔DPTR〕+1〔2〕减1指令减1指令与加1指令使用方法一样。DECA;A←〔A〕-1DECRn;Rn←〔Rn〕-1DEC@Ri;〔Ri〕←〔〔Ri〕〕-1DECdirect ;direct←〔direct〕-14.乘法指令MULAB〔1〕进位标志位Cy总是清“0〞。〔2〕累加器A中的值影响奇偶标志位P。〔3〕当积大于255〔B中的内容不为0〕时,OV=1,否那么OV=0。5.除法指令DIVAB〔1〕对Cy和P标志的影响与乘法时一样。〔2〕当除数为0时,除法没有意义,OV=1,否那么OV=0。6.二~十进制调整指令DAA假设AC=1或A3~A0>9,那么A←〔A〕+06H;假设Cy=1或A7~A4>9,那么A←〔A〕+60H。 2.4.2逻辑运算指令 1.逻辑“与〞、“或〞、“异或〞指令逻辑 逻辑与指令: ANLA,Rn ;A←〔A〕∧〔Rn〕 ANLA,@Ri ;A←〔A〕∧〔〔Ri〕〕 ANLA,direct ;A←〔A〕∧〔direct〕 ANLA,#data ;A←〔A〕∧#data ANLdirect,A ;direct←〔direct〕∧〔A〕 ANLdirect,#data ;direct←〔direct〕∧#data 例2-12:计算立即数#35H和#78H相与的结果。 逻辑或指令: ORLA,Rn ;A←〔A〕∨〔Rn〕 ORLA,@Ri ;A←〔A〕∨〔〔Ri〕〕 ORLA,direct ;A←〔A〕∨〔direct〕 ORLA,#data ;A←〔A〕∨〔#data〕 ORLdirect,A ;direct←〔A〕∨〔Rn〕 ORLdirect,#data ;direct←(direct)∨(#data) 例2-13:使用AT89S51控制12位模/数转换器AD574A进展模/数转换,读取12位数据时要求先读取高8位,再读取低4位,而低4位数据在存放单元中又处在高4位,读取的原始数据如以下图所示。设读取数据的高8位存放在片内RAM的31H单元,低8位存放在片内RAM的30H单元。请将读取的数据按正确的12位数据存放。 逻辑异或指令: 异或指令是按位异或,即当参与异或运算的两个位同为“0〞或“1〞时,结果为“0〞;当参与异或运算的两个位不同时,结果为“1〞。 XRLA,Rn ;A←〔A〕〔Rn〕 XRLA,@Ri ;A←〔A〕〔〔Rn〕〕 XRLA,direct ;A←〔A〕〔direct〕 XRLA,#data ;A←〔A〕#data XRLdirect,A ;direct←〔direct〕〔A〕 XRLdirect,#data ;direct←〔direct〕#data 例2-14:计算立即数#35H和#78H相异或的结果。 2.移位指令 RLA ;累加器内容循环左移 RLCA ;累加器内容带Cy循环左移 RRA ;累加器循环右移 RRCA ;累加器内容带Cy循环右移 3.清零、取反指令 CLRA;A←0,累加器A清0,不影响标志位 CPLA;A←〔/A〕,累加器A的内容按位取反,不影响标志位§2.5控制转移和位操作指令 1.无条件转移指令 〔1〕长转移指令 LJMPaddr16;PC←addr16 〔2〕绝对转移指令 AJMPaddr11;PC←addr11 〔3〕短转移指令 SJMPrel;PC←〔PC〕+2 ;PC←〔PC〕+rel 〔4〕间接转移指令 JMP@A+DPTR;PC←〔A〕+〔DPTR〕 2.条件转移指令 〔1〕累加器判零转移指令 JZrel ;累加器A为0转移 JNZrel ;累加器A不为0转移
〔2〕比较转移指令 CJNE<目的操作数>,<源操作数>,rel CJNEA,#data,rel CJNEA,direct,rel CJNE@Ri,#data,rel CJNERn,#data,rel 如果目的操作数小于源操作数,那么Cy置1,否那么Cy清0。本指令执行后不影响任何操作数。 〔3〕减1条件转移指令 DJNZRn,rel ;〔Rn〕←〔Rn〕-1 ;假设〔Rn〕=0,那么PC←〔PC〕+2 ;假设〔Rn〕≠0,那么PC←〔PC〕+2+rel DJNZdirect,rel;direct←〔direct〕-1 ;假设〔direct〕=0,那么PC←〔PC〕+3 ;假设〔direct〕≠0,那么PC←〔PC〕+3+rel 例2-16:设R0、R1、R2的内容分别为01H、0AH、20H,执行以下程序: L1:…… L2:…… L3:…… DJNZR0,L1 DJNZR1,L2 DJNZR2,L3 3.子程序调用和返回指令 〔1〕调用指令 ①长调用指令 LCALLaddr16 ;PC←(PC)+3 ;SP←(SP)+1,(SP)←PC7~PC0 ;SP←(SP)+1,(SP)←PC15~PC8 ;PC←addr16
②绝对调用指令
ACALLaddr11 ;PC←(PC)+2 ;SP←(SP)+1,(SP)←PC7~PC0 ;SP←(SP)+1,(SP)←PC15~PC8 ;PC10~0←addr11〔2〕子程序返回指令RET RET ;PC15~PC8←〔SP〕 ;SP←〔SP〕-1 ;PC7~PC0←〔SP〕 ;SP←〔SP〕-1〔3〕中断报务程序返回指令 RETI ;PC15~PC8←〔SP〕 ;SP←〔SP〕-1 ;PC7
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《系统详细设计》课件
- 2024年度商用电梯金融服务与租赁合同
- 《电梯维保合同模板》
- 2024中国电信集团财务限公司招聘易考易错模拟试题(共500题)试卷后附参考答案
- 2024中国电信山东济宁分公司校园招聘易考易错模拟试题(共500题)试卷后附参考答案
- 2024中国核工业二三建设限公司社会招聘100人易考易错模拟试题(共500题)试卷后附参考答案
- 《铁路伤亡事故案例》课件
- 2024中国信科集团·武汉光迅科技股份限公司春招易考易错模拟试题(共500题)试卷后附参考答案
- 2024中冶建工集团限公司校园招聘114人易考易错模拟试题(共500题)试卷后附参考答案
- 2024上海联通校园招聘270人易考易错模拟试题(共500题)试卷后附参考答案
- DB31∕T 875-2015 人身损害受伤人员休息期、营养期、护理期评定准则
- 07版监理收费标准插入法计算器
- 重庆市七年级数学上学期期中试题新人教版
- 四年级下语文课本剧16猎人海力布_
- 国际象棋战术组合技巧新版马头
- 吉林省长春市东北师大附中2019-2020上学期——九年级数学大练习题试卷
- 废旧物的“新生命” 课件
- 第三节食用菌保鲜与加工技术PPT课件
- 李宁创业案例分析PPT课件
- MSA-测量系统分析-GRR
- 介入术后出血风险预后及处理课件
评论
0/150
提交评论