学习单片机的指令系统教学课件_第1页
学习单片机的指令系统教学课件_第2页
学习单片机的指令系统教学课件_第3页
学习单片机的指令系统教学课件_第4页
学习单片机的指令系统教学课件_第5页
已阅读5页,还剩121页未读 继续免费阅读

下载本文档

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

文档简介

第2章单片机的指令系统

第2章单片机的指令系统

1§2.1指令系统概述单片机所能执行的指令的集合称为指令系统。以助记符、符号地址、标号等书写程序的语言称为汇编语言。2.1.1指令分类〔1〕按功能分〔2〕按字长分〔3〕按执行时间分§2.1指令系统概述单片机所能执行的指令的集合称为指令系统22.1.2指令格式[标号]:操作码[目的操作数],[源操作数];[注释]2.1.3指令字长和指令周期指令周期是指执行一条指令所需要的时间。

2.1.4符号约定⑴#data:8位立即数,取值在00H~0FFH之间。⑵#data16:16位立即数,取值在0000H~0FFFFH之间。2.1.2指令格式3⑶Rn:工作存放器,n=0~7,即工作存放器组中的一个工作存放器。⑷Ri:用于存放器间接寻址的工作存放器,i=0或1,即工作存放器R0和R1。⑸direct:8位直接地址,片内RAM地址00H~0FFH。⑹addr11:11位目的地址。⑺addr16:16位目的地址。⑻bit:位地址。⑶Rn:工作存放器,n=0~7,即工作存放器组中的一个工作4⑼DPTR:双数据指针存放器⑽Pi:MCS-51单片机的I/O口,i=0~3。⑾@:存放器间接寻址前缀。⑿rel:8位带符号地址偏移量。⒀$:当前指令的地址。⒁(X):片内RAM单元X中的内容。⒂((X)):X中的内容所指向单元的内容。⒃←:左边的内容被右边的内容所取代。⑼DPTR:双数据指针存放器5§2.2寻址方式2.2.1直接寻址

直接寻址:指令中直接给出操作数存储地址的寻址方式。§2.2寻址方式2.2.1直接寻址61.寻址范围。 〔1〕片内RAM的低128单元。 〔2〕特殊功能存放器SFR。2.使用本卷须知 寻址特殊功能存放器SFR时,可以用直接地址,也可以用存放器名。 INCA;A内容加1,存放器寻址方式 INCACC ;直接寻址方式 INC0E0H ;直接寻址方式1.寻址范围。72.2.2立即寻址立即寻址:在指令中直接给出操作数的寻址方式。

