单片机原理及应用第03章_第1页
单片机原理及应用第03章_第2页
单片机原理及应用第03章_第3页
单片机原理及应用第03章_第4页
单片机原理及应用第03章_第5页
已阅读5页,还剩207页未读 继续免费阅读

下载本文档

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

文档简介

1、单片机原理及应用第三章 MCS-51单片机指令系统本章内容寻址方式 指令的分类、格式及符号说明 分类指令 掌握MCS-51指令系统的各种寻址方式掌握每条指令的格式、功能及用法掌握指令的操作过程中操作数的变化情况以及对标志位的影响学会正确选用指令完成简单的任务学习目的 MCS-51指令系统共有255种操作代码,用汇编语言表达时,只需熟记42种助记符就能表示33种指令功能共111条指令。 MCS-51单片机指令系统的特点:指令执行时间短。1个机器周期指令有64条,2个机器周期指令有45条,而4个机器周期指令2条。指令字节数少。单字节指令有49条,双字节指令有45条,三字节指令仅有17条。位操作指令

2、丰富。3.1 MCS-51系统单片机指令格式 3.1.1 指令格式 3.1.2 指令的三种表达形式 3.1.3 指令的字节数3.1.4 指令的分类及符号说明 指令格式是指令码的结构形式。表达形式为:3.1.1 指令格式 标号又称为指令地址符号,一般由1-6个符组成,以字母开头的字母数字串。如:START、LOOP、NEXT、MAIN标号: 操作码 操作数 ;注释 操作码用MCS-51单片机所规定的助记符来表示,它命令CPU作何种操作。如:MOV、ADD、ORL等。标号: 操作码 操作数 ;注释 操作数分为目的操作数和源操作数,常用符号(如寄存器、标号)、常量(如立即数、地址值等)来表示。操作码

3、和操作数之间用若干空格分隔,而目的操作数和源操作数之间用逗号“,”分隔。标号: 操作码 操作数 ;注释目的操作数,源操作数寄存器,如:A、B、DPTR、Rn、P0等。标号,如:START、LOOP、MAIN等。例如主程序实际从2000H开始存放,复位后,通过跳转指令LJMP转移至2000H开始执行。 ORG 0000H LJMP START . . . ORG 2000HSTART:- 注释是对该指令作用或功能的说明,以便于阅读,不参与编译(可有可无,不是必备的)。注释部分前一定要用分号“;”隔开。 标号: 操作码 操作数 ;注释3.1.2 指令的三种表达形式 通常,指令有二进制,十六制和助记

4、符等三种表示形式 1) 指令的二进制形式 具有难读、难写、难记忆和难修改等缺点,因此人们通常不用它来编写程序。2) 指令的十六进制形式 虽然读写方便,但仍不易为人们识别和修改,通常也不被用来编写程序 。3) 指令的助记符形式 又称为指令的汇编符或汇编语句形式,是一种由英文单词或缩写字母形象表征指令功能的形式。 如果累加器A中已有一个加数20,那么能够完成206并把结果送入累加器A的加法指令的:二进制形式为: 0011100000000110B;十六进制形式为: 3806H;助记符形式为: ADDA,06H ;A A+06H例如3.1.3 指令的字节数 MCS-51单片机通常可以分为单字节、双字

5、节和三字节指令三种。(1)单字节指令(49条) 单字节指令只有一个字节。通常又可分为两类:1)无操作数单节指令 这类指令的指令码光有操作码字段,操作数是隐含在操作码中的。如:INC DPTR 这类指令的指令码有操作码字段和专门用来指示操作数所在寄存器号的字段组成。 例如:八位数传送指令 MOVA,Rn其中,n的取值范围为07。2)含有操作数寄存器号的单字节指令 双字节指令含有两个字,操作码字节在前,操作数字节在后。 例如:八位数传送指令 MOV A , data ;Adata 这条指令的含义是指令码第二字节data取出来存放到累加器A中2)双字节指令(46条) 这类指令的指令码的第一字节为操作

6、码,第 二字节为操作数或操作数地址。 故三字节指令共可有如下四类:操作码Data15-8Data7-0例如:指令MOV DPTR,data16操作码DirectData例如:指令MOVdirect,data3)三字节指令(16条)操作码DataDirect(rel)例如:指令CJNE A , #data , rel操作码addr15-8addr7-0例如:指令LCALL addr163.1.4 指令的分类及符号说明 MCS-51单片机可以分为五类:1.指令分类2)算术运算指令4)位操作指令3)逻辑运算指令1)数据传送指令5)控制转移指令2、符号的说明(1)Rn:表示当前选中的寄存器区的8个工作

7、寄存器,(n=0-7)中的一个。(2)Ri:表示寄存器间接寻址,Ri只能 是R0或R1。 (3)#data:8位直接地址,实际使用时 data应是00H-FFH中的一个。(4)#data16:表示包含在指令中的16位立 即数。(5)direct:表示8位内部数据存储器单 元的地址。(6)Addr16:表示16位的目的地址。(7)Addr11:表示11位的目的地址。(8)Rel:表示8位带符号的偏移量。(9)DPTR:为数据指针,可用作16位 的地址寄存器。 (10)Bit:表示内部RAM或专用寄存器中 的直接寻址位。(11)A:累加器ACC。(12)B:专用寄存器,用于MUL和DIV指 令中。

