第3章 单片机汇编程序设计(ghl)_第1页
第3章 单片机汇编程序设计(ghl)_第2页
第3章 单片机汇编程序设计(ghl)_第3页
第3章 单片机汇编程序设计(ghl)_第4页
第3章 单片机汇编程序设计(ghl)_第5页
已阅读5页,还剩84页未读 继续免费阅读

下载本文档

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

文档简介

1、第第3章章 单片机汇编程序设计单片机汇编程序设计东北大学信息学院高宏亮单片机原理及应用单片机原理及应用 第第3 3章章 单片机汇编程序设计单片机汇编程序设计什么是汇编指令和汇编语言程序什么是汇编指令和汇编语言程序 任何微处理器任何微处理器(包括包括MCU)只能执行二进制代码指令,只能执行二进制代码指令,即机器语言。但机器语言都是一系列的二进制指令,开即机器语言。但机器语言都是一系列的二进制指令,开发人员记忆、开发、修改都很困难。为了便于记忆、识发人员记忆、开发、修改都很困难。为了便于记忆、识别理解,人们就每条机器指令赋予一个易于理解的字符别理解,人们就每条机器指令赋予一个易于理解的字符串符号,

2、称为汇编指令。由汇编指令构成的程序称为汇串符号,称为汇编指令。由汇编指令构成的程序称为汇编语言程序。编语言程序。 汇编指令和机器语言指令可以实现一一对应,这汇编指令和机器语言指令可以实现一一对应,这既决定了汇编语言的高效性,也导致了汇编语言的编程既决定了汇编语言的高效性,也导致了汇编语言的编程繁琐性和代码移植性差。繁琐性和代码移植性差。 类似于人类语言中包含实词和虚词,汇编语言也包类似于人类语言中包含实词和虚词,汇编语言也包括可执行的汇编指令和不可执行的伪指令。括可执行的汇编指令和不可执行的伪指令。第第3 3章章 单片机汇编程序设计单片机汇编程序设计3.1 MCS-51系列单片机汇编指令格式及

3、标识系列单片机汇编指令格式及标识 MCS-51系列单片机从功能上分五大类:数据传送系列单片机从功能上分五大类:数据传送指令、算术运算指令、逻辑操作指令、控制转移指令和指令、算术运算指令、逻辑操作指令、控制转移指令和位操作指令。位操作指令。3.1.1 指令格式指令格式标号标号: 操作码助记符操作码助记符目的操作数目的操作数,源操作数源操作数;注释注释(1) 操作码助记符表明指令的功能,不同的指令有不操作码助记符表明指令的功能,不同的指令有不同的指令助记符,它一般用说明其功能的英文单词同的指令助记符,它一般用说明其功能的英文单词的缩写形式表示。的缩写形式表示。 (2) 操作数用于给指令的操作提供数

4、据、数据的地址或操作数用于给指令的操作提供数据、数据的地址或指令的地址,操作数往往用相应的寻址方式指明。指令的地址,操作数往往用相应的寻址方式指明。(3) 标号是该指令的符号地址,后面须带冒号。标号是该指令的符号地址,后面须带冒号。(4) 注释是对该指令的解释,前面须带分号。注释是对该指令的解释,前面须带分号。第第3 3章章 单片机汇编程序设计单片机汇编程序设计3.1.2 指令中用到的标识符指令中用到的标识符 为便于后面的学习,先对指令中用到的一些符为便于后面的学习,先对指令中用到的一些符号的约定意义作以说明:号的约定意义作以说明:(1)Ri和和Rn:表示当前工作寄存器区中的工作寄存:表示当前

5、工作寄存器区中的工作寄存器,器,i取取0或或1,表示,表示R0或或R1。n取取07,表示,表示R0R7。(2)#data:表示包含在指令中的:表示包含在指令中的8位立即数位立即数(常数常数)。(3)#data16:表示包含在指令中的:表示包含在指令中的16位立即数。位立即数。 (4)rel:以补码形式表示的:以补码形式表示的8位相对偏移量,范围位相对偏移量,范围为为-128127,主要用在相对寻址的指令中。,主要用在相对寻址的指令中。(5)addr16和和addr11:分别表示:分别表示16位直接地址和位直接地址和11位直接地址。位直接地址。第第3 3章章 单片机汇编程序设计单片机汇编程序设计

6、(6)direct:表示直接寻址的地址。:表示直接寻址的地址。(7)bit:表示可位寻址的直接位地址。:表示可位寻址的直接位地址。(8)(X):表示:表示X单元中的内容。单元中的内容。(9)(X):表示以:表示以X单元的内容为地址的存储器单元内单元的内容为地址的存储器单元内容,即容,即(X)作地址,该地址单元的内容用作地址,该地址单元的内容用(X)表示。表示。(10)/ 和和符号:符号:“/”表示对该位操作数取反,但不影表示对该位操作数取反,但不影响该位的原值。响该位的原值。“”表示操作流程,将箭尾一方的内表示操作流程,将箭尾一方的内容送入箭头所指一方的单元中去。容送入箭头所指一方的单元中去。