例如:将十进制数200传送到累加器A中。 MOVA,#0C8H MOV A,#200 MOVA,#11001000B 2.2.2立即寻址82.2.3存放器寻址 存放器寻址:操作数存放于存放器中的寻址方式。 可用于存放器寻址的存放器有: 〔1〕四个工作存放器组中的工作存放器R0~R7,共32个工作存放器。 〔2〕特殊功能存放器,如A、B、DPTR、Pi等。2.2.3存放器寻址92.2.4存放器间接寻址 存放器间接寻址:操作数的地址存放在存放器中的寻址方式。1.寻址范围〔1〕片内RAM256B地址单元。〔2〕对片外RAM64KB地址单元。 例如:将片内RAM55H单元的数据50H传送到累加器A中。指令如下: MOVR0,#55H MOVA,@R0;执行结果〔A〕=50H2.2.4存放器间接寻址10 例如:将片外RAM0500H单元的数据50H传送到累加器A中。指令如下: MOVDPTR,#0500H MOVXA,@DPTR 例如:将片外RAM0500H单元的数据50H传送到累加器112.使用本卷须知 〔1〕为区别存放器寻址方式,作为存放器间接寻址的存放器前面加@。 〔2〕存放器间接寻址方式不能用于对特殊功能存放器SFR的寻址。 例如:MOVR0,#0F0H; MOVA,@R0〔3〕堆栈操作指令也是间接寻址方式,它以堆栈指针SP作为间接寻址存放器。2.使用本卷须知122.2.5变址寻址 变址寻址:以DPTR或PC中的数据为根本地址,以A中的数据为地址偏移量,基地址与地址偏移量之和作为被寻址数据地址的寻址方式。 查表操作指令为: MOVCA,@A+PC MOVCA,@A+DPTR2.2.5变址寻址13学习单片机的指令系统教学课件14 例如:将程序存储器050AH单元中的常数50H送到累加器A中。指令如下: MOVA,#0AH MOVDPTR,#0500H MOVCA,@A+DPTR 例如:将程序存储器050AH单元中的常数50H送到累加器A15 几点说明: 〔1〕变址寻址方式只能对程序存储器进展寻址,因此只能用于读取数据,而不能用于存放数据,它主要用于查表操作。 〔2〕变址寻址指令只有3条: MOVCA,@A+PC MOVCA,@A+DPTR JMP@A+DPTR 几点说明:162.2.6相对寻址 相对寻址:在执行程序的过程中,CPU寻找相对于当前程序计数器PC值的下一条指令地址的寻址方式。2.2.6相对寻址17 例如:当程序状态字存放器PSW的最高位时,程序转移到标号为LOOP的语句执行。 ORG0000H SJMPMAIN ORG0030H MAIN:SETBC JCLOOP ………… LOOP:MOVA,#30H …………… 例如:当程序状态字存放器PSW的最高位时,程序转移到标号为182.2.7位寻址 位寻址:针对可位地址的片内RAM空间和可位寻址的特殊功能存放器进展寻址的方式。〔1〕内部RAM的位寻址区,共16个单元的128位,单元地址为20H~7FH,位地址的表示方法可以用直接位地址或单元地址加位的表示方法。 例如:将2FH单元的最高位的值传送到PSW.7。指令如下: MOVC,7FH MOVC,2FH.72.2.7位寻址19〔2〕特殊功能存放器SFR中可位寻址的存放器共11个,其位地址在指令中有4种表达方式。 例如:对程序状态字PSW存放器辅助进位位AC进展操作 ①直接使用位地址:MOVC,0D6H ②位名称表示法:MOVC,AC ③单元地址加位的表示法:MOVC,0D0H.6 ④专用存放器符号加位的表示法: MOVC,PSW.6〔2〕特殊功能存放器SFR中可位寻址的存放器共11个,其位地20§2.3数据传送类指令2.3.1内部数据传送指令MOV<目的操作数>,<源操作数>;注释 〔1〕立即寻址数据传送指令 指令功能:把源操作数送指定单元或存放器,源操作数为立即数。 MOVA,#data MOVRn,#data MOV@Ri,#data MOVdirect,#data§2.3数据传送类指令2.3.1内部数据传送指令21〔2〕片内RAM单元与累加器A间传送数据指令MOVA,RnMOVRn,AMOVA,@RiMOV@Ri,AMOVA,directMOVdirect,A〔2〕片内RAM单元与累加器A间传送数据指令22〔3〕片内RAM单元间的数据传送指令 MOVdirect,Rn MOVRn,direct MOVdirect,@Ri MOV@Ri,direct MOVdirect2,direct1〔3〕片内RAM单元间的数据传送指令23例2-1:将P1口读得的数据传送给P2口。指令如下: 直接寻址: MOV0A0H,90H 通过累加器A: MOVA,P1 MOVP2,A 直接传送: MOVP2,P1例2-1:将P1口读得的数据传送给P2口。24例如:将R0中的数传给R7。指令如下: MOVA,R0 MOVR7,A〔4〕十六位数据传送指令 MOVDPTR,#data16 例2-2:将数据1000H传送到数据指针DPTR中。指令如下: MOVDPTR,#1000H例如:将R0中的数传给R7。指令如下:25 例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:设内部RAM中〔30H〕=40H,〔40H〕262.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.2堆栈操作指令272.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.3.3数据交换指令28 例2-6片内50H单元中有一个十进制数0~9,试编程把它变为相应的ASCII码并存入50H单元。 例2-6片内50H单元中有一个十进制数0~9,试编程把292.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.3.4外部数据传送指令存储器30例2-6:假设外部RAM中,〔20FFH〕=30H,〔2100H〕=15H。执行以下指令后A中的内容是多少?MOVDPTR,#20FFHMOVA,@DPTRINCDPTRMOVA,@DPTR例2-6:假设外部RAM中,〔20FFH〕=30H,〔21031 例2-7:把片外RAM的70H单元中的一个数X,送到片外RAM的1010H单元。2.3.5查表操作指令MOVCA,@A+DPTR;A←((A〕+(DPTR))MOVCA,@A+PC;A←((A)+(PC)) 例2-7:把片外RAM的70H单元中的一个数X,送到片外32例2-8:累加器A中有一个0~9范围内的数,用以上查表指令编出能查出该数平方值的程序。设平方表表头地址为TABLE。〔1〕采用DPTR作为基址存放器MOVDPTR,#TABELMOVCA,@A+DPTRTABLE:DB0,1,4,9,16 DB25,36,49,64,81例2-8:累加器A中有一个0~9范围内的数,用以上查表指令编33〔2〕采用PC作为基址存放器ORG1FFBH1FFBHADDA,#data;修正量1FFDHMOVCA,@A+PC ;查表1FFEHSJMP$2000HDB02001HDB12002HDB4…2021HDB81〔2〕采用PC作为基址存放器34§2.4算术运算和逻辑指令2.4.1算术运算指令§2.4算术运算和逻辑指令2.4.1算术运算指令351.加法指令〔1〕不带进位的加法指令 ADDA,Rn ADDA,direct ADDA,@Ri ADDA,#data 例2-9:试分析8051执行如下指令后,累加器A和PSW各标志位的变化状况。 MOVA,#0CFH ADDA,#0A5H1.加法指令36〔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,R0〔2〕带进位加法指令372.带借位减法指令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〕+12.带借位减法指令38〔2〕减1指令减1指令与加1指令使用方法一样。DECA;A←〔A〕-1DECRn;Rn←〔Rn〕-1DEC@Ri;〔Ri〕←〔〔Ri〕〕-1DECdirect ;direct←〔direct〕-1〔2〕减1指令394.乘法指令MULAB〔1〕进位标志位Cy总是清“0〞。〔2〕累加器A中的值影响奇偶标志位P。〔3〕当积大于255〔B中的内容不为0〕时,OV=1,否那么OV=0。4.乘法指令405.除法指令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。5.除法指令41 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相与的结果。 2.4.2逻辑运算指令42 逻辑或指令: 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) 逻辑或指令:43 例2-13:使用AT89S51控制12位模/数转换器AD574A进展模/数转换,读取12位数据时要求先读取高8位,再读取低4位,而低4位数据在存放单元中又处在高4位,读取的原始数据如以下图所示。设读取数据的高8位存放在片内RAM的31H单元,低8位存放在片内RAM的30H单元。请将读取的数据按正确的12位数据存放。 例2-13:使用AT89S51控制12位模/数转换器AD44 逻辑异或指令: 异或指令是按位异或,即当参与异或运算的两个位同为“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相异或的结果。 逻辑异或指令:45 2.移位指令 RLA ;累加器内容循环左移 RLCA ;累加器内容带Cy循环左移 RRA ;累加器循环右移 RRCA ;累加器内容带Cy循环右移 2.移位指令46学习单片机的指令系统教学课件47 3.清零、取反指令 CLRA;A←0,累加器A清0,不影响标志位 CPLA;A←〔/A〕,累加器A的内容按位取反,不影响标志位 3.清零、取反指令48§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.5控制转移和位操作指令 1.无条件转移指令49 2.条件转移指令 〔1〕累加器判零转移指令 JZrel ;累加器A为0转移 JNZrel ;累加器A不为0转移