8、(13):为间址寄存器或基址寄存器的前 缀。如Ri, A+PC,A+DPTR。(14)/:位操数的前缀,表示对该位操作 数取反。如/bit.(15)$:当前指令的地址。3.2 寻址方式 3.2.1 寄存器寻址 3.2.2 立即寻址3.2.3 直接寻址3.2.4 寄存器间接寻址3.2.5 相对寻址3.2.6 变址寻址3.2.7 位寻址3.2 寻址方式 MCS-51的指令系统共用了七种寻址方式。3.2.1 寄存器寻址 以寄存器的内容为操作数的寻址方式。 可进行寄存器寻址的寄存器有:工作寄存器R0R7、A、B、DPTR和进位CY。MOV A , R0 ;A R0例如:R0(35H)A结果A=35H3

9、5HFFE080用户RAM区位寻址区通用寄存器区7F30200035H3.2.1 寄存器寻址 说明: 源操作数或目的操作数为寄存器 指令中寄存器操作数用寄存器名表示 寄存器操作数为寄存器名中的值 寻址范围:访问选定的工作寄存器 指令码中直接含有所需的操作数,操作数字前加“#”符号为前缀。以区别直接地址。使用时一定要注意! 3.2.2 立即寻址 特点功能:(1)将片内RAM中44H单元 的内容送累加器A,属于直 接寻址; (2)则是把44H这个数本 身送到累加器A,属于立即寻址。 (1)MOV A,44H ;A (44H) (2)MOV A, #44H ;A 44H例源操作数为立即数(即操作数本

10、身)注:51系列单片机有 8 位立即数和 16 位地址 立即数,立即数不能作目的操作数。寻址范围:程序寄存器注:操作码下一单元。例: MOV A,#20H MOV DPTR,#2000H3.2.2 立即寻址 说明 直接寻址指令的指令码中含有操作数地址。 3.2.3 直接寻址功能:将片内RAM 56H单元中的内容34H送到累加器A中。如左图3.1例:MOV A,56H ;A (56H) 机器码:E5 5634H片内RAM 34H累加器A56H 图3.1 指令传递 直接寻址可访问128B的RAM单元和特殊功能寄存器SFR。对于特殊功能寄存器既可以使用它们的地址,也可使用它们的代码。如:MOV A,

11、P2;P2AMOV A,0A0H;P2的地址为0A0H3.2.3 直接寻址说明 3.2.4 寄存器间接寻址 指令指定寄存器中的内容为操作数的地址。 工作寄存器R0、R1和专用寄存器DPTR可用于间接寻址,在寄存器前加“”符号作前缀。MOV A,R0 ;A R0MOV A,R0;A (R0)例如:R065H,65H26H如图3.2所示,执行结果A65H,执行结果A26H。注意:是它区别寄存器寻址的标志。26H片内RAMA65H 图3.2 R065H 3.2.4 寄存器间接寻址(1)R0, R1可寻址内部RAM 00 7FH 共128B单元内容,不能寻址特殊功能寄存器。MOV A, R0MOV A

12、, R1说明 3.2.4 寄存器间接寻址(2)R0, R1可寻址外部RAM 00 FFH 共256B单元内容。MOVX A, R0MOVX A, R1 说明 3.2.4 寄存器间接寻址(3)DPTR寻址外部数据存储器的64KB空间 MOVX A, DPTR ;A(DPTR) MOVX DPTR, A ;(DPTR)A 说明3.2.5 相对寻址 相对寻址是将程序计数器PC中的当前内容与指令第二字节所给出的数相加,其和为跳指令的转移地址。 20008026HSJMPrel;PC PC+2+rel程序存储器A图3-3 指令过程 PC 26H0000H2000H2001H 80H 26H 2028H0

13、2H 20H A L U2002H例3.2.5 相对寻址寻址空间:程序存储器偏移量rel的范围是:128 +127转移公式:PC目的地址 = PC当前地址 + rel说明3.2.6 变址寻址 以DPTR和PC基址寄存器和累加器A变址寄存器的内容和为地址,寻址该地址单元,读取数据。 (1)MOVCA,APC;A(APC)(2)MOVCA,ADPTR ;A(ADPTR) 执行第一条时先取指,将该指令取完后的PC值和累加器A中的偏移量相加,作为操作数地址,从该地址中取出操作数送入A中。第二条过程与第一条指令类似,例如: 已知:片外ROM的2006H单元中有一数34H,编写程序用变址寻址方法把这个数送

14、入A中,试进行分析。 解:根据题目要求,基址可定为2000H,地址偏移量则为06H,程序如下:MOVDPTR,2000H ;DPTR2000HMOVA,06H ;A06HMOVCA,ADPTR ;A34H例程序存储器A 图3.4 DPTR20 06H0000H34H 2006H 00H A L U 如图3.4所示,这里A具有双重作用,在指令执行前用来存放地址偏移量,指令执行后为目的操作数。 3.2.6 变址寻址 说明寻址范围:64KB程序存储器变址 + 基址形成的ROM地址中的值为操作数基址寄存器 DPTR 16 位数据指针 PC 16 位程序指针变址寄存器 A 8 位累加器 3.2.7 位寻