7、 第第3 3章章 单片机汇编程序设计单片机汇编程序设计3.2 MCS-51系列单片机寻址方式系列单片机寻址方式 MCS-51单片机的寻址方式按操作数的类型,可分为单片机的寻址方式按操作数的类型,可分为数的寻址和指令寻址。数的寻址有:常数寻址数的寻址和指令寻址。数的寻址有:常数寻址(立即寻立即寻址址)、寄存器数寻址、寄存器数寻址(寄存器寻址寄存器寻址)、存储器数寻址、存储器数寻址(直接寻直接寻址方式、寄存器间接寻址方式、变址寻址方式址方式、寄存器间接寻址方式、变址寻址方式)和位寻址;和位寻址;指令的寻址有绝对寻址和相对寻址,指令的寻址有绝对寻址和相对寻址, 3.2.1 常数寻址常数寻址(立即寻址

8、立即寻址)操作数是常数操作数是常数(又称为立即数又称为立即数),使用时直接出现在指,使用时直接出现在指令中,紧跟在操作码的后面。在汇编指令中,立即数前令中,紧跟在操作码的后面。在汇编指令中,立即数前面以面以“#”符号作前缀。在程序中通常用于给寄存器或存符号作前缀。在程序中通常用于给寄存器或存储器单元赋初值,例如:储器单元赋初值,例如: MOV A,#20H其功能是把立即数其功能是把立即数20H送给累加器送给累加器A。 第第3 3章章 单片机汇编程序设计单片机汇编程序设计3.2.2 寄存器数寻址寄存器数寻址(寄存器寻址寄存器寻址)操作数在寄存器中,指令中直接提供寄存器的名称,操作数在寄存器中,指

9、令中直接提供寄存器的名称,这种寻址方式称为寄存器寻址。在这种寻址方式称为寄存器寻址。在MCS-51系统中,这系统中,这种寻址方式只能针对种寻址方式只能针对R0R7 8个通用寄存器和部分特殊个通用寄存器和部分特殊功能寄存器功能寄存器(如累加器如累加器A、寄存器、寄存器B、数据指针、数据指针DPTR等等)中的数据,对于其它的特殊功能寄存器中的内容的寻中的数据,对于其它的特殊功能寄存器中的内容的寻址方式不适用。址方式不适用。例如:例如: MOV A,R0其功能是把其功能是把R0寄存器中的数送给累加器寄存器中的数送给累加器A,在指令,在指令中,源操作数中,源操作数R0为寄存器寻址,传送的对象为为寄存器

10、寻址,传送的对象为R0中的中的数据。数据。第第3 3章章 单片机汇编程序设计单片机汇编程序设计3.2.3 存储器数寻址存储器数寻址 存储器数寻址针对的数据是存放在存储器单元中,存储器数寻址针对的数据是存放在存储器单元中,对于存储器单元的内容通过提供存储器单元地址使用。对于存储器单元的内容通过提供存储器单元地址使用。根据存储器单元地址的提供方式,存储器数的寻址方根据存储器单元地址的提供方式,存储器数的寻址方式有:直接寻址、寄存器间接寻址、变址寻址。式有:直接寻址、寄存器间接寻址、变址寻址。一直接寻址一直接寻址 直接寻址是指数据在存储器单元中,在指令中直接寻址是指数据在存储器单元中,在指令中直接提

11、供存储器单元的地址。在直接提供存储器单元的地址。在MCS-51系统中,系统中,这种寻址方式针对的是片内数据存储器和特殊功能这种寻址方式针对的是片内数据存储器和特殊功能寄存器。在汇编指令中,指令中直接以地址数的形寄存器。在汇编指令中,指令中直接以地址数的形式提供存储器单元的地址。例如:式提供存储器单元的地址。例如:MOV A,20H第第3 3章章 单片机汇编程序设计单片机汇编程序设计 其功能是把片内数据存储器其功能是把片内数据存储器20H单元的内容送给单元的内容送给累加器累加器A。指令中。指令中20H是地址数,它是片内数据存储是地址数,它是片内数据存储单元的地址。在单元的地址。在MCS-51中,

12、数据前面不加中,数据前面不加“#”是存是存储单元地址而不是常数,常数前面才加符号储单元地址而不是常数,常数前面才加符号“#”。对于特殊功能寄存器,在指令中使用时往往通过对于特殊功能寄存器,在指令中使用时往往通过特殊功能寄存器的名称使用,而特殊功能寄存器名称特殊功能寄存器的名称使用,而特殊功能寄存器名称实际上是特殊功能寄存器单元的符号地址,因此它们实际上是特殊功能寄存器单元的符号地址,因此它们是直接寻址。例如:是直接寻址。例如: MOV A,P0其功能是把其功能是把P0口的内容送给累加器口的内容送给累加器A。P0是特殊是特殊功能寄存器功能寄存器P0口的符号地址,该指令在翻译成机器码口的符号地址,

13、该指令在翻译成机器码时,时,P0就转换成直接地址就转换成直接地址80H。第第3 3章章 单片机汇编程序设计单片机汇编程序设计二寄存器间接寻址二寄存器间接寻址 寄存器间接寻址是指数据存放在内存存储单元中,寄存器间接寻址是指数据存放在内存存储单元中,而存储单元地址存放在寄存器中,指令中通过提供存而存储单元地址存放在寄存器中,指令中通过提供存放存储单元地址的寄存器寻址。形式为:放存储单元地址的寄存器寻址。形式为:寄存器名。寄存器名。例如:例如:MOV A,R1 该指令的功能是将该指令的功能是将寄存器寄存器R1中的内容为地址中的内容为地址的片的片内内RAM单元的数据传送到累加器单元的数据传送到累加器A

14、中。中。 若若R1中的内容为中的内容为80H,片内,片内RAM地址为地址为80H的单的单元中的内容为元中的内容为20H,则执行该指令后,累加器,则执行该指令后,累加器A的内的内容为容为20H。寄存器间接寻址示意图如图所示。寄存器间接寻址示意图如图所示。第第3 3章章 单片机汇编程序设计单片机汇编程序设计80H20H20HA80HR1 在在MCS-51单片机中,寄存器间接寻址用到的寄存单片机中,寄存器间接寻址用到的寄存器只能是寄存器器只能是寄存器R0、R1和数据指针寄存器和数据指针寄存器DPTR。 其中,片内数据存储器只能用其中,片内数据存储器只能用R0和和R1作指针间接访作指针间接访问;片外数

