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

下载本文档

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

文档简介

1、第三章 80c51单片机指令系统内容提要:3-1 汇编语言与指令系统简介汇编语言与指令系统简介3-2 数据传送类指令数据传送类指令3-3 算术运算类指令算术运算类指令3-4 逻辑运算类指令逻辑运算类指令3-5 控制转移类指令控制转移类指令3-6 位操作类指令位操作类指令高级语言高级语言:3.1 指令的格式及寻址方式 一、汇编语言程序设计的意义一、汇编语言程序设计的意义什么是程序?什么是程序?完成某项特定任务的指令的集合。完成某项特定任务的指令的集合。计算机按程序一条一条地依次执行指令,从而完成指定任务。计算机按程序一条一条地依次执行指令,从而完成指定任务。要让计算机完成各项任务,就应设计各种程

2、序。要让计算机完成各项任务,就应设计各种程序。 汇编语言汇编语言:机器语言机器语言:程序设计语言:程序设计语言:用二进制代码表示指令和数据。用二进制代码表示指令和数据。用助记符表示指令操作功能,用标号表示操作对象。用助记符表示指令操作功能,用标号表示操作对象。独立于机器独立于机器,面向过程面向过程,接近自然语言和数学表达式接近自然语言和数学表达式.汇编语言程序的每一条语句都与计算机的某一条指令对应,所汇编语言程序的每一条语句都与计算机的某一条指令对应,所以必需熟悉指令系统。以必需熟悉指令系统。指令指令 = 操作码操作码 + 操作数操作数操作码操作码表示了该指令所能执行的操作功能。表示了该指令所

3、能执行的操作功能。操作数操作数表示参加操作的数的本身或操作数所在的地址。表示参加操作的数的本身或操作数所在的地址。二、二、mcs-51指令格式:指令格式:标号:标号:操作码助记符操作码助记符 操作数操作数;注释;注释 标号是程序员根据编程需要给指令设定的符号地址,可标号是程序员根据编程需要给指令设定的符号地址,可有可无;标号由有可无;标号由18个字符组成,第一个字符必须是英文字,个字符组成,第一个字符必须是英文字,不能是数字或其它符号;标号后必须用冒号。不能是数字或其它符号;标号后必须用冒号。 操作码表示指令的操作种类,如操作码表示指令的操作种类,如mov表示数据传送操表示数据传送操作,作,a

4、dd表示加法操作等。表示加法操作等。 操作数或操作数地址表示参加运算的数据或数据的有操作数或操作数地址表示参加运算的数据或数据的有效地址。操作数一般有以下几种形式:没有操作数项,操效地址。操作数一般有以下几种形式:没有操作数项,操作数隐含在操作码中,如作数隐含在操作码中,如ret指令;只有一个操作数,如指令;只有一个操作数,如cpl a指令;有两个操作数,如指令;有两个操作数,如mov a,#00h指令,操作指令,操作数 之 间 以 逗 号 相 隔 ; 有 三 个 操 作 数 , 如数 之 间 以 逗 号 相 隔 ; 有 三 个 操 作 数 , 如 c j n e a,#00h,next指令,

5、操作数之间也以逗号相隔。指令,操作数之间也以逗号相隔。 注释是对指令的解释说明,用以提高程序的可读性;注释是对指令的解释说明,用以提高程序的可读性;注释前必须加分号。注释前必须加分号。 mcs-51mcs-51系列单片机的指令系统简介系列单片机的指令系统简介111111条条指令,共分指令,共分五大类五大类:数据传送类;(数据传送类;(29条)条)算术运算类;(算术运算类;(24条)条)逻辑运算类;(逻辑运算类;(24条)条)控制转移类;(控制转移类;(17条)条) 位操作类。(位操作类。(17条)条) 指令中操作数的描述符号指令中操作数的描述符号: rn 工作寄存器工作寄存器r0 r7 ri