15、址 当我们把八位二进制数中某一位作为操作数看待时,这个操作数的地址就称为位地址,对位地址寻址简称位寻址。 MOV 30H,C ; 30H是位寻址位地址 MOV A,30h ; 30H是直接寻址的字节地址 MOVC,ACC.7 ;CyACC.7 由上面指令可知,位寻址的位地址与直接寻址的字节地址形式完全一样,主要由操作码来区分,使用时需应该特别注意。例如3.2.7 位寻址说明位寻址仅对片内RAM的部分区域有效 片内通用RAM区 字节地址为20H 2FH,16 Byte单元共有128 bit 位 片内专用RAM区 能被 8 整除的特殊功能寄存器单元的字节地址3.2.7 位寻址说明位地址表示:直接使

16、用位地址。对于20H2FH的16个单元共128位的位地址分布是00H7FH。单元地址.位地址 20H.1。对于特殊功能寄存器,可以直接用寄存器名字加位数或位名表示,如PSW.3 , 位名:CY, AC。 序号寻址方式寻址空间1寄存器寻址寄存器R0R7、A、B、DPTR、C2直接寻址内部RAM低128B、SFR3寄存器间接寻址内部RAM低128B、外部RAM4立即寻址程序存储ROM5变址寻址程序存储器(A+DPTR,A+PC)6相对寻址程序存储器ROM(PC+127-128)7位寻址内部RAM的20H2F单元和部分SFR课堂小结:MOV 30H,R7 MOV A,55H MOV A,55HJMP

17、 A+DPTR MOV 30H,CMOV A,R0MOVX A,R0练习一答案:寄存器寻址方式 直接寻址方式 立即寻址方式 变址寻址方式 位寻址方式 间接寻址方式 间接寻址方式 说明下列指令中源操作数采用的寻址方式。MOV R0,R3 MOVC A, R0+DPTR ADD R0,R1MUL AR0 练习二改错题。1.MOV R0,R3 间址寄存器不能使用R2R7。练习二4.MUL AR0乘法指令中的乘数应在B寄存器中,即乘法指令只可 使用AB寄存器组合3.ADD R0,R1运算指令中目的操作数必须为累加器A,不可为R0。2.MOVC A, R0+DPTR变址寻址方式中的间址寄存器不可使用R0

18、,只可使用A。答案3.3 指令系统 3.3.1 数据传送指令 3.3.2 算逻运算和移位指令 3.3.3 控制转移和位操作指令3.3.4 伪指令数据传送指令是计算机中最基本、应用最广泛的指令类型。MCS-51单片机有四类 29 条数据传送指令。 内部数据传送指令(15条) 外部数据传送指令(7条) 数据交换指令(5条) 堆栈操作指令(2条) 3.3.5 数据传送指令指令格式: MOV , 注: 为源字节, 为目的字节指令功能:将源字节送到目的字节单元,且源字节单元中的源字节不变。内部数据传送指令 MOV A,#data ;A data 8 位立即数送累加器 A MOV Rn,#data ;Rn

19、 data 8 位立即数送工作寄存器 R0 R7 MOV Ri,#data ;( Ri ) data 8 位立即数送 R0、R1 表示的间接地址中 MOV direct,#data ;( direct ) data 8 位立即数送 direct 的直接地址中立即寻址型内部数据传送指令 已知:R030H,试问执行如下指令后累加器A、R3、30H、31H单元中内容各是什么?MOV A, #20HMOV R3, #45HMOV R0, #46HMOV 31H, #47H例执行后,结果为: A=20H, R3=45H, (30H)=46H, (31H)=47H内部数据传送指令立即寻址型 已知:R030

20、H,试问执行如下指令后累加器A、R3、30H、31H单元中内容各是什么?MOVA, #50H;MOV R3, #65H;MOV R0, #68H;MOV 31H, #70H; 练习A50HR3 65H(R0) 68H(31H) 70H执行后,结果为: A50H,R365H,(30H)68H,(31H)70H立即寻址型内部数据传送指令.目的操作数为寄存器寻址方式 二字节机器码:一字节操作码 一字节源操作数 例: MOV A,#20H ;机器码: 74H、20H 例: MOV R0,#20H ;机器码: 01111000B、20H 例: MOV R7,#30H ;机器码: 01111111B、30

21、H说明立即寻址型内部数据传送指令目的操作数为直接寻址方式 三字节机器码:一字节操作码 一字节目的地址操作数 一字节源操作数 例: MOV P1,#20H ;机器码: 75H、90H、20H MOV A0H,#30H ;机器码: 75H、A0H、30H说明立即寻址型内部数据传送指令目的操作数为寄存器间址寻址方式 二字节机器码:一字节操作码 一字节源操作数 例: MOV R0,#20H ;机器码: 01110110B、20H MOV R1,#30H ;机器码: 01110111B、30H说明立即寻址型内部数据传送指令MOV A,direct ;A (direct) MOV direct,A ;(d