15、据存储器,低端的问;片外数据存储器,低端的256字节单元,既可以用字节单元,既可以用两位十六进制地址以两位十六进制地址以R0或或R1作指针间接访问,也可用作指针间接访问,也可用四位十六进制地址以四位十六进制地址以DPTR作指针间接访问,而高端的作指针间接访问,而高端的字节单元则只能以字节单元则只能以DPTR作指针间接访问。作指针间接访问。第第3 3章章 单片机汇编程序设计单片机汇编程序设计三变址寻址三变址寻址 变址寻址是指操作数的地址由基址寄存器的地变址寻址是指操作数的地址由基址寄存器的地址加上变址寄存器的地址得到。在址加上变址寄存器的地址得到。在MCS-51系统中,系统中,它是以数据指针寄存

16、器它是以数据指针寄存器DPTR或程序计数器或程序计数器PC为基为基址,累加器址,累加器A为变址,两者相加得存储单元的地址,为变址,两者相加得存储单元的地址,所访问的存储器为程序存储器。所访问的存储器为程序存储器。 对于片内对于片内RAM和片外和片外RAM的低端的低端256字节都可以字节都可以用用R0和和R1作指针访问,它们之间用指令来区别。片作指针访问,它们之间用指令来区别。片内内RAM访问用访问用MOV指令,片外指令,片外RAM访问用访问用MOVX指令。指令。 第第3 3章章 单片机汇编程序设计单片机汇编程序设计例如:例如:MOVC A,A+DPTR 其功能是将寄存器其功能是将寄存器DPTR

17、的内容加上累加器的内容加上累加器A中的中的内容作为程序存储器的地址,从对应的单元中取出内内容作为程序存储器的地址,从对应的单元中取出内容送累加器容送累加器A中。中。 设指令执行前设指令执行前DPTR的值为的值为2000H,累加器,累加器A的值的值为为05H,程序存储器,程序存储器2005H单元的内容为单元的内容为30H,则指令,则指令执行后,累加器执行后,累加器A中的内容为中的内容为30H。2000H30H30HDPTRA2005H05HA+第第3 3章章 单片机汇编程序设计单片机汇编程序设计3.2.4 位寻址位寻址 位寻址是对二进制位数的寻址方式。在位寻址是对二进制位数的寻址方式。在51单片

18、机中单片机中有一个独立的位处理器,有多条位处理指令,进行各种有一个独立的位处理器,有多条位处理指令,进行各种位运算。位处理的操作对象是各种可位寻址位,对于它位运算。位处理的操作对象是各种可位寻址位,对于它们的访问是通过相应的位地址来处理。们的访问是通过相应的位地址来处理。在在51系统中,位地址的表示可以用以下几种方式:系统中,位地址的表示可以用以下几种方式:1) 直接位地址直接位地址(00H0FFH)。例如:。例如:20H2) 字节地址带位号。例如:字节地址带位号。例如:20H.3表示表示20H单元的单元的3位。位。3) 特殊功能寄存器名带位号。特殊功能寄存器名带位号。例如:例如:P0.1表示

19、表示P0口的口的1位。位。4) 位符号地址。位符号地址。例如:例如:TR0是定时是定时/计数器计数器T0的启动位。的启动位。第第3 3章章 单片机汇编程序设计单片机汇编程序设计3.3 MCS-51系列单片机指令系统系列单片机指令系统3.3.1 数据传送指令数据传送指令 数据传送指令有数据传送指令有29条,是指令系统中数量最多、使条,是指令系统中数量最多、使用也最频繁的一类指令。这类指令可分为三组:普通用也最频繁的一类指令。这类指令可分为三组:普通传送指令、数据交换指令、堆栈操作指令。传送指令、数据交换指令、堆栈操作指令。一普通传送指令一普通传送指令 普通传送指令以助记符普通传送指令以助记符MO

20、V为基础。分成片内数为基础。分成片内数据传送指令、片外数据传送指令和程序传送指令。据传送指令、片外数据传送指令和程序传送指令。1片内数据传送指令片内数据传送指令MOV指令格式:指令格式:MOV 目的操作数,源操作数目的操作数,源操作数其中:源操作数可以为其中:源操作数可以为A、Rn、Ri、direct、#data,目的操作数可以为目的操作数可以为A、Rn、Ri、direct,组合起来总,组合起来总共共16条。条。第第3 3章章 单片机汇编程序设计单片机汇编程序设计按目的操作数的寻址方式划分为五组:按目的操作数的寻址方式划分为五组:(1)以累加器以累加器A为目的操作数为目的操作数MOV A,Rn

21、;A RnMOV A,direct ;A(direct)MOV A,Ri;A(Ri)MOV A,#data ;A #data(2)以通用寄存器以通用寄存器Rn为目的操作数为目的操作数MOV Rn,A;Rn AMOV Rn,direct;Rn (direct)MOV Rn,#data;Rn #data(3)以直接地址以直接地址direct为目的操作数为目的操作数MOV direct,A ;(direct) AMOV direct,Rn;(direct) Rn第第3 3章章 单片机汇编程序设计单片机汇编程序设计MOV direct,direct;(direct) (direct)MOV direc