6、间接寻址寄存器间接寻址寄存器r0、r1 direct 直接地址,包括内部直接地址,包括内部128b ram单元地址、单元地址、 26个个sfr地址。地址。 #data 8位常数位常数 #data 16 16位常数位常数 addr 16 16位目的地址位目的地址 addr 11 11位目的地址位目的地址 rel 8位带符号的偏移地址位带符号的偏移地址 dptr 16位外部数据指针寄存器位外部数据指针寄存器 bit 可直接位寻址的位可直接位寻址的位 a 累加器累加器 b 寄存器寄存器b c 进、借位标志位,或位累加器进、借位标志位,或位累加器 间接寄存器或基址寄存器的前缀间接寄存器或基址寄存器的前

7、缀 / 指定位求反指定位求反 (x) x中的内容中的内容 (x) x中的地址中的内容中的地址中的内容(间接寻址中的内容)间接寻址中的内容) 当前指令存放的地址当前指令存放的地址 三、寻址方式三、寻址方式寻找操作数存放单元的地址的方式,寻找操作数存放单元的地址的方式,共共7种方式。种方式。1、立即数寻址、立即数寻址所要找的操作数是一二进制数或十进制数,出现在指令所要找的操作数是一二进制数或十进制数,出现在指令中,用中,用“#”作前缀作前缀 mov a,#3ah2、寄存器寻址寄存器寻址操作数存放在工作寄存器操作数存放在工作寄存器r0 r7中,或寄存器中,或寄存器b中。中。 mov r1,a3、直接

8、寻址直接寻址指令中直接给出操作数的地址。指令中直接给出操作数的地址。 mov a,3ah mov 30h,dph 图3.1 立即数寻址示意图3aha3ahmov a,#3ah图3.2 寄存器寻址示意图 20h09h内部ram20har101rs1 rs0mov r1,a 图3.3 直接寻址示意图 88h3ah内部 ram88hamov a,3ahmov 3ah,#65hmov r0,#3ahmov a,r04、寄存器间接寻址、寄存器间接寻址指令中寄存器的内容作为操作数存放的地址,指令中寄存器的内容作为操作数存放的地址,该地址里面的内该地址里面的内容才是操作数容才是操作数,在工作上间接寻址寄存器