22、irect) A MOV Rn,direct ;Rn (direct)MOV Ri,direct ;(Ri) (direct)MOV direct1,direct2 ;(direct1) (direct2) 直接寻址型内部数据传送指令 已知:R1=20H、(21H)=54H、(22H)=55H、(30H)=56H,试问执行如下指令后,结果A、40H、R2、20H、和P2口中的内容各是什么? MOV A , 21H; MOV 40H ,A; MOV R2 , 22H; MOV R1 , 21H; MOV P2, 30H;例A(21H) =54H(40H) AR2 (22H)=55H(R1) (2

23、1H)=54HP2 (30H) =56H结果为:A=54H,(40H)=54H ,R2=55H ,(20H)=54H ,P2=56H直接寻址型内部数据传送指令 已知:R2=20H、(21H)=23H、(22H)=45H、(30H)=78H,试问执行如下指令后,结果A、40H、R1、20H、和P2口中的内容各是什么? MOV A , 21H; MOV 40H ,A; MOV R1 , 22H; MOV R2 , 21H; MOV P2, 30H;练习A(21H) =23H(40H) AR1 (22H)=45H(R2) (21H)=23HP2 (30H) =56H结果为:A=23H,(40H)=2

24、3H ,R1=45H ,(20H)=23H ,P2=78H直接寻址型内部数据传送指令 另一操作数为寄存器寻址方式 二字节机器码:一字节操作码 一字节地址操作数 例: MOV A,20H ;机器码: E5H、20H MOV 20H,A ;机器码: F5H、20H MOV R0,20H ;机器码: 10101000 B、20H MOV R7,30H ;机器码: 10101111 B、30H MOV 20H,R0 ;机器码: 10001000 B、20H MOV 30H,R7 ;机器码: 10001111 B、30H说明直接寻址型内部数据传送指令 另一操作数为直接寻址方式 三字节机器码:一字节操作码

25、 一字节源地址操作数 一字节目的地址操作数 例: MOV ACC,20H ;机器码: 85H、E0H、20H MOV E0H,30H ;机器码: 85H、E0H、30H MOV 60H,30H ;机器码: 85H、60H、30H说明直接寻址型内部数据传送指令 另一操作数为寄存器间接寻址方式 二字节机器码:一字节操作码 一字节地址操作数 例: MOV R0,20H ;机器码: 10100110 B、20H MOV R1,30H ;机器码: 10100111 B、30H MOV 20H,R0 ;机器码: 10000100 B、20H MOV 30H,R1 ;机器码: 10000101 B、30H说

26、明直接寻址型内部数据传送指令MOV A,Rn ;A RnMOV Rn,A ;Rn AMOV direct,Rn ;( direct ) Rn 寄存器寻址型内部数据传送指令 已知:R1=30H、R2=31H、(56H)=23H,试问执行以下指令后,结果各是什么?MOV A , R1 MOV R2 , A MOV 56H , R1结果为:A=30H ,R2=30H ,(56H)=30H例 已知:R1=1EH、R2=2FH、(56H)=3DH,试问执行以下指令后,结果各是什么? MOV A ,R2 ; MOV R1 ,A ; MOV 56H ,R1;练习AR2 =2FHR1 A=2FH(56H) R

27、1=2FH结果为:A=2FH ,R2=2FH ,(56H)=2FH 寄存器寻址型内部数据传送指令 另一操作数为寄存器寻址方式 一字节机器码:仅有操作码 操作数隐含在操作码中 例: MOV A,R0 ;机器码: 11101000 B MOV R1 ,A ;机器码: 11111001B说明寄存器寻址型内部数据传送指令 另一操作数为直接寻址方式 二字节机器码:一字节操作码 一字节地址操作数 例: MOV 30H,R0 ;机器码: 10001000 B、30H MOV R1,30H ;机器码: 10101001 B、30H说明寄存器寻址型内部数据传送指令MOV A,Ri ;A (Ri)MOV Ri,A

28、 ;( Ri ) A MOV direct,Ri ;( direct ) ( Ri ) 注: 源、目的操作数中仅有一个为间址寄存器间接寻址型内部数据传送指令 已知:(30H)=12H、(31H)=13H、R0=30H、R1=31H,试问执行以下指令后A、30H、31H和32H各是什么? MOV A ,R0; MOV R1,A; MOV R0,#34H; MOV 32H ,R1;例A(R0) =12H(R1) A=12H(R0) 34H(32H) (R1)结果为:A=12H ,(30H)=34H , (31H)=12H ,(32H)=12H寄存器间接寻址型内部数据传送指令 已知:(40H)=56

29、H、(41H)=78H、R0=40H、R1=41H,试问执行以下指令后A、40H、41H和32H各是什么? MOV A ,R0; MOV R1,A; MOV R0,#34H; MOV 32H ,R1;练习A(R0) =56H(R1) A=56H(R0) 34H(32H) (R1)结果为:A=56H ,(40H)=34H , (41H)=56H ,(32H)=56H寄存器间接寻址型内部数据传送指令另一操作数为累加器A 一字节机器码:仅有操作码 操作数隐含在操作码中 例: MOV A,R0 ;机器码: 11100110 B MOV R1 ,A ;机器码: 11110111B讨论寄存器间接寻址型内部