22、t,Ri;(direct) (Ri)MOV direct,#data;(direct) #data(4)以间接地址以间接地址Ri为目的操作数为目的操作数MOV Ri,A ;(Ri) AMOV Ri,direct;(Ri) (direct)MOV Ri,#data;(Ri) #data(5)以以DPTR为目的操作数为目的操作数MOV DPTR,#data16 ;DPTR #data16 注意,源操作数和目的操作数中的注意,源操作数和目的操作数中的Rn和和Ri不能不能相互配对。如不允许有相互配对。如不允许有“MOV Rn,Rn”,“MOV Ri,Rn”这样的指令。即,不允许在一条指令中同时这样的指

23、令。即,不允许在一条指令中同时出现两个工作寄存器,无论它是寄存器寻址还是寄存出现两个工作寄存器,无论它是寄存器寻址还是寄存器间接寻址。器间接寻址。 第第3 3章章 单片机汇编程序设计单片机汇编程序设计2片外数据存储器传送指令片外数据存储器传送指令MOVX 在在MCS-51系统中系统中只能通过累加器只能通过累加器A与片外数据存储与片外数据存储器进行数据传送,只能通过器进行数据传送,只能通过Ri和和DPTR以间接寻址以间接寻址方式进行。方式进行。MOVX指令共有四条:指令共有四条:MOVX A,DPTR;A (DPTR)MOVX DPTR,A;(DPTR) AMOVX A,Ri ;A (Ri)MO

24、VX Ri,A ;(Ri) A 其中前两条指令通过其中前两条指令通过DPTR间接寻址,可以对整个间接寻址,可以对整个64K片外数据存储器访问。后两条指令通过片外数据存储器访问。后两条指令通过Ri间接寻间接寻址,只能对片外数据存储器的低端的址,只能对片外数据存储器的低端的256字节访问,访字节访问,访问时将低问时将低8位地址放于位地址放于Ri中。中。第第3 3章章 单片机汇编程序设计单片机汇编程序设计3程序存储器传送指令程序存储器传送指令MOVC 程序存储器传送指令只有两条,一条用程序存储器传送指令只有两条,一条用DPTR基址基址变址寻址。一条用变址寻址。一条用PC基址变址寻址。基址变址寻址。M

25、OVC A,A+DPTR;A (A+DPTR)MOVC A,A+PC;A (A+PC) 这两条指令通常用于访问表格数据,因此以称为查这两条指令通常用于访问表格数据,因此以称为查表指令。表指令。 例如:查表指令例如:查表指令MOVC A,A+PC所在的地址所在的地址为为2000H,表格的起始单元地址为,表格的起始单元地址为2035H,表格的第,表格的第4个元素个元素(位移量为位移量为03H)的内容为的内容为45H,则查表指令的,则查表指令的处理过程如下:处理过程如下: 第第3 3章章 单片机汇编程序设计单片机汇编程序设计 MOV A,#03H ;表格元素相对于表首的位;表格元素相对于表首的位移量

26、送累加器移量送累加器A ADD A,#34H ;当前程序计数器;当前程序计数器PC相对于相对于表首的差值加到累加器表首的差值加到累加器A中中 MOVC A,A+PC ;查表,查得第;查表,查得第4个元素个元素内容内容45H送累加器送累加器A 注意:查表指令的长度为注意:查表指令的长度为1个字节,当前程序个字节,当前程序计数器计数器PC的值应为查表指令的地址加的值应为查表指令的地址加1。第第3 3章章 单片机汇编程序设计单片机汇编程序设计二数据交换指令二数据交换指令 普通传送指令实现将源操作数的数据传送到目的操普通传送指令实现将源操作数的数据传送到目的操作数,指令执行后源操作数不变,数据传送是单

27、向的。作数,指令执行后源操作数不变,数据传送是单向的。 数据交换指令数据作双向传送,传送后,前、后操数据交换指令数据作双向传送,传送后,前、后操作数中内容交换。作数中内容交换。 数据交换指令要求第一个操作数须为累加器数据交换指令要求第一个操作数须为累加器A,共,共有有5条。条。XCH A,Rn;A RnXCH A ,direct ;A(direct)XCH A,Ri;A(Ri)XCHD A,Ri ;A03(Ri)03SWAP A;A03A47(半字节交换半字节交换)第第3 3章章 单片机汇编程序设计单片机汇编程序设计三堆栈操作指令三堆栈操作指令 堆栈是在片内堆栈是在片内RAM中按中按“先进后出

28、,后进先出先进后出,后进先出”原则设置的专用存储区。数据的进栈和出栈由指针原则设置的专用存储区。数据的进栈和出栈由指针SP统一管理。在统一管理。在MCS-51系统中,堆栈操作指令有系统中,堆栈操作指令有两条:两条:PUSH direct;SP(SP+1),(SP)(direct)POP direct;(direct)(SP),(SP) (SP-1) 其中其中PUSH指令入栈,指令入栈,POP指令出栈。操作时以指令出栈。操作时以字节为单位。入栈时字节为单位。入栈时SP指针先加指针先加1,再入栈。出栈时,再入栈。出栈时内容先出栈,内容先出栈,SP指针再减指针再减1。用堆栈保存数据时,先入栈的内容后

29、出栈;后入栈用堆栈保存数据时,先入栈的内容后出栈;后入栈的内容先出栈。的内容先出栈。第第3 3章章 单片机汇编程序设计单片机汇编程序设计3.3.2 算术运算指令算术运算指令一加法指令一加法指令1一般的加法指令一般的加法指令ADDADD A,Rn;A A + RnADD A,direct;A A +(direct)ADD A,Ri;A A +(Ri)ADD A,#data;A A + #data2带进位加指令带进位加指令ADDCADDC A,Rn;A A + Rn + CADDC A,direct;A A +(direct)+ CADDC A,Ri ;A A +(Ri)+ CADDC A,#da