2.条件转移指令50〔2〕比较转移指令 CJNE<目的操作数>,<源操作数>,rel CJNEA,#data,rel CJNEA,direct,rel CJNE@Ri,#data,rel CJNERn,#data,rel 如果目的操作数小于源操作数,那么Cy置1,否那么Cy清0。本指令执行后不影响任何操作数。〔2〕比较转移指令51 〔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 〔3〕减1条件转移指令52 例2-16:设R0、R1、R2的内容分别为01H、0AH、20H,执行以下程序: L1:…… L2:…… L3:…… DJNZR0,L1 DJNZR1,L2 DJNZR2,L3 例2-16:设R0、R1、R2的内容分别为01H、0A53 3.子程序调用和返回指令 〔1〕调用指令 ①长调用指令 LCALLaddr16 ;PC←(PC)+3 ;SP←(SP)+1,(SP)←PC7~PC0 ;SP←(SP)+1,(SP)←PC15~PC8 ;PC←addr16

3.子程序调用和返回指令54②绝对调用指令

ACALLaddr11 ;PC←(PC)+2 ;SP←(SP)+1,(SP)←PC7~PC0 ;SP←(SP)+1,(SP)←PC15~PC8 ;PC10~0←addr11②绝对调用指令55〔2〕子程序返回指令RET RET ;PC15~PC8←〔SP〕 ;SP←〔SP〕-1 ;PC7~PC0←〔SP〕 ;SP←〔SP〕-1〔2〕子程序返回指令RET56〔3〕中断报务程序返回指令 RETI ;PC15~PC8←〔SP〕 ;SP←〔SP〕-1 ;PC7~PC0←〔SP〕 ;SP←〔SP〕-1 4.空操作指令 NOP ;〔PC〕←〔PC〕+1〔3〕中断报务程序返回指令572.5.2位操作指令 1.位传送指令 MOVC,bit ;C←〔bit〕 MOVbit,C ;bit←〔C〕