30、数据传送指令另一操作数为直接寻址方式 二字节机器码:一字节操作码 一字节地址操作数 例: MOV 30H,R0 ;机器码: 10000100 B、30H MOV 30H,R1 ;机器码: 10000101 B、30H讨论寄存器间接寻址型内部数据传送指令 MOV A,#dataMOV A, directMOV direct,AMOV A,RnMOV Rn,AMOV A,RiMOV Ri,AMOV Rn,#dataMOV direct ,#dataMOV Ri, #dataMOV Rn, directMOV direct, RnMOV Ri, directMOV direct, Ri MOV di

31、rect,direct小结内部数据传送指令 累加器 A 寻址Ri 间接寻址direct 直接寻址Rn 工作寄存器寻址#data 立即数寻址内部数据传送指令 MOV R0,R1 MOV R1,R7 MOV R0, R1MOV A,R1MOV R0,AMOV A,R7MOV R1,A MOV R6 ,R0MOV A, R0MOV R6 ,AMOV A, R1MOV R0 ,A错误正确练习判断下列指令的正误,将错误的更正. 外部数据传送指令16位数据传送指令MOV DPTR,#data16 ;DPTR 外部 RAM、ROM的 16 位地址值 16位数据传送指令( 1 条)60H 9061H 2062

32、H 30程序存储器302000H7FH80H81H82H83H片内数据 存储器例:MOV DPTR,#2030H 访问外部 ROM 存储器的指令( 2 条)MOVC A,A + DPTR ;A (A+DPTR) 数据指针MOVC A,A + PC ;PC PC + 1、A (A+PC)程序指针注:PC 不能随便改变,称为近程查表 DPTR 可随时赋值,称远程查表 故 A+DPTR 比 A+PC 更常用外部数据传送指令访问外部ROM指令60H 9061H 2062H 3063H 93程序存储器3020访问外部ROM指令例:CLR A MOV DPTR,#2030H MOVC A,A + DPTR

33、 2030H AA00H7FH80H81H82H83H片内数据 存储器E0HAA2000H 742001H 052002H 832003H 程序存储器访问外部ROM指令2008H AA00H7FH80H81H82H83H片内数据 存储器E0HAA例:MOV A,#05H MOVC A,A + PC 05 AA 已知:1000H:MOV A,#10H ;A = 10H 1002H:MOVC A,A+PC 表项1010H:02H1011H:04H1012H:06H1013H:08H A (A+PC)、A = 08H 结果; 取指后PC = 1003H、A + PC = 1013H注: 表项地址范围

34、为 1003H 1003H + FFH外部数据传送指令访问外部ROM指令例 已知:片外ROM的2008H单元中有一数34H,试用两条外部ROM数据传送指令各编写一个程序,把数送到片7FH单元。解:采用DPTR作为基址寄存器,基址可定为2000H,地址偏移量则为08H,程序如下:MOVDPTR,2000H ;DPTR2000HMOVA,08H ;A08HMOVCA,ADPTR ;A34HMOV7FH,A ;(7FH)A例程序存储器A DPTR20 08H0000H34H 2008H 00H A L U 如图所示,这里A具有双重作用,在指令执行前用来存放地址偏移量,指令执行后为目的操作数。 34H

35、 34H 采用PC作为基址寄存器,程序如下: ORG 0000H SJMP START ORG 2000HSTART:MOVA,05H ;A05H MOVCA,APC ;A34H MOV7FH,A ;(7FH)A例 外部 RAM 存储器的指令( 4 条)MOVX A,Ri ;外部RAM的00H FFH单元读MOVX Ri,A ;外部RAM的00H FFH单元写MOVX A,DPTR ;外部RAM的64K单元读MOVX DPTR,A ;外部RAM的64K单元写注:MOVC 指令仅读操作 , MOVX 指令可读写操作访问外部存储器仅用间址,不用直接地址外部数据传送指令访问外部RAM指令 已知外部R

36、AM的60H单元中有一个数为30H,试编程把30H送到片外RAM的2000H单元中。例外部数据传送指令访问外部RAM指令解: MOV R1,#60H ;R1=60H MOVX A,R1 ;A=30H MOV DPTR ,#2000H ;DPTR=2000H MOVX DPTR,A ;2000H30H SJMP $ ;停止分析:上面虽都是片外RAM的地址单元,但不能直接传送,必须经过累加器A的转送,才能实现。 MOVX A,2000H MOVX A,20H错误MOV DPTR,#2000H MOVX A,DPTR错误MOV R0,#20H MOVX A,R0练习判断下列指令的正误,将错误的更正.

37、访问外部RAM指令 字节数据交换指令 XCHXCH A,Rn ;A Rn XCH A,direct ;A (direct)XCH A,Ri ;A (Ri)数据交换指令00HFFE080用户RAM区位寻址区通用寄存器区7F302000已知:A=AAH,R0=00H,执行如下指令后,结果如何? XCH A,R0结果:A=00H,R0=AAHAAH例 低 4 位数据交换指令 XCHD 累加器 A 中高低 4 位交换指令 SWAPXCHD A,Ri ;A03 (Ri)03SWAP A ;A03 A47注:交换指令均与累加器 A 有关数据交换指令已知:片内20H单元有一个数为30H,片外20H单元有一个