30、ta ;A A + #data + C第第3 3章章 单片机汇编程序设计单片机汇编程序设计3加加1指令指令INC A;A A + 1INC Rn ;Rn Rn + 1INC direct;(direct) (direct)+ 1INC Ri;(Ri)(Ri)+ 1INC DPTR;DPTR DPTR + 1 其中,其中,ADD和和ADDC指令在执行时要影响指令在执行时要影响CY、AC、OV和和P标志位。而标志位。而INC指令除了指令除了INC A要影响要影响P标志位外,对其它标志位都没有影响。标志位外,对其它标志位都没有影响。第第3 3章章 单片机汇编程序设计单片机汇编程序设计 在在MCS-5

31、1单片机中,常用单片机中,常用ADD和和ADDC配合使用配合使用实现多字节加法运算。实现多字节加法运算。【例【例3-4】把存放在】把存放在R1R2和和R3R4中的两个中的两个16位数相位数相加,结果存于加,结果存于R5R6中。中。 处理时,处理时,R2和和R4用一般的加法指令用一般的加法指令ADD,结,结果放于果放于R6中,中,R1和和R3用带进位的加法指令用带进位的加法指令ADDC,结果放于结果放于R5中,程序如下:中,程序如下:MOV A,R2;R2-AADD A,R4;低低8位数据相加位数据相加MOV R6,A;结果放到结果放到R6MOV A,R1;R1-AADDC A,R3;高高8位数

32、据相加,含进位位数据相加,含进位MOV R5,A;结果放到结果放到R5第第3 3章章 单片机汇编程序设计单片机汇编程序设计二减法指令二减法指令1带借位减法指令带借位减法指令SUBBSUBB A,Rn;A A - Rn - CSUBB A,direct;A A -(direct)- CSUBB A,Ri ;A A -(Ri)- CSUBB A,#data;A A - #data C2减减1指令指令DECDEC A;A A - 1DEC Rn ;Rn Rn - 1DEC direct;direct (direct)- 1DEC Ri;(Ri)(Ri)- 1第第3 3章章 单片机汇编程序设计单片机汇

33、编程序设计 在在MCS-51单片机中,只提供了一种带借位的单片机中,只提供了一种带借位的减法指令,减法指令,没有提供一般的减法指令没有提供一般的减法指令,一般的减法,一般的减法操作可以通过先对操作可以通过先对CY标志清零,然后再执行带借位标志清零,然后再执行带借位的减法来实现。的减法来实现。 其中,其中,SUBB指令在执行时要影响指令在执行时要影响CY、AC、OV和和P标志位。而标志位。而DEC指令除了指令除了DEC A要影响要影响P标标志位外,对其它标志位都没有影响。志位外,对其它标志位都没有影响。 【例【例3-5】求】求R3 R2 - R1。程序为:程序为:MOV A,R2R2-ACLR

34、C;清空清空CY借位标志借位标志SUBB A,R1;A-R1-AMOV R3,A;结果放入结果放入R3第第3 3章章 单片机汇编程序设计单片机汇编程序设计3乘法指令乘法指令MUL 在在MCS-51单片机中,乘法指令单片机中,乘法指令只有一条只有一条:MUL AB 该指令执行时将对存放于累加器该指令执行时将对存放于累加器A中的无符号中的无符号被乘数和放于被乘数和放于B寄存器中的无符号乘数相乘,积的寄存器中的无符号乘数相乘,积的高字节存于高字节存于B寄存器寄存器中,低字节存于累加器中,低字节存于累加器A中。中。 指令执行后将影响指令执行后将影响CY和和OV标志,标志,CY复位,对复位,对于于OV:

35、当积大于:当积大于255时时(即即B中不为中不为0),OV为为1;否;否则,则,OV为为0。4除法指令除法指令DIV 在在MCS-51单片机中,除法指令也单片机中,除法指令也只有一条只有一条:DIV AB第第3 3章章 单片机汇编程序设计单片机汇编程序设计 该指令执行时将用存放在累加器该指令执行时将用存放在累加器A中的无符号被中的无符号被除数与存放在除数与存放在B寄存器中的无符号除数相除,除得的寄存器中的无符号除数相除,除得的结果,商的存于累加器结果,商的存于累加器A中,余数存于中,余数存于B寄存器中。寄存器中。 指令执行后将影响指令执行后将影响CY和和OV标志,一般情况标志,一般情况CY和和

36、OV都清都清0,只有当,只有当B寄存器中的除数为寄存器中的除数为0时,时,CY和和OV才被置才被置1。5十进制调整指令十进制调整指令 在在MCS-51单片机中,十进制调整指令只有一条:单片机中,十进制调整指令只有一条:DA A 它只能用在它只能用在ADD或或ADDC指令后面指令后面,用来对两个,用来对两个二位的压缩的二位的压缩的BCD码数码数(8位位)通过用通过用ADD或或ADDC指令指令相加后存于累加器相加后存于累加器A中的结果进行调整,使得它得到正中的结果进行调整,使得它得到正确的十进制结果。通过该指令可实现两位十进制确的十进制结果。通过该指令可实现两位十进制BCD码数的加法运算。码数的加

37、法运算。第第3 3章章 单片机汇编程序设计单片机汇编程序设计它的调整过程为:它的调整过程为: (1)若累加器若累加器A的低四位为十六进制的的低四位为十六进制的AF或辅助进或辅助进位标志位标志AC为为1,则累加器,则累加器A中的内容作加中的内容作加06H调整。调整。 (2)若累加器若累加器A的高四位为十六进制的的高四位为十六进制的AF或进位标或进位标志志CY为为1,则累加器,则累加器A中的内容作加中的内容作加60H调整。调整。3.3.3 逻辑操作指令逻辑操作指令一逻辑与指令一逻辑与指令ANLANL A,Rn A A RnANL A,direct A A (direct)ANL A,Ri A A