2.5.2位操作指令582.位变量修改指令 CLRC ;C←0 CLRbit ;bit←0 SETBC ;C←1 SETBbit ;bit←1 CPLC ;C←〔/C〕 CPLbit ;bit←〔/bit〕2.位变量修改指令59 3.位逻辑运算指令 ANLC,bit;C←〔C〕∧bit,位与 ANLC,/bit;C←〔C〕∧/bit,位与 ORLC,bit;C←〔C〕∨bit,位或 ORLC,/bit;C←〔〕∨/bit,位或

3.位逻辑运算指令604.位控制转移指令 〔1〕判断Cy转移指令 JCrel ;假设Cy=1,那么PC←(PC)+2+rel ;假设Cy=0,那么PC←(PC)+2 JNCrel;假设Cy=0,那么PC←(PC)+2+rel ;假设Cy=1,那么PC←(PC)+24.位控制转移指令61 〔2〕判断位直接寻址位转移指令JBbit,rel;假设〔bit〕=1,那么PC←〔PC〕+3+rel ;假设〔bit〕=0,那么PC←〔PC〕+3JNBbit,rel;假设〔bit〕=0,那么PC←〔PC〕+3+rel ;假设〔bit〕=1,那么PC←〔PC〕+3JBCbit,rel;假设〔bit〕=0,那么PC←〔PC〕+3 ;假设〔bit〕=1,那么PC←〔PC〕+3+rel,〔bit〕←0 〔2〕判断位直接寻址位转移指令62 例2-17:比较片内RAM30H和31H单元中的两个无符号数的大小,大数存放在31H单元,小数存放在30H单元,两个数相等时,位寻址区的127位置“1〞。 例2-17:比较片内RAM30H和31H单元中的两个无63第2章单片机的指令系统