38、数为03H,编程把二个数相互交换。例解:MOV R0 , #20H ;R020H MOVX A ,R0 ; A03H XCH A , R0 ;A30H ,20H03H MOVX R0 ,A ;30H20H(外部RAM) SJMP $ ;停止分析:片内、片外没有直接的交换指令,必须经过累加器A的中转,才能实现。数据交换指令 堆栈操作的规则:先进后出,后进先出。PUSH direct ;SP SP + 1、(SP)(direct)POP direct ;( direct )(SP)、 SP SP 1堆栈操作指令61HPUSH A已知:A=AAH, SP=60H,执行如下指令后,结果如何? 结果:

39、SP=61H ,(61H)=AAH例FFHE0H81H80HAAH位寻址区通用寄存器区2FH20H00H7FH62H61H60H60HSPAAHPUSH A61H61HPOP A已知:A=00H, SP=61H,(61H)=AAH,执行如下指令后,结果如何? 结果: SP=60H , A=AAH例00HFFHE0H81H80H位寻址区通用寄存器区2FH20H00H7FH62H61H60H60HSP 61HAAH例已知:(20H)=M1、(50H)=M2、编写程序用堆栈指令把20H和50H单元中的内容相交换。解:由堆栈所具备的原则,程序为:MOV SP,#60H ;设置栈底首址为60HPUSH

40、20H ;SPSP+1,61 M1PUSH 50H ;SPSP+1,62 M2POP 20H ;(20H)M2, SP SP-1= 61HPOP 50H ;(50H)M1, SP SP-1= 60H在MCS-51指令系统中,该类指令为其核心,共48条可分为三大类:算术运算指令(24条)逻辑运算指令(20条)移位指令(4条)3.3.6 算逻运算和移位指令 加法指令(13条): 减法指令(8条): 十进制调整指令(1条): 乘法和除法指令(2条):ADD 、ADDC 、INC 、DASUBB 、DECDAMUL、DIV算术运算指令 不带Cy加法指令(4条):ADD A,Rn ;A A + RnAD

41、D A,direct ;A A + (direct)ADD A,Ri ;A A + (Ri)ADD A,#data ;A A + data算术运算指令注:指令的目的操作数为累加器 A 执行指令后将影响标志位Cy。加法指令 试分析执行如下指令后,累加器A和PSW中各标志的变化情况如何?MOVA ,#5AHADD A , #6BH 解:第一条指令先向累加器A传送一个数5AH,第二条为加法指令,机器执行加法指令时按带符号数运算。例 竖式表示如下图:A= 0 1 0 1 1 0 1 0 Bdata= 0 1 1 0 1 0 1 1 B1071 1 1 0 0 0 1 0 1 B 1CS 90+ ) 1

42、97 1AC00CP执行结果:A=5A+6B=C5H,PSW=44H 0 1 0 0 0 1 0 0 Cy AC F0 RS1 RS0 OV - P5A+6B=?C7C6 试分析执行如下指令后,累加器A和PSW中各标志的变化情况如何?MOVA ,#78HADD A , #9AH 解:第一条指令先向累加器A传送一个数5AH,第二条为加法指令,机器执行加法指令时按带符号数运算。练习 竖式表示如下图: 120 A=0 1 1 1 1 0 0 0 B +) 154 data=1 0 0 1 1 0 1 0 B 274 1 0 0 0 1 0 0 1 0 B -) 256 18 1C6 1AC1C7执行

43、结果:A=78+9A=12H,PSW=C0H 1 1 0 0 0 0 0 0 Cy AC F0 RS1 RS0 OV - P78+9A=?带Cy加法指令(4条):ADDC A,Rn ;A A + Rn + CyADDC A,#data ;A A + data + CyADDC A,direct ;A A +(direct) + CyADDC A,Ri ;A A +(Ri) + Cy算术运算指令注:若 Cy = 0,则 ADD 等于 ADDC加法指令 已知:A8FH、R120H、(20H)12H、(21H)0FEH和Cy1,试问CPU依次执行以下指令后累加器A和Cy中的值是多少。a.ADDC A

44、 ,R1 b.ADDC A ,21Hc.ADDC A,R1 d.ADDC A ,#7FH 解:操作结果应为:a. A=8F+20+1=0B0H ,Cy=0 b.A=8F+FE+1=8EH ,Cy=1c.A=8F+12+1=0A2H ,Cy=0 d.A=8F+7F+1=0FH ,Cy=1例 已知:A7DH、R030H、(30H)35H、(31H)0DCH和Cy1,试问CPU依次执行以下指令后累加器A和Cy中的值是多少。a.ADDC A ,R0 b.ADDC A ,31Hc.ADDC A,R0 d.ADDC A ,#7FH 练习解:操作结果应为:a. A=7D+30+1=0AEH ,Cy=0 b.

45、A=7D+DC+1=5AH ,Cy=1c.A=7D+35+1=0B3H ,Cy=0 d.A=7D+7F+1=0FDH ,Cy=0 INCA;AA1INCRn;RnRn1INCdirect;(direct)(direct)1INCRi;(Ri)(Ri)1INCDPTR;DPTRDPTR1加1指令(5条):算术运算指令加法指令 已知:A34H、R042H、(43H)23H、DPTR3020H,试问CPU执行如下程序后A、R4、43H、R0、DPTR中的内容各是什么?INC AINC R0INC 43HINC R0INC DPTR解:由加1指令的规则,上述指令执行后的结果为:A35H、R043H、4