38、(Ri)ANL A,#data A A dataANL direct,A (direct) (direct) AANL direct,#data (direct) (direct) data第第3 3章章 单片机汇编程序设计单片机汇编程序设计二逻辑或指令二逻辑或指令ORLORL A,Rn A A RnORL A,direct A A (direct)ORL A,Ri A A (Ri)ORL A,#data A A dataORL direct,A (direct) (direct) AORL direct,#data (direct) (direct) data三逻辑异或指令三逻辑异或指令XR

39、LXRL A,Rn A A RnXRL A,direct A A (direct)XRL A,Ri A A (Ri)XRL A,#data A A dataXRL direct,A (direct) (direct) AXRL direct,#data (direct) (direct) data第第3 3章章 单片机汇编程序设计单片机汇编程序设计 在使用中,逻辑与用于实现对在使用中,逻辑与用于实现对指定位清指定位清0,其余,其余位不变;逻辑或用于实现对位不变;逻辑或用于实现对指定位置指定位置1,其余位不变;,其余位不变;逻辑异或用于实现逻辑异或用于实现指定位取反指定位取反,其余位不变。,其余

40、位不变。【例【例3-7】写出完成下列功能的指令段。】写出完成下列功能的指令段。1) 对累加器对累加器A中的中的1、3、5位清位清0,其余位不变,其余位不变ANL A,#11010101B2) 对累加器对累加器A中的中的2、4、6位置位置1,其余位不变,其余位不变ORL A,#01010100B3) 对累加器对累加器A中的中的0、1位取反,其余位不变位取反,其余位不变XRL A,#00000011B四清零和求反指令四清零和求反指令(8位同时操作位同时操作)1清零指令:清零指令:CLR A A 02求反指令:求反指令:CPL A A 第第3 3章章 单片机汇编程序设计单片机汇编程序设计 在在MCS

41、-51系统中,系统中,只能对累加器只能对累加器A中的内容进行清中的内容进行清零和求反,如要对其它的寄存器或存储单元进行清零和零和求反,如要对其它的寄存器或存储单元进行清零和求反,则须放在累加器求反,则须放在累加器A进行,运算后再放回原位置。进行,运算后再放回原位置。【例【例3-8】写出对】写出对R0寄存器内容求反的程序段。寄存器内容求反的程序段。程序为:程序为:MOV A,R0CPL AMOV R0,A五循环移位指令五循环移位指令 MCS-51系统有四条对累加器系统有四条对累加器A的循环移位指令,的循环移位指令,前两条只在累加器前两条只在累加器A中进行循环移位,后两条还要带中进行循环移位,后两

42、条还要带进位标志进位标志CY进行循环移位。每一次移一位。分别如进行循环移位。每一次移一位。分别如下:下:第第3 3章章 单片机汇编程序设计单片机汇编程序设计1) 累加器累加器A循环左移循环左移RL A2) 累加器累加器A循环右移循环右移RR A3) 带进位的循环左移带进位的循环左移RLC A4) 带进位的循环右移带进位的循环右移RRC A【例【例3-9】若累加器】若累加器A中的内容为中的内容为10001011B,CY=0,则执行则执行RLC A指令后累加器指令后累加器A中的内容为中的内容为00010110,CY=1。第第3 3章章 单片机汇编程序设计单片机汇编程序设计3.2.5 指令寻址指令寻

43、址一绝对寻址一绝对寻址 绝对寻址是在指令的操作数中直接提供目的位置绝对寻址是在指令的操作数中直接提供目的位置的地址或地址的一部份。在的地址或地址的一部份。在MCS-51系统中,长转移系统中,长转移和长调用提供和长调用提供16位目的位置地址,绝对转移和绝对调位目的位置地址,绝对转移和绝对调用提供用提供16位地址目的位置的低位地址目的位置的低11位,它们都为绝对寻位,它们都为绝对寻址。址。 相对寻址是以当前程序计数器相对寻址是以当前程序计数器PC值加上指令中值加上指令中给出的偏移量给出的偏移量rel得到目的位置的地址。在得到目的位置的地址。在MCS-51系系统中,相对转移指令的操作数属于相对寻址。

44、统中,相对转移指令的操作数属于相对寻址。二相对寻址二相对寻址第第3 3章章 单片机汇编程序设计单片机汇编程序设计在使用相对寻址时要注意以下两点:在使用相对寻址时要注意以下两点: (1)当前当前PC值是指:转移指令的地址加上转移指令值是指:转移指令的地址加上转移指令自身的字节长度,实际上是转移指令的下一条指令的自身的字节长度,实际上是转移指令的下一条指令的地址。例如:若转移指令的地址为地址。例如:若转移指令的地址为2010H,转移指令,转移指令的长度为的长度为2字节,则转移指令执行时的字节,则转移指令执行时的PC值为值为2012H。 (2)偏移量偏移量rel是是8位有符号数,以补码表示,它的位有

45、符号数,以补码表示,它的取值范围为取值范围为-128+127。当为负值时,向前转移,当为。当为负值时,向前转移,当为正数时向后转移。正数时向后转移。 相对寻址的目的地址为:相对寻址的目的地址为: 目的地址目的地址=当前当前PC+rel =转移指令的地址转移指令的地址+转移指令的字节数转移指令的字节数+rel第第3 3章章 单片机汇编程序设计单片机汇编程序设计3.3.4 控制转移指令控制转移指令 共有共有17条,包括无条件转移指令、条件转移指条,包括无条件转移指令、条件转移指令、子程序调用及返回指令。令、子程序调用及返回指令。一无条件转移指令一无条件转移指令 无条件转移指令是指当执行该指令后,程