第2章单片机的指令系统

64§2.1指令系统概述单片机所能执行的指令的集合称为指令系统。以助记符、符号地址、标号等书写程序的语言称为汇编语言。2.1.1指令分类〔1〕按功能分〔2〕按字长分〔3〕按执行时间分§2.1指令系统概述单片机所能执行的指令的集合称为指令系统652.1.2指令格式[标号]:操作码[目的操作数],[源操作数];[注释]2.1.3指令字长和指令周期指令周期是指执行一条指令所需要的时间。

2.1.4符号约定⑴#data:8位立即数,取值在00H~0FFH之间。⑵#data16:16位立即数,取值在0000H~0FFFFH之间。2.1.2指令格式66⑶Rn:工作存放器,n=0~7,即工作存放器组中的一个工作存放器。⑷Ri:用于存放器间接寻址的工作存放器,i=0或1,即工作存放器R0和R1。⑸direct:8位直接地址,片内RAM地址00H~0FFH。⑹addr11:11位目的地址。⑺addr16:16位目的地址。⑻bit:位地址。⑶Rn:工作存放器,n=0~7,即工作存放器组中的一个工作67⑼DPTR:双数据指针存放器⑽Pi:MCS-51单片机的I/O口,i=0~3。⑾@:存放器间接寻址前缀。⑿rel:8位带符号地址偏移量。⒀$:当前指令的地址。⒁(X):片内RAM单元X中的内容。⒂((X)):X中的内容所指向单元的内容。⒃←:左边的内容被右边的内容所取代。⑼DPTR:双数据指针存放器68§2.2寻址方式2.2.1直接寻址

直接寻址:指令中直接给出操作数存储地址的寻址方式。§2.2寻址方式2.2.1直接寻址691.寻址范围。 〔1〕片内RAM的低128单元。 〔2〕特殊功能存放器SFR。2.使用本卷须知 寻址特殊功能存放器SFR时,可以用直接地址,也可以用存放器名。 INCA;A内容加1,存放器寻址方式 INCACC ;直接寻址方式 INC0E0H ;直接寻址方式1.寻址范围。702.2.2立即寻址立即寻址:在指令中直接给出操作数的寻址方式。