9、前用,在工作上间接寻址寄存器前用“”表示前缀。表示前缀。例如例如: 65h3ah内部 ram3ahar065h5、变址寻址、变址寻址 操作数地址操作数地址 = 变地址变地址 + 基地址基地址 基地址寄存器基地址寄存器 dptr 或或 pc 变址寄存器变址寄存器 a 该寻址方式常用于访问程序存储器,查表。该寻址方式常用于访问程序存储器,查表。 如如 movc a,a + dptr movc a, a + pc图3.5 变址寻址示意图55h程序存储区02ha0302h03hdptr00h0302hmovc a,a+dptr6、相对寻址相对寻址 把指令中给定的地址偏移量与本指令所在单元地址(把指令中

10、给定的地址偏移量与本指令所在单元地址(pc内容)内容)相加得到真正有效的操作数所存放的地址。相加得到真正有效的操作数所存放的地址。例如例如 “李同学李同学20岁,张同学比李同学大岁,张同学比李同学大3岁,问张同学多少岁?岁,问张同学多少岁?”这就是一个相对寻年龄的问题,而相对寻址与此类似。这就是一个相对寻年龄的问题,而相对寻址与此类似。 如如 jc 60h ;设(设(pc) = 2000h为基址,相对偏移量为为基址,相对偏移量为60h; ; 则当则当c = 1时,时,转移的目的地址转移的目的地址 = 20002000h h + 2 + 60h 7.位寻址位寻址 位寻址是指按位进行的寻址操作,而

11、上述介绍的指令位寻址是指按位进行的寻址操作,而上述介绍的指令都是按字节进行的寻址操作。都是按字节进行的寻址操作。mcs-51单片机中,操作数不单片机中,操作数不仅可以按字节为单位进行操作,也可以按位进行操作。当我仅可以按字节为单位进行操作,也可以按位进行操作。当我们把某一位作为操作数时,这个操作数的地址称为位地址。们把某一位作为操作数时,这个操作数的地址称为位地址。 位寻址区包括专门安排在内部位寻址区包括专门安排在内部ram中的两个区域:中的两个区域:一一是内部是内部ram的位寻址区,地址范围是的位寻址区,地址范围是20h2fh,共共16个个ram单元,位地址为单元,位地址为00h7fh;二是

12、特殊功能寄存器二是特殊功能寄存器sfr中有中有11个寄存器可以位寻址个寄存器可以位寻址,参见有关章节中位地址定义。,参见有关章节中位地址定义。 图3.6 位寻址示意图内部ram27h二进制 10 0 1 0 0 0 0 0setb 3dh设内部设内部ram 27h单元的单元的内容是内容是00h,执行执行setb 3dh后,由于后,由于3dh对应对应内部内部ram 27h的第的第5位,位,因此该位变为因此该位变为1,也就是,也就是27h单元的内容变为单元的内容变为20h。该指令的执行过程如图该指令的执行过程如图3.6所示。所示。 巩固新课:巩固新课:1、汇编语言有何种特点?指令格式?、汇编语言有

13、何种特点?指令格式?2、mcs51系列机共有多少条指令?分几类?系列机共有多少条指令?分几类?3、mcs51系列汇编语言指令有几种寻址方式?系列汇编语言指令有几种寻址方式? 3 3. .2 2.1.1 数据传送类指令数据传送类指令 数据传送指令是数据传送指令是mcs-51单片机汇编语言程序设计中单片机汇编语言程序设计中使用最频繁的指令,包括内部使用最频繁的指令,包括内部 ram、寄存器、外部寄存器、外部ram以及程序存储器之间的数据传送。以及程序存储器之间的数据传送。 数据传送操作是指把数据从源地址传送到目的地址,数据传送操作是指把数据从源地址传送到目的地址,源地址内容不变。源地址内容不变。

14、数 据目的地址目的地址 源地址源地址3-2数据传送类指令数据传送类指令一、内部一、内部ram与与sfr数据传送类数据传送类1、一般数据传送指令片外片外程序程序存储器存储器romeprom特殊功能特殊功能寄存器寄存器sfr片内片内ram128字节字节片外片外数据数据存储器存储器rammovcmovxmov pushpopxchxchd回忆前述操作数描述符:回忆前述操作数描述符:a,direct,rn,ri,#data,dptr等。等。经排列组合可写出下列指令:经排列组合可写出下列指令:mov a,rn ;(;(a) (rn)以下类似。以下类似。mov a,directmov a,rimov a,

15、#datamov rn,amov rn,directmov rn,#data以累加器以累加器a a为目标操作数的指令;为目标操作数的指令;以寄存器以寄存器rnrn为目标操作数的指令;为目标操作数的指令;mov direct,rnmov direct,directmov direct,rimov direct,#datamov ri,amov ri, directmov ri,#datamov dptr,#data16 ;唯一的唯一的16位数据传送指令。位数据传送指令。上述指令不影响任何标志位,但上述指令不影响任何标志位,但psw的的p位除外。位除外。(direct)(a)mov direct,

16、a ;以以directdirect为目标操作数的指令;为目标操作数的指令;以间接地址为目标操作数的指令;以间接地址为目标操作数的指令;上述指令不影响任何标志位,但上述指令不影响任何标志位,但psw的的p位除外。位除外。注意:注意:mov rn,rn mov ri, ri mov rn, ri mov #data, a 等等等指令是非法指令。等指令是非法指令。 哇!好容易出错啊!教材例题 【例例3.93.9】 若(若(r1r1)21h21h,(,(21h21h)55h55h,执行指令执行指令mov amov a,r1r1后的结果为:后的结果为: (a a)=55h=55h,而,而r1r1的内容和

17、的内容和21h21h单元的内容均单元的内容均不变不变( (keilkeil软件上运行软件上运行) )【例例3.123.12】 若(若(r1r1)30h30h,(,(30h30h)22h22h,(a a)34h34h,执行指令,执行指令mov r1mov r1,a a后的结果为:后的结果为:(30h30h)34h34h,r1r1和和a a当中的内容不变。当中的内容不变。课堂练习题1 1、若、若( (r1)=30h,(a)=40h,r1)=30h,(a)=40h,(30h)=60h,(40h)=08h,(30h)=60h,(40h)=08h,试分试分析执行下列程序段后上述各析执行下列程序段后上述各

18、单元内容的变化。单元内容的变化。mov a,r1mov a,r1mov r1,40hmov r1,40hmov 40h,amov 40h,amov r1,#7fhmov r1,#7fh2 2、若(、若(5050h h)=40h,=40h,问执问执行以下程序段后各个寄存行以下程序段后各个寄存器和内部器和内部ram40hram40h、41h41h、42h42h单元中的内容各为多单元中的内容各为多少?少?org org 00h 00h mov a,50hmov a,50hmov r0,amov r0,amov a,#00hmov a,#00hmov r0,amov r0,amov a,#3bhmov

19、 a,#3bhmov 41h,amov 41h,amov 42h,41hmov 42h,41h用用keilkeil进行调试时,进行调试时,起始地址为起始地址为00h00h二、二、 累加器累加器a a与外部与外部ramram数据传送数据传送movx a,rimovx a, dptrmovx ri, amovx dptr,a执行过程中会使执行过程中会使/wr、/rd有效。有效。 【例例3.15】把外部数据存储器把外部数据存储器2040h单单元的内容送入内部寄存器元的内容送入内部寄存器r2中。中。 movdptr,#2040h movxa,dptr movr2,a例例1:1:将内部将内部ram50h

20、ram50h的内容传送到外部的内容传送到外部ram40hram40h中。中。解解:mov a, 50hmov a, 50h mov r0, #40h mov r0, #40h movx r0, a movx r0, a例例2、试编写一程序段,实现将外、试编写一程序段,实现将外ram0fah单元中的内容传送到外单元中的内容传送到外ram14ffh单元中。单元中。 解:解:movr0,#0fah movxa,r0 movdptr,#14ffh movxdptr,a三三 查表指令(累加器查表指令(累加器a a与与rom之间的数据传送)之间的数据传送)movc a,a + dptrmovc a, a

21、+ pc【例例3.163.16】 设设a=35ha=35h,执行,执行1000h1000h:movc amovc a,a+pca+pc指令后的结果:指令后的结果:首先把累加器首先把累加器a a中的内容加上本条指令执行后的中的内容加上本条指令执行后的pcpc值值1001h1001h,然后将程序存储器,然后将程序存储器1036h1036h单元的内容单元的内容送入累加器送入累加器a a中,即,中,即,aa(1036h1036h)romrom。 【例例3.19】把程序存储器把程序存储器0150h单元的内单元的内容取出送到外部容取出送到外部ram1070h单元中。单元中。 movdptr,#0150h

22、mova,#00h movca,adptr movdptr,#1070h movxdptr,a例例3 3、设(、设(a a)= = 一个十进制常数(一个十进制常数(0 09 9),试),试用查表法获得其相应的用查表法获得其相应的asciiascii码。码。 解法解法i: mov dptr,#1000h movc a,a+dptr (1000h)tab:db 30h db 31h db 32h,33h,34h,35h 解法解法ii:movca,a+pc tab:db30h,31h,32h,33h db34h,35h,36h,37h 四四 字节交换指令字节交换指令xch a,rnxch a,dir

23、ect ;整字节交换;整字节交换xch a,ri低半字节交换低半字节交换xchd a,ri;swap a ; 半字节交换半字节交换一字节一字节a内部ram单元注意:只能是累加器注意:只能是累加器a a中内容和其他源操作数中内容和其他源操作数内容交换。不影响任何内容交换。不影响任何标志位。标志位。 【例例3.20】若(若(a)7ah,(,(r1)45h,(45h)39h,执行指令,执行指令xcha,r1后的结果:后的结果: (a)45h,(,(r1)7ah; 若(若(a)7ah,(,(r1)45h (45h)39h 执行指令执行指令xcha,r1后的结果:后的结果: (a)39h,(,(45h)

24、7ah,(,(r1)45h【例例3.21】设设a=59h,r0=45h,(,(45h)=7ah,执行指令,执行指令xchda,r0结果:结果:a=5ah,r0=45h(不变),(不变),(45h)=79h五五 堆栈操作指令堆栈操作指令push directpop direct不影响任何标志位。不影响任何标志位。例例5、设(、设(sp) = 36h,(,(dptr)= 0123h,分析:分析: 执行执行 push dpl push dph 后,各单元中的内容。后,各单元中的内容。内内ramram3636h h3737h h3838h hspsp加加1 1再加再加1 1h h2323h h0101

25、h hpop direct 指令执行中,机器也自动进行两步操作:指令执行中,机器也自动进行两步操作:(1)()(direct) (sp)(2)()(sp) (sp) 1例例6、设(、设(sp)= 4bh,(,(4bh)= 01h,(,(4ah)= 23h 执行执行 pop dph pop dpl 后,各单元中的内容。后,各单元中的内容。 内内ramram4949h h4 4ahah4 4bhbhspsph h2323h h0101h hspsp减减1 1spsp再减再减1 1dphdphdpldpldptrdptr结论:结论:1)push 与与 pop 操作过程刚好相反;操作过程刚好相反; 2

26、)进、出栈规则:先进后出,后进先出。进、出栈规则:先进后出,后进先出。应注意指令书写先后顺序;应注意指令书写先后顺序; 3)可用于可用于“保护现场,恢复现场保护现场,恢复现场”。 【例例3.23】设(设(30h)=51h,(,(40h)=6ah,将内部将内部ram的这两个单元的内容交换。的这两个单元的内容交换。 push30h;30h单元的内容进栈单元的内容进栈 push40h;40h单元的内容进栈单元的内容进栈 pop30h;将栈顶元素弹出,送入;将栈顶元素弹出,送入30h单单元元 pop40h;再将下一个元素出栈,送入;再将下一个元素出栈,送入40h单元单元 执行结果:(执行结果:(30h

27、)=6ah,(,(40h)=51h。小结:小结: 数据传送类指令有几种类型?数据传送类指令有几种类型? 是否影响标志位?是否影响标志位? 3 3.2.2.2.2 算术运算类指令算术运算类指令包括:加、包括:加、 减、乘、除;加一、减一。减、乘、除;加一、减一。一、加法指令一、加法指令1、不带进位的加法:不带进位的加法:add a,rn ;(;(a) (a)+ (rn)add a,directadd a,riadd a,#data;带符号数相加时:若带符号数相加时:若ov = d7cov = d7c或或d6c = 1d6c = 1,说明有溢出。说明有溢出。无符号数相加时:若无符号数相加时:若c

28、= 1,说明有进位(其值说明有进位(其值 255255)。)。【例3.24】 设a=46h,r1=5ah,试分析执行指令add a,r1 ;aa+r1a=0 1 0 0 0 1 1 0+)r1=0 1 0 1 1 0 1 0a+r1=1 0 1 0 0 0 0 0结果为偶数个1,p=0110有进位时,ac=101=1有溢出,ov=1无进位,cy=0结果:结果:a=a0ha=a0h,r1=5ahr1=5ah(不变)。(不变)。2 2、带进位的加法:带进位的加法:addc addc a a,rnrn ;(;(a a) (a a)+ +(rnrn)+ +(c c) )addc addc a a,di

29、rectdirectaddc addc a a,ririaddc addc a,#dataa,#data 上述四条指令多用于多字节数相加。上述四条指令多用于多字节数相加。 【例例3.25】设设a=85h,(,(20h)=ffh,cy=1,执行指令:,执行指令:addca,20h;aa+(20h)+cy,执行情况见图,执行情况见图3-13所所示。示。结果:结果:a=85ha=85h, (20h20h)=ffh=ffh(不变)。(不变)。3 3、加、加1 1指令:指令:inc a inc a ;(;(a a) (a a)+1 +1 ,以下类同。以下类同。inc inc rnrninc direct

30、inc directinc inc ririinc dptrinc dptr 例例2、设(、设(r0)=7eh;(7eh)=40h,(7fh)0ffh 执行:执行: incr0; incr0; incr0; (r0)=7fh;(7fh)=00h;(7eh)=41h da a ;二二 十进制调整指令。十进制调整指令。执行过程中,执行过程中,cpu能根据加法运算后,累加器中的值和能根据加法运算后,累加器中的值和psw中的中的ac及及c标志位的状况自动选择一个修正值(标志位的状况自动选择一个修正值(00h、06h、60h、66h)与原运算结果相加,进行二与原运算结果相加,进行二十进制调整。十进制调整

31、。本条指令必须紧跟在本条指令必须紧跟在add指令的后面才能完成指令功能。指令的后面才能完成指令功能。比如,刚才运算的是比如,刚才运算的是09h01h,计算机是按照计算机是按照16进制运算,进制运算,答案是答案是0ah,可是有时候我们需要得到可是有时候我们需要得到10进制的结果,用这条进制的结果,用这条da a就能使结果变成就能使结果变成10h。二、减法指令二、减法指令1、带借位的减法:带借位的减法:subb a,rn ;(a) (a)-(rn)-(c)subb a,directsubb a,risubb a,#data 例例3、(a)=0c9h,(r2)=54h,c=1,执行指执行指令令sub

32、ba,r2的结果的结果 11001001 -(r2)01010100 -c1 01110100执行该指令后执行该指令后( (a)=74h,ac=0,a)=74h,ac=0,c=0,ov=1c=0,ov=1,p=0p=0注意:如果需要不带借位的减法注意:如果需要不带借位的减法之前先清零之前先清零c c。(。(clr cclr c) 2、减减1指令:指令:dec a ;(;(a) (a)1,以下以下类同。类同。dec rndec ridec direct 例例4、设(、设(r0)=7fh,在内在内ram中,(中,(7eh)=00h,(,(7fh)=40h 执行:执行:decr0 decr0; de

33、cr0; 结果为结果为:(:(r0)=7eh,(,(7eh)=0ffh,(7fh)=3fh。 三、乘法和除法指令三、乘法和除法指令1、乘法:、乘法:mul ab ;(;(a)()(b)积的低积的低8位在位在a中,积的高中,积的高8位在位在b中;若乘积中;若乘积大于大于255,则,则ov=1, c总为总为0。 2、除法:、除法:div ab ;(;(a)()(b),),商在商在a中,余数中,余数在在b中。中。若(若(b)= 0 ,则结果不定则结果不定, ,(ov)= 1,(c)= 0。 【例例3.29】设设a=32h(即(即50),),b=60h(即(即96),执行指令),执行指令mulab;b

34、aab后的后的结果:结果:乘积为乘积为12c0h(即(即4800)。)。a=c0h,b=12h。各标志位:各标志位:cy=0,ov=1,p=0。 【例例3.30】设设a=ffh(255),),b=12h(18),执行指令),执行指令divab;abab后后的结果:的结果: 商商a=0eh(14),余数),余数b=03h(3)。)。 标志位:标志位:cy=0,ov=0,p=1。小结:算术运算类指令都有哪些小结:算术运算类指令都有哪些类型?类型? 3.2.3逻辑运算类指令逻辑运算类指令共分两大类:单字节逻辑操作,双字节逻辑操共分两大类:单字节逻辑操作,双字节逻辑操作,共作,共24条。条。一、单字节

35、逻辑操作指令一、单字节逻辑操作指令clr a ;(;(a) 0 ; mov a,#00hcpl a ; a中中8位按位求反。位按位求反。 循环左移、右移指令:循环左移、右移指令: rla rlca rra rrca 注:左移一位相当于乘注:左移一位相当于乘2;右移一位相当于;右移一位相当于除除2。二、双字节逻辑操作指令二、双字节逻辑操作指令“与操作与操作”:anl a,rn ;(a) (a)(rn),),以下以下类同。类同。anl a,directanl a,rianl a,#dataanl direct,aanl direct,#data例例1、(、(p1)=35h,使其高使其高4位输出位输

36、出0,低低4位不变。位不变。 解;解;anlp1,#0fh 此做法称为此做法称为“屏蔽屏蔽”位。位。“或操作或操作”:orl a,rn ;(a) (a)(rn),),以以下类同。下类同。orl a,directorl a,riorl a,#dataorl direct,aorl direct,#data 例例2、将、将a中的低中的低3位送入位送入p1中,并且保中,并且保持持p1中高中高5位不变。位不变。 anla,#07h anlp1,#0f8h orlp1,a; (p1)=p17p16p15p14p13a2a1a0 这称为这称为“数位组合数位组合”。 “异或操作异或操作”:xrl a,rn

37、; (a) (a)(rn),),以下类同。以下类同。xrl a,directxrl a,rixrl a,#dataxrl direct,axrl direct,#data例例3、设(、设(p1)=0b4h=10110100b,执行:执行: xrlp1,#00110001b 10110100b: (p1)=10000101b=85h 这称为这称为“指定位取反指定位取反”。在上述在上述anl、orl、xrl操作中,用于端操作中,用于端口操作时,无论口操作时,无论p0 p3是第一,还是第二操是第一,还是第二操作数,都遵循作数,都遵循“读读修改修改写写”端口锁存器端口锁存器的操作。的操作。 小结:小结

38、: 1、逻辑操作分为哪两类操作?、逻辑操作分为哪两类操作? 2、循环移位指令每执行一次,移几位?、循环移位指令每执行一次,移几位? 3、anl、orl、xrl指令有哪些使用技巧?指令有哪些使用技巧? 3.2.4控制转移类指令控制转移类指令非法非法;转移有效;转移有效比较比较ljmp、ajmp、sjmp、jmp转移的起点和范围转移的起点和范围: : ljmpljmppc64k ajmpajmppc+2 sjmpsjmppc+2-128+127 jmpjmp a+dptrpcpc+2dptr2562 2k k lcall addr16 ;长调用长调用 acall addr11 ;短调用短调用 lc

39、all addr16 ;转移范围转移范围64kb,不影响标志位。执行中不影响标志位。执行中自动完成如下过程:自动完成如下过程: (pc) (pc) + 3 (sp) (sp)+ 1 (sp) (pc7 0),), 保护断点地址低字节;保护断点地址低字节; (sp) (sp)+ 2 (sp) (pc15 8),),保存断点地址高字节;保存断点地址高字节; (pc) addr16 ,目的地址送目的地址送pc,转子程序。转子程序。 二、调用指令二、调用指令lcall 34h 56h mov 执行结果:(执行结果:(sp)= 09h,(,(09h)= 21h,(,(08h)= 03h, (pc)= 3

40、456h sp07hspsp08h09h2100h3456h外rom内rampc+3pc2103hpc03h21h例例1、设(、设(sp)= 07h,(,(pc)= 2100h,子程序首地址为子程序首地址为3456h,执行:执行: lcall 3456h mov a,20h 转移范围与(转移范围与(pc)+ 2在同一个在同一个2kb内。不影响任何标志内。不影响任何标志位,执行中机器自动完成下列过程:位,执行中机器自动完成下列过程: (pc) (pc)+ 2 (sp) (sp)+ 1 (sp) (pc7 0) (sp) (sp)+ 2 (sp) (pc15 8) (pc10 0) addr10

41、0 acall addr11 :三、返回指令三、返回指令从子程序返回主程序。从子程序返回主程序。 ret ;调用子程序返回;调用子程序返回; reti ;中断子程序返回。中断子程序返回。 (pc15 8) (sp) (sp) 1 (pc7 0) (sp) (sp) (sp) 2 其机器自动操作过程如下:其机器自动操作过程如下:比较两种返回指令含义上的异同点比较两种返回指令含义上的异同点结论:结论:ret返回地址事先已知,而返回地址事先已知,而reti的返回地址在程序执的返回地址在程序执行中产生的,不固定。不影响标志位,但行中产生的,不固定。不影响标志位,但psw不能恢复到中不能恢复到中断前的状

42、态。断前的状态。(sp)例例2、设(、设(sp)= 0bh,(,(0ah)= 23h,(,(0bh)= 01h 执行:执行: ret mov (pc)= 0123h(返回主程序)返回主程序)结果结果: :(sp)= 09h,01 23hsp0bhspsp0ah09h3456h外rom内rampcpc 23h01h23h01h(pc)=空操作指令空操作指令nop ;空操作空操作不执行任何操作,仅仅使(不执行任何操作,仅仅使(pc)+ 1,继续执行下继续执行下条指令,不影响标志位,条指令,不影响标志位,在在rom中占一个字节中占一个字节, ,用于延时调整。用于延时调整。 小结:小结: 1、长转移与

43、长调用指令有何区别?、长转移与长调用指令有何区别? 2、长转移、短转移及相对转移的跳转范围有、长转移、短转移及相对转移的跳转范围有 什么不同?什么不同? 二、条件转移指令二、条件转移指令实现按照一定条件决定转移的方向实现按照一定条件决定转移的方向, ,分三类分三类: : 累加器累加器a a判零转移指令判零转移指令 比较不相等转移指令比较不相等转移指令 减一不为零转移指令减一不为零转移指令 jz rel : 若(若(a)= 0 ,则转移,否则顺序执行。则转移,否则顺序执行。 jnz rel : 若(若(a) 0,则转移,否则顺序执行。则转移,否则顺序执行。 转移目的地址转移目的地址 = (pc)

44、+ 2 + rel 不影响任何标志位。不影响任何标志位。 1、判零转移、判零转移 jz rel jnz rel例例1、将外、将外ram的一个数据块(首地址为的一个数据块(首地址为data1)传送到内部传送到内部数据数据ram(首地址为首地址为data2),),遇到传送的数据为零时停止遇到传送的数据为零时停止传送,试编程。传送,试编程。解解: mov r0,#data2 mov dptr,#data1 loop1: movx a,dptr jz loop2 mov r0,a inc r0 inc dptr sjmp loop1 loop2: sjmp loop2 2、比较转移指令、比较转移指令功

45、能:比较二个字节中的值,若不等,则转移。功能:比较二个字节中的值,若不等,则转移。cjne a,direct,relcjne a,#data,relcjne ri,#data,relcjne rn,#data,rel 该类指令具有比较和判断双重功能,比较的本质是做减法运算,该类指令具有比较和判断双重功能,比较的本质是做减法运算,用第一操作数内容减去第二操作数内容,但差值不回存。用第一操作数内容减去第二操作数内容,但差值不回存。转移目的地址转移目的地址 = (pc)+ 3 + rel若第一操作数内容小于第二操作数内容,则(若第一操作数内容小于第二操作数内容,则(c)= 1,否则(否则(c)= 0

46、。3、循环转移指令、循环转移指令djnz rn,rel ;(;(二字节指令)二字节指令)djnz direct,rel ;(;(三字节指令)三字节指令)本指令也为双功能指令,即减本指令也为双功能指令,即减1操作和判断转移操作。操作和判断转移操作。第一操作数内容减第一操作数内容减1后,若差值不为零,则转移;否则顺序执行。后,若差值不为零,则转移;否则顺序执行。转移目的地址转移目的地址 = (pc)+ 2或或3 + rel 例例3、将、将8031内部内部ram的的40h 4fh单元置初值单元置初值#a0h #afh。解:解: mov r0,#40h mov r2,#10h mov a,#0a0h

47、loop: mov r0,a inc r0 inc a djnz r2,loop 小结小结: 1、无条件转移指令共有几条、无条件转移指令共有几条? 2、cjne指令与指令与djnz指令有何区别?指令有何区别? 3 3.2.5.2.5 位操作类指令位操作类指令包括:位传送指令、条件转移指令、位运算指令。包括:位传送指令、条件转移指令、位运算指令。位操作由单片机内布尔处理器来完成。位操作由单片机内布尔处理器来完成。位地址的四种表示:位地址的四种表示:1)使用直接位地址表示;如)使用直接位地址表示;如20h、30h、33h等;等;2)使用位寄存器名来表示;如)使用位寄存器名来表示;如c、ov、f0等

48、;等;3)用字节寄存器名后加位数来表示;)用字节寄存器名后加位数来表示; 如如psw.4、p0.5acc.3等;等; 4)字节地址加位数来表示;如)字节地址加位数来表示;如20.0、30.4、50.7等。等。 一、位传送指令一、位传送指令mov c,bit ;(c) (bit)mov bit,c ; (bitbit) (c c) 二、位状态控制指令二、位状态控制指令clr bit ;(;(bit) 0setb bit ;(;(bit) 1 cpl bit ;(;(bit) (/ bit) clr c ;(;(c) 0setb c ;(;(c) 1 cpl c ;(;(c) (/ c)例例1、编程通过、编程通过p1.0线连续输出线连续输出256个宽度为个宽

温馨提示

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

评论

0/150

提交评论