46、序将无无条件转移指令是指当执行该指令后,程序将无条件地转移到指令指定的地方去。无条件转移指令包条件地转移到指令指定的地方去。无条件转移指令包括长转移指令、绝对转移指令、相对转移指令和间接括长转移指令、绝对转移指令、相对转移指令和间接转移指令。转移指令。1长转移指令长转移指令LJMP 指令格式:指令格式:LJMP addr16;PC addr16 指令后面带目的位置的指令后面带目的位置的16位地址,执行时直接将位地址,执行时直接将该该16位地址送给程序指针位地址送给程序指针PC,程序无条件地转到,程序无条件地转到16位位目标地址指明的位置去。目标地址指明的位置去。第第3 3章章 单片机汇编程序设

47、计单片机汇编程序设计 指令中提供的是指令中提供的是16位目标地址,所以可以转移到位目标地址,所以可以转移到64KB程序存储器的任意位置,故得名为程序存储器的任意位置,故得名为“长转移长转移”。该指令不影响标志位,使用方便。该指令不影响标志位,使用方便。缺点是:执行时间长,字节数多缺点是:执行时间长,字节数多.2绝对转移指令绝对转移指令指令格式:指令格式:AJMP addr11;PC 100 addr11 AJMP指令后带的是目的位置的低指令后带的是目的位置的低11位直接地址,位直接地址,执行时,先将程序指针执行时,先将程序指针PC的值加的值加2(该指令长度为该指令长度为2字字节节),然后把指令

48、中的,然后把指令中的11位地址位地址addr11送给程序指针送给程序指针PC的低的低11位,而程序指针的高位,而程序指针的高5位不变,执行后转移位不变,执行后转移到到PC指针指向的新位置。指针指向的新位置。 该指令是为兼容该指令是为兼容Intel MCS-48单片机程序设计的,单片机程序设计的,实际中很少有。实际中很少有。第第3 3章章 单片机汇编程序设计单片机汇编程序设计 由于由于11位地址位地址addr11的范围是的范围是2KB,而目的地址的,而目的地址的高高5位不变,所以程序转移的位置只能是和当前位不变,所以程序转移的位置只能是和当前PC位位置置(AJMP指令地址加指令地址加2)在同一在

49、同一2KB范围内。转移可以范围内。转移可以向前也可以向后,指令执行后不影响状态标志位。向前也可以向后,指令执行后不影响状态标志位。【例【例3-10】若】若AJMP指令地址为指令地址为3000H。AJMP后面后面带的带的11位地址位地址addr11为为123H,则执行指令,则执行指令AJMP addr11后转移的目的位置是多少?后转移的目的位置是多少? AJMP指令的指令的PC值加值加2=3000H+2=3002H=00110 000 00000010B 指令中的指令中的addr11=123H=001 00100011B 转移的目的地址为转移的目的地址为0011 0001 0010 0011B=

50、3125H第第3 3章章 单片机汇编程序设计单片机汇编程序设计3相对转移指令相对转移指令指令格式:指令格式:SJMP rel ;PC PC + 2 + rel SJMP指令后面的操作数指令后面的操作数rel是是8位带符号补码数,位带符号补码数,执行时,先将程序指针执行时,先将程序指针PC的值加的值加2(该指令长度为该指令长度为2字字节节),然后再将程序指针,然后再将程序指针PC的值与指令中的位移量的值与指令中的位移量rel相加得转移的目的地址。即:相加得转移的目的地址。即:转移的目的地址转移的目的地址= SJMP指令所在地址指令所在地址+2+rel 因为因为8位补码的取值范围为位补码的取值范围

51、为-128+127,所以该指,所以该指令的转移范围是:相对令的转移范围是:相对PC当前值向前当前值向前128字节,向后字节,向后127字节。字节。【例【例3-11】在】在2100H单元有单元有SJMP指令,若指令,若rel = 5AH(正数正数),则转移目的地址为,则转移目的地址为215CH(向后转向后转);若;若rel = F0H(负数负数),则转移目的地址为,则转移目的地址为20F2H(向前转向前转)。第第3 3章章 单片机汇编程序设计单片机汇编程序设计 用汇编语言编程时,指令中的相对地址用汇编语言编程时,指令中的相对地址rel往往往往用用目的位置的标号目的位置的标号(符号地址符号地址)表

52、示表示。机器汇编时,能。机器汇编时,能自动算出相对地址值。自动算出相对地址值。注意:在单片机程序设计中,通常用到一条注意:在单片机程序设计中,通常用到一条SJMP指令:指令:SJMP $ 该指令的功能是在自己本身上循环,进入等待该指令的功能是在自己本身上循环,进入等待状态。其中符号状态。其中符号 $ 表示转移到本身。在程序设计中,表示转移到本身。在程序设计中,程序的最后一条指令通常用它,使程序不再向后执行程序的最后一条指令通常用它,使程序不再向后执行以避免执行后面的内容而出错。以避免执行后面的内容而出错。 第第3 3章章 单片机汇编程序设计单片机汇编程序设计4间接转移指令间接转移指令 指令格式