46、3H25H、DPTR3021H。由于,加1指令在程序中频繁地出现,常用来修改地 址和数据指针加1处理。 例加1指令中,只有INC A这一条影响奇偶标志位,其余均不影响任何标志位。INC DPTR 对DPTR中内容加1,是唯一的一条16位算术运算指令。说明思考已知:A34H、R042H、(43H)23H、DPTR3020H,运行前PSW=00,试问CPU执行如下程序后PSW ?INC AINC R0INC 43HINC R0INC DPTR带Cy减法指令(4条):SUBB A,Rn ;A A Rn- CySUBB A,#data ;A A - data - CySUBB A,direct ;A

47、A -(direct) - CySUBB A,Ri ;A A - (Ri) - Cy算术运算指令减法指令注: MCS-51仅有带借位的减法指令,若要使用不带借位的减法指令,则令 Cy = 0。000 0011CyACF0Rs1Rs0OV1P例 0111 1111 试分析执行下列指令后,累加器A和PSW中各标志位状态? CLR C MOV A ,#35H SUBB A ,#0B6H 解: A = 0011 0101 -) 1011 0110 结果为:A=35-B6=7FH, Cy =1,PSW为:DEC A ;AA-1DEC Rn ;RnRn-1DEC direct ;direct(direct

48、)-1DEC Ri ;(Ri)(Ri)-1减法指令减1指令(4条):注减1指令与加1指令相似,只有以A为操作数的指令才影响PSW。 已知:A10H、R13BH、R734H、(60H)00H、(3BH)0FFH,试分析,执行如下程序后累加器A和PSW中各标志位状态? DEC A DEC R1 DEC 60H DEC R7 例解:根据减1指令功能,结果为:A0FH, P=0 3B0FEH,PSW不变(60H)0FFH,PSW不变 R7=33H,PSW不变特点十进制调整指令(1条)1. BCD加法DA A对A中两个压缩BCD数相加之和调整为2位BCD码数。1)只能用在对BCD码数进行ADD或ADDC

49、操作后使用。2)影响标志位:C、AC、P。; A A + 06H60H66H 试编程实现44H86H的BCD加法程序,并对其工作原理分析。 解:相应BCD加法程序为:MOV A,44H;A44HADD A,86H;A44860CAHDA A ;A30H,Cy1,AC1SJMP $ ;结束例A= 0 1 0 0 0 1 0 0 Bdata=1 0 0 0 0 1 1 0 B 4486+ )0 1 1 0 1 0 0 0 0 B 1 1 0 1 0 0 1 1 0 0 0 0 B 0 1 1 0 0 1 0 1 0 B 130 1 1 0 B 低4位9, 加6调整高4位9,加6调整 BCD加法过程

50、2.BCD减法 MCS51单片机中没有十进制减法调整指令,因此,这里的BCD减法运算必须采用BCD补码运算法则。 例 已知:M1和M2中分别存有被减数80和减数25,试编程求差,并把结果存入M3单元中。 解:根据BCD减法的实施步骤,程序如下:思路:因为没有BCD码的减法调整指令,将减法运算转化为加法运算。 80-25=55 80+(100-25)=80+75=155执行加法运算 80H+75H=F5H运行BCD码调整指令 F5+60=155 其中1进至C,A=55ORG0100HCLRC ;清CyMOVA,9AH ;ABCD模100SUBB A, M2;ABCD减数的补数ADD A, M1;

51、A被减数减数的补数DA A;对A进行加法调整MOV M3,A;存入M3 M3BCD差CLR C ;清CySJMP $ ;停止80-25=?两位BCD数的模100BCD减数加60调整BCD差BCD减数减数的补数 1 0 0 1 1 0 1 0 B0 0 1 0 0 1 0 1 B 1 1 1 1 0 1 0 1 B 1 1 0 1 0 1 0 1 0 1 0 1 B 0 1 1 1 0 1 0 1 B 1 0 0 0 0 0 0 0 B + BCD减法过程指令格式: MUL AB ; AB =B高8A低8指令功能:寄存器A、B中两个 8 位数相乘,结果为 16 位数据,其中高 8 位放在寄存器B

52、中,低 8 位放寄存器A中。专用寄存器:寄存器 B 和累加器 A算术运算指令乘法指令标志位 Cy、OV、P 讨论: 执行乘法指令后 Cy = 0 若积为 8 位(即 B = 0), 则 OV = 0 若积为 16 位(即 B 0),则 OV = 1 根据累加器 A 确定奇偶标志 P算术运算指令乘法指令 已知:有两个8位无符号数乘数分别放在20H和21H单元中,试编写程序把相乘积的低8位放入22H单元中,积的高8位放入23H单元中。例分析:这是一个乘法问题,可用MUL AB指令。 其操作数分布在相邻四个单元,采用间址寻 址方式较为方便。ORG 1000HMOV R1 ,#20H ;R1第一个乘数