例如:将十进制数200传送到累加器A中。 MOVA,#0C8H MOV A,#200 MOVA,#11001000B 2.2.2立即寻址712.2.3存放器寻址 存放器寻址:操作数存放于存放器中的寻址方式。 可用于存放器寻址的存放器有: 〔1〕四个工作存放器组中的工作存放器R0~R7,共32个工作存放器。 〔2〕特殊功能存放器,如A、B、DPTR、Pi等。2.2.3存放器寻址722.2.4存放器间接寻址 存放器间接寻址:操作数的地址存放在存放器中的寻址方式。1.寻址范围〔1〕片内RAM256B地址单元。〔2〕对片外RAM64KB地址单元。 例如:将片内RAM55H单元的数据50H传送到累加器A中。指令如下: MOVR0,#55H MOVA,@R0;执行结果〔A〕=50H2.2.4存放器间接寻址73 例如:将片外RAM0500H单元的数据50H传送到累加器A中。指令如下: MOVDPTR,#0500H MOVXA,@DPTR 例如:将片外RAM0500H单元的数据50H传送到累加器742.使用本卷须知 〔1〕为区别存放器寻址方式,作为存放器间接寻址的存放器前面加@。 〔2〕存放器间接寻址方式不能用于对特殊功能存放器SFR的寻址。 例如:MOVR0,#0F0H; MOVA,@R0〔3〕堆栈操作指令也是间接寻址方式,它以堆栈指针SP作为间接寻址存放器。2.使用本卷须知752.2.5变址寻址 变址寻址:以DPTR或PC中的数据为根本地址,以A中的数据为地址偏移量,基地址与地址偏移量之和作为被寻址数据地址的寻址方式。 查表操作指令为: MOVCA,@A+PC MOVCA,@A+DPTR2.2.5变址寻址76学习单片机的指令系统教学课件77 例如:将程序存储器050AH单元中的常数50H送到累加器A中。指令如下: MOVA,#0AH MOVDPTR,#0500H MOVCA,@A+DPTR 例如:将程序存储器050AH单元中的常数50H送到累加器A78 几点说明: 〔1〕变址寻址方式只能对程序存储器进展寻址,因此只能用于读取数据,而不能用于存放数据,它主要用于查表操作。 〔2〕变址寻址指令只有3条: MOVCA,@A+PC MOVCA,@A+DPTR JMP@A+DPTR 几点说明:792.2.6相对寻址 相对寻址:在执行程序的过程中,CPU寻找相对于当前程序计数器PC值的下一条指令地址的寻址方式。2.2.6相对寻址80 例如:当程序状态字存放器PSW的最高位时,程序转移到标号为LOOP的语句执行。 ORG0000H SJMPMAIN ORG0030H MAIN:SETBC JCLOOP ………… LOOP:MOVA,#30H …………… 例如:当程序状态字存放器PSW的最高位时,程序转移到标号为812.2.7位寻址 位寻址:针对可位地址的片内RAM空间和可位寻址的特殊功能存放器进展寻址的方式。〔1〕内部RAM的位寻址区,共16个单元的128位,单元地址为20H~7FH,位地址的表示方法可以用直接位地址或单元地址加位的表示方法。 例如:将2FH单元的最高位的值传送到PSW.7。指令如下: MOVC,7FH MOVC,2FH.72.2.7位寻址82〔2〕特殊功能存放器SFR中可位寻址的存放器共11个,其位地址在指令中有4种表达方式。 例如:对程序状态字PSW存放器辅助进位位AC进展操作 ①直接使用位地址:MOVC,0D6H ②位名称表示法:MOVC,AC ③单元地址加位的表示法:MOVC,0D0H.6 ④专用存放器符号加位的表示法: MOVC,PSW.6〔2〕特殊功能存放器SFR中可位寻址的存放器共11个,其位地83§2.3数据传送类指令2.3.1内部数据传送指令MOV<目的操作数>,<源操作数>;注释 〔1〕立即寻址数据传送指令 指令功能:把源操作数送指定单元或存放器,源操作数为立即数。 MOVA,#data MOVRn,#data MOV@Ri,#data MOVdirect,#data§2.3数据传送类指令2.3.1内部数据传送指令84〔2〕片内RAM单元与累加器A间传送数据指令MOVA,RnMOVRn,AMOVA,@RiMOV@Ri,AMOVA,directMOVdirect,A〔2〕片内RAM单元与累加器A间传送数据指令85〔3〕片内RAM单元间的数据传送指令 MOVdirect,Rn MOVRn,direct MOVdirect,@Ri MOV@Ri,direct MOVdirect2,direct1〔3〕片内RAM单元间的数据传送指令86例2-1:将P1口读得的数据传送给P2口。指令如下: 直接寻址: MOV0A0H,90H 通过累加器A: MOVA,P1 MOVP2,A 直接传送: MOVP2,P1例2-1:将P1口读得的数据传送给P2口。87例如:将R0中的数传给R7。指令如下: MOVA,R0 MOVR7,A〔4〕十六位数据传送指令 MOVDPTR,#data16 例2-2:将数据1000H传送到数据指针DPTR中。指令如下: MOVDPTR,#1000H例如:将R0中的数传给R7。指令如下:88 例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:设内部RAM中〔30H〕=40H,〔40H〕892.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.2堆栈操作指令902.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.3.3数据交换指令91 例2-6片内50H单元中有一个十进制数0~9,试编程把它变为相应的ASCII码并存入50H单元。 例2-6片内50H单元中有一个十进制数0~9,试编程把922.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.3.4外部数据传送指令存储器93例2-6:假设外部RAM中,〔20FFH〕=30H,〔2100H〕=15H。执行以下指令后A中的内容是多少?MOVDPTR,#20FFHMOVA,@DPTRINCDPTRMOVA,@DPTR例2-6:假设外部RAM中,〔20FFH〕=30H,〔21094 例2-7:把片外RAM的70H单元中的一个数X,送到片外RAM的1010H单元。2.3.5查表操作指令MOVCA,@A+DPTR;A←((A〕+(DPTR))MOVCA,@A+PC;A←((A)+(PC)) 例2-7:把片外RAM的70H单元中的一个数X,送到片外95例2-8:累加器A中有一个0~9范围内的数,用以上查表指令编出能查出该数平方值的程序。设平方表表头地址为TABLE。〔1〕采用DPTR作为基址存放器MOVDPTR,#TABELMOVCA,@A+DPTRTABLE:DB0,1,4,9,16 DB25,36,49,64,81例2-8:累加器A中有一个0~9范围内的数,用以上查表指令编96〔2〕采用PC作为基址存放器ORG1FFBH1FFBHADDA,#data;修正量1FFDHMOVCA,@A+PC ;查表1FFEHSJMP$2000HDB02001HDB12002HDB4…2021HDB81〔2〕采用PC作为基址存放器97§2.4算术运算和逻辑指令2.4.1算术运算指令§2.4算术运算和逻辑指令2.4.1算术运算指令981.加法指令〔1〕不带进位的加法指令 ADDA,Rn ADDA,direct ADDA,@Ri ADDA,#data 例2-9:试分析8051执行如下指令后,累加器A和PSW各标志位的变化状况。 MOVA,#0CFH ADDA,#0A5H1.加法指令99〔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,R0〔2〕带进位加法指令1002.带借位减法指令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〕+12.带借位减法指令101〔2〕减1指令减1指令与加1指令使用方法一样。DECA;A←〔A〕-1DECRn;Rn←〔Rn〕-1DEC@Ri;〔Ri〕←〔〔Ri〕〕-1DECdirect ;direct←〔direct〕-1〔2〕减1指令1024.乘法指令MULAB〔1〕进位标志位Cy总是清“0〞。〔2〕累加器A中的值影响奇偶标志位P。〔3〕当积大于255〔B中的内容不为0〕时,OV=1,否那么OV=0。4.乘法指令1035.除法指令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。5.除法指令104 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相与的结果。 2.4.2逻辑运算指令105 逻辑或指令: 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) 逻辑或指令:106 例2-13:使用AT89S51控制12位模/数转换器AD574A进展模/数转换,读取12位数据时要求先读取高8位,再读取低4位,而低4位数据在存放单元中又处在高4位,读取的原始数据如以下图所示。设读取数据的高8位存放在片内RAM的31H单元,低8位存放在片内RAM的30H单元。请将读取的数据按正确的12位数据存放。 例2-13:使用AT89S51控制12位模/数转换器AD107 逻辑异或指令: 异或指令是按位异或,即当参与异或运算的两个位同为“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相异或的结果。 逻辑异或指令:108 2.移位指令 RLA ;累加器内容循环左移 RLCA ;累加器内容带Cy循环左移 RRA ;累加器循环右移 RRCA ;累加器内容带Cy循环右移 2.移位指令109学习单片机的指令系统教学课件110 3.清零、取反指令 CLRA;A←0,累加器A清0,不影响标志位 CPLA;A←〔/A〕,累加器A的内容按位取反,不影响标志位 3.清零、取反指令111§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.5控制转移和位操作指令 1.无条件转移指令112 2.条件转移指令 〔1〕累加器判零转移指令 JZrel ;累加器A为0转移 JNZrel ;累加器A不为0转移

2.条件转移指令113〔2〕比较转移指令 CJNE<目的操作数>,<源操作数>,rel

温馨提示

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

评论

0/150

提交评论