53、:指令格式: JMP A+DPTR ;PC A + DPTR 它是它是MCS-51系统中唯一一条间接转移指令,转系统中唯一一条间接转移指令,转移的目的地址是由移的目的地址是由DPTR的内容与累加器的内容与累加器A中的内容中的内容相加得到,指令执行后不会改变相加得到,指令执行后不会改变DPTR及及A中原来的中原来的内容。内容。 数据指针数据指针DPTR的内容一般为基址,累加器的内容一般为基址,累加器A的的内容为相对偏移量,在内容为相对偏移量,在64 KB范围内无条件转移。范围内无条件转移。 该指令的特点是转移地址可以在程序运行中加以该指令的特点是转移地址可以在程序运行中加以改变。改变。DPTR一

54、般为确定值,根据累加器一般为确定值,根据累加器A的值来实的值来实现现转移到不同的分支转移到不同的分支。在使用时往往与一个转移指令。在使用时往往与一个转移指令表一起来实现多分支转移。表一起来实现多分支转移。(switch/case)第第3 3章章 单片机汇编程序设计单片机汇编程序设计【例【例3-12】下面的程序能根据累加器】下面的程序能根据累加器A的值的值0、2、4、6转移到转移到相应的相应的TAB0TA6分支去执行。分支去执行。MOV DPTR,#TABLE ;表首地址送;表首地址送DPTRJMP A+DPTR ;根据;根据A值转移值转移TABLE:AJMP TAB0 ;当;当(A)=0时转时

55、转TAB0执行执行AJMP TAB2 ;当;当(A)=2时转时转TAB2执行执行AJMP TAB4 ;当;当(A)=4时转时转TAB4执行执行AJMP TAB6 ;当;当(A)=6时转时转TAB6执行执行二条件转移指令二条件转移指令 条件转移指令是指当条件满足时,程序转移到指条件转移指令是指当条件满足时,程序转移到指定位置,条件不满足时,程序将继续顺次执行。在定位置,条件不满足时,程序将继续顺次执行。在MCS-51系统中,条件转移指令有三种:累加器系统中,条件转移指令有三种:累加器A判零判零条件转移指令、比较转移指令、减条件转移指令、比较转移指令、减1不为零转移指令。不为零转移指令。第第3 3

56、章章 单片机汇编程序设计单片机汇编程序设计1) 累加器累加器A判零条件转移指令判零条件转移指令判判0指令:指令:JZ rel ;若若A=0,则,则PC PC + 2 + rel,否则,否则,PC PC + 2判非判非0指令:指令:JNZ rel ;若若A 0,则,则PC PC + 2 + rel,否则,否则,PC PC + 2 【例【例3-13】把片外】把片外RAM的的30H单元开始的数据块传单元开始的数据块传送到片内送到片内RAM的的40H开始的位置,直到出现零为止。开始的位置,直到出现零为止。(减计数器减计数器) 片内、片外数据传送以累加器片内、片外数据传送以累加器A过渡。每次传送过渡。每

57、次传送一个字节,通过循环处理,直到处理到传送的内容一个字节,通过循环处理,直到处理到传送的内容为为0结束。结束。第第3 3章章 单片机汇编程序设计单片机汇编程序设计程序如下:程序如下:MOV R0,#30H;源数据块指针源数据块指针MOV R1,#40H;目的数据块指针目的数据块指针LOOP:MOVX A,R0MOV R1,A;数据交换,以数据交换,以A为中间过渡为中间过渡INC R1;指针递加指针递加INC R0;指针递加指针递加JNZ LOOP;判断是否循环结束判断是否循环结束SJMP $;程序结尾处死循环程序结尾处死循环2比较转移指令比较转移指令 比较转移指令用于对两个数作比较,并根据比

58、较转移指令用于对两个数作比较,并根据比较情况进行转移。比较情况进行转移。(if)比较转移指令有四条:比较转移指令有四条:第第3 3章章 单片机汇编程序设计单片机汇编程序设计CJNE A,#data,rel ;若若A=data,则,则PC PC +3,不转移,继续执行,不转移,继续执行若若Adata,则,则C=0,PC PC + 3 + rel,转移,转移若若Adata,则,则C=0,PC PC + 3 + rel,转移,转移若若(Rn)data,则,则C=0,PC PC + 3 + rel,转移,转移若若(Ri)direct,则,则C=0,PC PC + 3 + rel,转移,转移若若ACAN

59、L C,P1.1;P1.0 & P1.1CPL C;结果取反结果取反(与非与非)ORL C,/P1.2;P1.2取反与取反与C相或相或MOV F0 ,C;结果暂存到结果暂存到F0MOV C,P1.3;P1.3-CORL C,P1.4; P1.3 | P1.4ANL C, F0;结果与结果与F0相与相与CPL C;取反取反(与非与非)MOV P1.5,C;结果输出到结果输出到P1.5三位转移指令三位转移指令 位转移指令有以位转移指令有以C为条件的位转移指令和以为条件的位转移指令和以bit为条为条件的位转移指令,共件的位转移指令,共5条。条。第第3 3章章 单片机汇编程序设计单片机汇编程序

60、设计1以以C条件的位转移指令条件的位转移指令JC rel; 若若C=1,则转移,则转移,PCPC+2+rel;否则程序继续执行;否则程序继续执行JNC rel ; 若若C=0,则转移,则转移,PCPC+2+rel;否则程序继续执行;否则程序继续执行2以以bit为条件的位转移指令为条件的位转移指令JB bit,rel; 若若(bit)=1,则转移,则转移,PCPC+3+rel;否则程序继续执行否则程序继续执行JNB bit,rel ; 若若(bit)=0,则转移,则转移,PCPC+3+rel;否则程序继续执行否则程序继续执行JBC bit,rel ; 若若(bit)=1,则转移,则转移,PCPC+3+r

温馨提示

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

评论

0/150

提交评论