53、地址MOV A ,R1 ;A第一个乘数INC R1 ;修改乘数地址MOV B ,R1 ;B第二个乘数地址MUL AB ;A*B=BAINC R1 ;修改目标单元地址MOV R1 ,A ;22H积的低8位INC R1 ;修改目标单元地址MOV R1,B ;23H积的高8位SJMP $ ;停止指令格式: DIV AB ; AB =AB指令功能:累加器 A 除以寄存器B, 整商存A中,余存 B 中。专用寄存器:寄存器 B 和累加器 A算术运算指令除法指令标志位 Cy、OV、P 讨论: 执行除法指令后 Cy = 0 若除数 B = 0,则 OV = 1 若除数 B 0,则 OV = 0 根据累加器 A

54、 确定奇偶标志 P算术运算指令除法指令 逻辑与运算指令(6条): 逻辑或运算指令(6条): 逻辑异或指令(6条): 累加器清零和取反指令(2条):ANLORLXRLCLR、CPL逻辑运算指令与运算:有0出0,全1为1。 已知:A=78H,B=A5H 求:Y=AB 解:A= 0 1 1 1 1 0 0 0 ) B= 1 0 1 0 1 0 1 0 逻辑运算指令与指令0 0 1 0 1 0 0 0特点:与1相与数不变,与0相与数为0。请思考已知:M1、M2皆为8位的二进制数,若M1M2=M1,则M2=?答:M2=FFHANL A,RnANL A,RiANL A,directANL A,#dataA

55、NL direct, AANL direct, #data; A A Rn; A A (Ri); A A direct; A A #data; direct direct A; direct direct #data逻辑运算指令与指令 已知:R0=20H、(20H)=0FEH,试问分别执行如下指令后,累加器A和20H单元中内容各是什么?MOV A,#20H MOV A,#0FH ANL A,R0 ANL A,20HMOV A ,#0F0H MOV A,#80H ANL A,R0 ANL 20H , A例例 A=0EH, (20H)=0FEH A = 0000 1111) (20H)= 1111

56、 1110 0000 1110 已知:R0=20H、(20H)=0FEH,试问分别执行如下指令后,累加器A和20H单元中内容各是什么?MOV A,#20H MOV A,#0FH ANL A,R0 ANL A,20H解:根据逻辑乘指令功能,上述指令执行后的结果为: A=20H, (20H)=0FEH A = 0010 0000 ) R0 = 0010 0000 0010 0000 AA例 已知:R0=20H、(20H)=0FEH,试问分别执行如下指令后,累加器A和20H单元中内容各是什么?MOV A ,#0F0H MOV A,#80H ANL A,R0 ANL 20H , A解:根据逻辑乘指令功

57、能,上述指令执行后的结果为: A=0F0H,(20H)=0FEH A = 1111 0000 ) R0 = 1111 1110 1111 0000 A A=80H,(20H)=80H A = 1000 0000 )(20H) = 1111 1110 1000 0000 (20H)已知:R1=60H、(60H)=0FAH,试问分别执行如下指令后,累加器A和60H单元中内容各是什么?MOV A,#60H MOV A,#0FH ANL A,R1 ANL A,60H解:根据逻辑乘指令功能,上述指令执行后的操作结果为: A=60H,(60H)=0FAH A=00H,(60H)=0FAH 练习已知:R1=

58、60H、(60H)=0FAH,试问分别执行如下指令后,累加器A和60H单元中内容各是什么?MOV A ,#0F0H MOV A,#80H ANL A,R1 ANL 60H , A解:根据逻辑乘指令功能,上述指令执行后的操作结果为: A=0F0H,(60H)=0FAH A=80H,(60H)=80H练习或运算:有1出1,全0为0。 已知:A=78H,B=A5H 求:Y=A+B 解:A= 0 1 1 1 1 0 0 0 ) B= 1 0 1 0 1 0 1 0 逻辑运算指令或指令1 1 1 1 1 0 1 0特点:与1或数为1,与0或数不变。请思考已知:M1、M2皆为8位的二进制数,若M1+M2=

59、M1,则M2=?答:M2=00HORL A ,Rn;AARnORL A ,direct;AAdirectORL A ,Ri;AA(Ri)ORL A ,#data;AAdataORL direct ,A;direct(direct)AORL direct ,#data;direct(direct)data逻辑运算指令或指令例 A=0EH, (20H)=0FEH A = 0000 1111) (20H)= 1111 1110 1111 1111 已知:R0=20H、(20H)=0FEH,试问分别执行如下指令后,累加器A和20H单元中内容各是什么?MOV A,#20H MOV A,#0FH ORL

60、A,R0 ORL A,20H解:根据或逻辑指令功能,上述指令执行后的结果为: A=20H, (20H)=0FEH A = 0010 0000 ) R0 = 0010 0000 0010 0000 AA 已知:AAAH和P2FFH,编程把累加器A中低4位送入P2口低4位,P2口高位不变。 解:程序思路为:根据逻辑与、逻辑或两类指令的特性来实现ORG0030HANL A,0FH ;屏蔽A中的高4位,低4位不变ANLP2,F0H ;屏蔽P2中的低4位,高4位不变ORLP2,A ;装配数据,结果送P2SJMP$;结束例异或运算:相同为0,相异为1。 已知:A=58H,B=CAH 求:Y=AB 解:A=

温馨提示

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

最新文档

评论

0/150

提交评论