单片机原理与接口技术PPT电子课件教案-第3章_MCS-51单片机指令系统.ppt_第1页
单片机原理与接口技术PPT电子课件教案-第3章_MCS-51单片机指令系统.ppt_第2页
免费预览已结束,剩余103页可下载查看

下载本文档

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

文档简介

1,01:00,单片机原理与接口技术,第3章 mcs-51单片机 指令系统,2,01:00,本章教学要求,(1) 熟悉mcs-51单片机指令系统的分类、格式。 (2) 熟悉mcs-51指令系统的7种寻址方式。 (3) 掌握mcs-51指令系统的数据传送、算术运算、逻辑运算、转移操作、布尔运算等指令的功能。 (4) 掌握mcs-51指令系统的各种指令对寄存器资源的占用情况。,3,01:00,本 章 目 录,3.1 指令系统简介 3.1.1 指令系统的分类 3.1.2 指令格式 3.1.3 指令中的常用符号 3.1.4 寻址方式,3.2 指令系统 3.2.1 数据传送指令 3.2.2 算术运算指令 3.2.3 逻辑运算指令 3.2.4 控制转移指令 3.2.5 位操作指令 习题与思考题,4,01:00,3.1 指令系统简介,指令系统 计算机所有指令的集合,称为该计算机的指令系统,它是表征计算机性能的重要标志。每种计算机都有它自己特有的指令系统。指令是指计算机执行某种操作(如传送数据、做算术运算等)的命令。,-指令系统,5,01:00,要让计算机工作,就得向计算机发出指令。 指令的格式是机器码指令格式, 如:75905b ,即数字格式。 另一种指令格式,即汇编指令格式, 如:mov p1, #5bh,-指令的两种格式,3.1 指令系统简介,6,01:00,-mcs-51汇编语言指令格式,操作码 操作数1 ,操作数2 ;注释,mcs-51单片机的汇编语言使用40多种助记符表征30多种指令功能。mcs-51单片机能够识别并执行的指令共有111条。这111条指令,构成了mcs-51单片机的指令系统。,3.1 指令系统简介,7,01:00,-特点,1) 指令执行时间短。只需1个机器周期的指令有64条,2个机器周期的指令有45条,而4个机器周期的指令仅有2条(既乘法和除法指令)。 2) 指令字节少。单字节指令有49条,双字节指令有46条,三字节指令有16条。 3) 位操作指令极为丰富,这体现了mcs-51单片机具有面向控制的特点。,3.1 指令系统简介,8,01:00,3.1.1 指令系统的分类,mcs-51单片机能够识别并执行的指令共有111条。按指令所占字节数、指令执行时间和指令功能进行分类。 1按指令所占字节数分类 1) 单字节指令(49条) 2) 双字节指令(46条) 3) 三字节指令(16条),-按指令所占存储空间分类,9,01:00,2按指令执行时间分类,1) 单周期指令(64条) 2) 双周期指令(45条) 3) 四周期指令(2条),3.1.1 指令系统的分类,-按指令执行时间可分类,10,01:00,1) 数据传送类指令(29条) 2) 算术运算类指令(24条) 3) 逻辑运算类指令(24条) 4) 控制转移类指令(17条) 5) 位操作类指令(17条),3.1.1 指令系统的分类,-按指令功能分类,3按指令功能分类,11,01:00,3.1.2 指令格式,指令由操作码和操作数组成。操作码用来规定要执行的操作的性质,操作数为指令的操作提供数据和地址。 1指令的基本格式 符号地址: 操作码 操作数1 ,操作数2 ,操作数3 ;注释 其中符号地址和操作码之间用“:”作为分隔符,也可再加上若干空格。操作码和操作数之间用空格作为分隔符。操作数之间用“,”作为分隔符。注释之前用“;”作为分隔符。,-基本格式,12,01:00,一条指令必须在一行中写完。例如: main:mov a,#10h ;主程序段 main为符号地址; mov为操作码; a、#10h为二个操作数; 最后是注释。 指令在送入计算机执行之前,必须先转换成机器语言形式。转换成机器语言的过程称为汇编,汇编有机器汇编和手工汇编两种方法。,3.1.2 指令格式,-基本格式,13,01:00,3.1.2 指令格式,机器语言是用二进制代码表示的。对一条指令进行二进制编码,可以是单字节或多字节的,按照它们占用的存储空间多少形成了下面3种编码格式。 (1) 单字节指令:单字节指令指的是该指令占用1个字节的存储单元。 (2) 双字节指令:双字节指令指的是该指令占用2个字节的存储单元。 (3) 三字节指令:三字节指令指的是该指令占用3个字节的存储单元。,-指令的编码格式,14,01:00,3.1.3 指令中的常用符号,为了便于阅读指令,mcs-51指令助记符中的一些常用符号约定如下。 rn:表示当前工作寄存器r0r7中的一个。 ri:表示寄存器间接寻址,常作间接寻址的地址指针。其中ri代表r0和r1寄存器中的一个。 direct:表示内部数据存贮器单元的地址及特殊功能寄存器sfr的地址,对sfr而言,既可使用它的物理地址,也可直接使用它的名字。,15,01:00,#data:表示8位立即数,即8位常数,取值范围为#00h#0ffh。 #data16:表示16位立即数,即16位常数,取值范围为#0000h#0ffffh。 addr16:表示16位地址。 addr11:表示11位地址。 rel:用补码形式表示的地址偏移量,取值范围为-128+127。 bit:表示内部ram和sfr中的具有位寻址功能的位地址。,3.1.3 指令中的常用符号,16,01:00,:表示间接寻址寄存器或基址寄存器的前缀符号。 $: 表示当前指令的地址。 /: 位操作数的前缀,表示对该位操作数取反,如:/bit。 (x):表示存储单元x的内容。 (x):表示以寄存器或存储单元x的内容作为地址的存储单元的内容。 :表示数据传送方向。,3.1.3 指令中的常用符号,17,01:00,3.1.4 寻址方式,如何找到参与运算的操作数据或数据所在的地址称为寻址方式。所以寻址方式是在地址范围内如何找到所需要的操作数的地址。 mcs-51指令系统的寻址方式主要有立即寻址、直接寻址、寄存器寻址、寄存器间接寻址、基址加变址寻址、相对寻址和位寻址等七种。,18,01:00,立即寻址是将操作数直接写在指令中,作为指令的一部分存放在代码段里,位置在程序存储器中。立即寻址中的操作数,称为立即数。 例如:mov a, #30h ;30ha,1.立即寻址,3.1.4 寻址方式,-立即寻址,19,01:00,2.直接寻址,直接寻址是将操作数的地址直接存放在指令中。这种寻址方式的操作数指的是内部数据存储器中存放数据的地址,或存放数据的一个特殊功能寄存器地址。 例如:mov a, 30h ;(30h)a,3.1.4 寻址方式,-直接寻址,20,01:00,直接寻址方式可访问的范围,1) 特殊功能寄存器 这部分存储单元既可以用单元地址给出,也可以用寄存器符号的形式给出。如:mov a, 90h 或 mov a, p1为同一条指令的两种写法(特殊功能寄存器只能用直接寻址方式访问)。 2) 内部数据存储器的低128个字节单元 直接以单元地址的形式给出对于8032/8052等单片机,其内部高128字节ram(80hffh)不能用直接寻址方式访问。,3.1.4 寻址方式,-访问范围,21,01:00,3) 位地址空间 片内ram中20h2fh中的128个位地址,以及sfr中的11个可进行位寻址的寄存器中的位地址(可位寻址的特殊功能寄存器有b、acc、psw、ip、ie、scon、tcon、p0p3)。 4) 在一些程序控制指令中,可采用直接寻址方式提供程序转移的目标地址。,3.1.4 寻址方式,-访问范围,直接寻址方式可访问的范围,22,01:00,-寄存器寻址,寄存器寻址是指操作数存放在寄存器中,并且寻址时的寄存器已隐含在指令的操作码中。 例如:mov a, r5,3.1.4 寻址方式,3.寄存器寻址,23,01:00,寄存器寻址方式的寻址范围: (1) 4个工作寄存器组共32个通用寄存器(在指令中只能使用当前寄存器组) (2) 部分特殊功能寄存器。如a,b,dptr。,-寄存器寻址,3.1.4 寻址方式,24,01:00,-寄存器寻址,4.寄存器间接寻址 寄存器间接寻址是指操作数据存放在以寄存器内容为地址的单元中。如: mov a, r0 ;(r0)a 指令功能为将r0所指出的内部ram单元内容送入累加器a中,执行过程如图所示。图中设r0=60h。,3.1.4 寻址方式,25,01:00,寄存器间接寻址的寻址范围:,1) 内部低128字节单元(只能使用r0、r1作间址寄存器)。 2) 外部数据存储器(64kb字节,使用dptr作间址寄存器。另外,外部低128b单元也可用r0、r1作间址寄存器寻址)。 3) 在堆栈操作指令(push、pop)中,以堆栈指针sp作间址寄存器,寻址空间为片内ram。,3.1.4 寻址方式,-寻址范围,26,01:00,-基址变址寻址,基址变址寻址是指操作数存放在以变址寄存器和基址寄存器的内容相加形成的数为地址的单元中。其中累加器a作变址寄存器、程序计数器pc或寄存器dptr作基址寄存器。基址加变址寻址方式常用于查表操作。如: movc a, a+pc ;pc+1pc,(a+pc)a movc a, a+dptr ;(a+dptr)a,3.1.4 寻址方式,5.基址变址寻址,27,01:00,相对寻址是将程序计数器pc的当前值与指令第二字节给出的偏移量相加,从而形成转移的目标地址。 例如:jc 80h ;c=1则跳转,-相对寻址,3.1.4 寻址方式,6.相对寻址,28,01:00,-位寻址,位寻址是指对片内ram中20h2fh中的128个位地址,以及sfr中的11个可进行位寻址的寄存器中的位地址寻址(可位寻址的特殊功能寄存器有b、acc、psw、ip、ie、scon、tcon、p0p3)。例如:mov c, 20h 此指令是将ram中位寻址区20h位地址中的内容,送给位累加器cy。位寻址指令不同于字节地址寻址指令, 例如:mov a, 20h,3.1.4 寻址方式,7.位寻址,29,01:00,-位寻址的表示形式,1) 直接使用位地址 包括位寻址区的位地址00h7fh和部分特殊功能寄存器的位地址。例如,psw寄存器第2位的位地址为d2h。 2) 位名称表示法 专用寄存器中的一些寻址位是有符号名的,对其进行位寻址时可用其符号名,例如,psw寄存器的第2位可用ov表示。 3) 单元地址加位表示法 例如,2f单元的第1位,可表示为2fh.1。 再如,d0h单元(psw)的第2位,可表示为d0h.2。,3.1.4 寻址方式,30,01:00,4) 专用寄存器名称加位表示法 例如,psw寄存器的第2位可表示为:psw.2。 对于可位寻址的特殊功能寄存器,上面4种表示法是等效的。以读取psw第二位为例的4种位寻址指令如下: mov c, 0d2h ;直接使用位地址寻址 mov c, ov ;使用位名称寻址 mov c, 0d0h.2 ;使用单元地址加位表示法寻址 mov c, psw.2 ;使用专用寄存器名称加位表示法寻址,3.1.4 寻址方式,-位寻址的表示形式,31,01:00,在mcs-51单片机的指令系统中,指令对哪一个存储器空间进行操作,是由指令的操作码和寻址方式确定的。 1)对程序存储器只能采用立即寻址和基址加变址寻址方式; 2)对特殊功能寄存器只能采用直接寻址方式,不能采用寄存器间接寻址;,3.1.4 寻址方式,-总结,32,01:00,3)对8032/8052等单片机内部ram的高128个字节(80hffh),只能采用寄存器间接寻址,不能使用直接寻址方式; 4)对位操作指令只能对位寻址区操作; 5)外部扩展的数据存储器只能用movx指令访问; 6)内部ram的低128个字节(00h7fh)既能用直接寻址,也能用间接寻址。,3.1.4 寻址方式,-总结,33,01:00,存储空间对应的寻址方式,3.1.4 寻址方式,-寻址范围,34,01:00,3.2 指令系统,mcs-51的数据传送指令共有29条。助记符有mov、movc、movx、xch、xchd、push、pop。 数据传送指令一般的操作是把源操作数传送到目的操作数,指令执行完成后,源操作数不变,目的操作数等于源操作数。如果要求在进行数据传送时,目的操作数不丢失,则不能用直接传送指令,而采用交换型的数据传送指令。数据传送指令不影响标志cy、ac和ov,但可能会对奇偶标志p有影响。,3.2.1 数据传送类指令,-传送指令,35,01:00,-传送指令列表,3.2.1 数据传送类指令,36,01:00,-传送指令列表,3.2.1 数据传送类指令,37,01:00,助记符 功能说明 mov a, rn ;(rn)a rn中的内容送到累加器a中 mov a, direct ;(direct) a 直接地址单元中的内容送到 累加器a中 mov a, ri ;(ri) a ri内容指向的地址单元中的 内容送到累加器a中 mov a, #data ;dataa 立即数送到累加器a中 功能:将源操作数指定内容送到累加器a中。,-传送指令列表,3.2.1 数据传送类指令,1以累加器为目的操作数的指令(4条),38,01:00,助记符 功能说明 mov rn, a ;(a)rn 累加器a中的内容送到寄存 器rn中 mov rn, direct ;(direct) rn 直接寻址单元中的 内容送到寄存器rn中 mov rn, #data ;datarn 立即数直接送到寄存器 rn中 功能:将源操作数指定的内容送到所选定的工作寄存器rn中。,-传送指令列表,3.2.1 数据传送类指令,2以寄存器rn为目的操作数的指令(3条),39,01:00,助记符 功能说明 mov direct, a ;(a)direct 累加器a中的内容送到直接 地址单元中 mov direct, rn ;(rn)direct 寄存器rn中的内容 送到直接地址单元中 mov direct1, direct2 ;(direct2) direct1 直接地址单元2 中的内容送到直接地址1中 mov direct, ri ;(ri) direct以寄存器ri中的内容为 地址的单元中内容送到直接地址单元中 mov direct,#data ;datadirect 立即数送到直接地址 单元中,-传送指令列表,3.2.1 数据传送类指令,3以直接地址为目的操作数的指令(5条),40,01:00,功能:将源操作数指定的内容送到由直接地址指出的片内存储单元中。如: mov 20h, a ;累加器a中的内容送到20h直接地址单元中 mov 20h, r1 ;寄存器r1中的内容送到20h直接地址单元中 mov 20h, 30h ;30h直接地址单元中的内容送到20h直接地 址单元中 mov 20h, r1 ;以寄存器r1中的内容为地址的单元中内容送 到20h直接地址单元中 mov 20h, #34h ;立即数送到20h直接地址单元中 mov p2, #34h ;立即数送到p2直接地址单元中,-传送指令列表,3.2.1 数据传送类指令,41,01:00,助记符 功能说明 mov ri, a ;(a)(ri) 累加器a中内容送到以ri 中内容为地址的ram单元中 mov ri, direct ;(direct) (ri) 直接地址单元中内 容送到以ri中内容为地址的ram单元中 mov ri, #data ;data(ri) 立即数送到以ri中内容 为地址的ram单元中,-传送指令列表,3.2.1 数据传送类指令,4以间接地址为目的操作数的指令(3条),42,01:00,功能:将源操作数指定的内容送到以r0或r1为地址指针的片内ram存储单元中。如: mov r0, a ;累加器a中内容送到以r0中内容为 地址的ram单元中 mov r1, 20h ;20h单元中内容送到以r1中内容为 地址的ram单元中 mov r0, #34h ;立即数34h送到以r0中内容为地 址的ram单元中,-传送指令列表,3.2.1 数据传送类指令,43,01:00,助记符 功能说明 mov dptr, #data16 ;datahdph,dataldpl ;16位常数的高8位送到dph,低8位送到dpl 功能:将一个16位的立即数送到dptr中去。其中高8位送入dph,低8位送入dpl。如: mov dptr, #1234h ;指令执行后dph中的值为 12h,dpl中的值为34h,-传送指令列表,3.2.1 数据传送类指令,516位数的传递指令(1条),44,01:00,如果我们分别向dph和dpl送数,则结果也一样。如下面两条指令: mov dph, #12h mov dpl, #34h 就相当于执行了mov dptr, #1234h。 mcs-51是一种8位机,这是唯一的一条16位立即数传递指令。,-传送指令列表,3.2.1 数据传送类指令,45,01:00,助记符 功能说明 movx a, ri ;(ri) a寄存器ri指向的片外ram单 元中的内容送到累加器a中 movx ri, a ;a(ri)累加器a中内容送到寄存器ri指 向的片外ram单元中 movx a, dptr ;(dptr) a数据指针指向的片外 ram单元中的内容送到累加器a中 movx dptr, a ;(a)(dptr)累加器a中内容送到数 据指针指向的片外ram单元中,-传送指令列表,3.2.1 数据传送类指令,6累加器a与片外ram数据传送指令(4条),46,01:00,功能:在mcs-51中,与外部存储器ram打交道的只可以是a累加器。所有需要送入外部ram的数据必须通过a传送,而所有要读入的外部ram中的数据也必须通过a读入。 在此我们可以看出内外部ram的区别,内部ram间可以直接进行数据传递,而外部ram则不行。 例如,要将外部ram中某一单元(假设为0100h单元的数据)送入另一个单元(假设为0200h单元),则必须先将0100h单元中的内容读入a,然后再送到0200h单元中去。,-传送指令列表,3.2.1 数据传送类指令,47,01:00,要读或写外部ram,必须要知道16位的ram地址。在后两条指令中,地址是被直接放在dptr中的。而前两条指令,由于ri(即r0或r1)只是8位的寄存器,所以只提供低8位地址,此时,高8位地址要由p2口来提供。使用时应先将要读或写的地址送入dptr或ri(高8位地址送到p2口)中,然后再用读/写指令。,-传送指令列表,3.2.1 数据传送类指令,48,01:00,例3-1 将外部ram的100h单元中内容送入外部ram的200h单元中。 mov dptr, #0100h movx a, dptr mov dptr, #0200h movx dptr, a,-传送指令应用,3.2.1 数据传送类指令,49,01:00,助记符 功能说明 movc a, a+dptr ;(a)+(dptr) a表格地址 ;单元中的内容送到累加器a中 movc a, a+pc ;(pc)+1pc,(a)+(pc) a ;表格地址单元中的内容送到累加器a中 功能:将rom中的数据送到a中。常用此指令来查一个已存储在rom中的数据表格。这组指令也称为查表指令。,-传送指令应用,3.2.1 数据传送类指令,7读程序存储器指令(2条),50,01:00,以dptr或pc为基址,以a为变址,在不断修改a中内容(等值增量)的同时,执行该指令,实现对rom中存储的一块区域数据的读取。 以pc为基址时,不用设置pc的值,只需根据a的内容,就可以查出表格中的数据。但表格只能放在该条查表指令后面的256个单元之中,表格的大小受到限制,而且表格只能被一段程序所利用。而以dptr为基址时,表格的大小和位置可以在64 kb的rom中任意安排,并且表格可被任意程序块所共享。 说明:查找到的结果放在a中,因此,这类指令执行前后,a中的值不一定相同。,-传送指令应用,3.2.1 数据传送类指令,51,01:00,例3-2 有一个110的平方表存放在0100h开始的rom中,用dptr和r0基址+变址的寻址方式实现查表功能,确定110(在r0中)的平方值。 mov dptr, #0100h mov a, r0 movc a, a+dptr . org 0100 ;org是指明后面数据块的起始地址 db 0,1, 4, 9, 16, 25, 36 db 49, 64, 81, 100 ;db是定义字节指令,-传送指令应用,3.2.1 数据传送类指令,52,01:00,助记符 功能说明 push direct ;(sp)+1sp,(direct) (sp) ;堆栈指针首先加1,直接寻址单元 ;中的数据送到堆栈指针sp所指的 ;单元中 pop direct ;(sp) direct,(sp) - 1sp ;堆栈指针sp所指的单元中的数据 ;送到直接寻址单元中,堆栈指针 ;sp再进行减1操作,-传送指令应用,3.2.1 数据传送类指令,8堆栈操作(2条),53,01:00,功能:第1条为压入堆栈指令,就是将direct中的内容送入堆栈中;第2条为弹出堆栈指令,就是将堆栈中的内容送回到direct中。如: mov sp, #5fh mov a, #100 mov b, #20 push acc push b,-传送指令应用,3.2.1 数据传送类指令,其中,push acc指令是这样执行的:将sp中的值加1,即变为60h,然后将a中的值送到60h单元中,因此执行完本条指令后,内存60h单元中的值就是100。,同样,执行push b时,是将sp中的值加1,即变为61h,然后将b中的值送入到61h单元中,即执行完本条指令后,61h单元中的值变为20。,54,01:00,助记符 功能说明 xch a, rn ;(a)(rn)累加器与工作寄存器 rn中的内容互换 xch a, direct ;(a)(direct)累加器与直接地址 单元中的内容互换 xch a, ri ;(a)(ri)累加器与工作寄存器 ri所指存储单容互换元中的内容互换,-传送指令应用,3.2.1 数据传送类指令,9交换指令(5条),55,01:00,xchd a, ri ;(a.3a.0)(ri.3ri.0)累加器 与工作寄存器ri所指存储单元中的低 半字节内容互换 swap a ;(a.3a.0)(a.7a.4)累加器中 内容高低半字节互换 功能:前4条指令是把累加器a中的内容与源操作数所指的数据相互交换。最后一条指令将累加器a中的内容高低半字节互换。,-传送指令应用,3.2.1 数据传送类指令,56,01:00,例3-3 假设a中内容为34h,r0指向的单元内容为56h。执行下列指令后看结果。 mov r6, #29h ;r6=29h xch a, r6 ;a=29h,r6=34h swap a ;a=92h xch a, r6 ;a=34h,r6=92h xchd a, r0 ;a=36h,(r0)=54h,-传送指令应用,3.2.1 数据传送类指令,57,01:00,3.2.2 算术运算类指令,mcs-51的算术运算指令共有24条。助记符有add、addc、subb、da、inc、dec、mul、div。 算术运算主要是执行加、减、乘、除法四则运算。,58,01:00,3.2.2 算术运算类指令,-运算指令列表,59,01:00,3.2.2 算术运算类指令,-运算指令列表,60,01:00,3.2.2 算术运算类指令,-运算指令对标志位的影响,61,01:00,例3-4 设1067h存在于r1r0中,30a0h存在于r3r2中,计算r1r0+r3r2,结果存于r5r4中。 mov a, r0 add a, r2 ;r0+r2a和cy mov r4, a mov a, r1 addc a, r3 ;r1+r3+cya和cy mov r5, a,r1 r0 +r3 r2 r5 r4,3.2.2 算术运算类指令,-运算指令应用,62,01:00,例3-5 设a=12h,r0=33h,(21h)=32h,(34h)=22h,dptr=1234h。连续执行下面指令后看相应寄存器和单元中的结果。 inc a ;a=13h inc r0 ;r0=34h inc 21h ;(21h)=33h inc r0 ;(34h)=23h inc dptr ;dptr=1235h,3.2.2 算术运算类指令,-运算指令应用,63,01:00,3.2.2 算术运算类指令,十进制调整指令(1条) da a 在进行bcd码加法运算时,跟在add和addc指令之后,用来对a累加器中的bcd码加法运算结果进行自动修正。 如:设a=00010101bcd(代表十进制数15) add a, #8 ;a=00011101b,按二进制规律相加 da a ;a=00100011bcd(代表十进制23), 调整为十进制的bcd 码 (实现按十进制规律加),-十进制调整指令,64,01:00,3.2.2 算术运算类指令,乘法指令(1条) mul ab ;(a)(b)a和b 累加器a中的内容与寄存器b中的内容相乘,结果存在a和b中 功能:将a和b中的两个8位无符号数相乘,两数相乘结果一般比较大,因此最终结果用1个16位数来表达,其中高8位放在b中,低8位放在a中。在乘积大于ffh时,ov置1,否则ov为0,而cy总是0。 如:设a=4eh,b=5dh,执行指令 mul ab 后,乘积是1c56h。所以在b中放的是1ch,而a中放的则是56h,并且ov=1,p=0。,-乘法指令,65,01:00,3.2.2 算术运算类指令,除法指令(1条) div ab ;(a)(b)a和b 累加器a中的内容除以寄存器b中的内容,所得到的商存在累加器a中,而余数存在寄存器b中。 功能:将a中的8位无符号数除以b中的8位无符号数(a/b)。结果商放在a中,余数放在b中。cy和ov都是0。 如果在作除法前b中的值是00h,也就是除数为0,那么ov=1。 如:设a=11h,b=04h,执行指令 div ab后,a=04h,b=01h;cy=0,ov=0,p=1。,-除法指令,66,01:00,3.2.3 逻辑运算类指令,逻辑运算和移位指令共有24条,助记符有anl、orl、xrl、clr、cpl、rl、rlc、rr、rrc。有与、或、异或、求反、左/右移位、清0等逻辑操作,有直接、寄存器和寄存器间址等寻址方式。这类指令一般不影响程序状态字(psw)标志。mcs-51指令系统的逻辑运算指令见表3-5。,67,01:00,逻辑运算类指令列表,68,01:00,逻辑运算类指令列表,69,01:00,助记符 功能说明 orl a, rn ;(a)(rn)a orl a, direct ;(a)(direct)a orl a, ri ;(a)(ri)a orl a, #data ;(a)dataa orl direct, a ;(direct)(a)direct orl direct, #data ;(direct)datadirect,3.2.3 逻辑运算类指令,1逻辑或指令(6条),70,01:00,3.2.3 逻辑运算类指令,功能:将两个单元中的内容执行逻辑或操作。如果目的操作数的直接地址是i/o地址,则为“读修改写”操作。如: mov a, #45h ;a=45h mov r1, #25h ;r1=25h mov 25h, #39h ;(25h)=39h orl a, r1 ;45h39h = 7dh, a = 7dh orl 25h, #13h ;39h13h = 3bh, (25h) = 3bh orl 25h, a ;3bh7dh =7fh, (25h) = 7fh,71,01:00,3.2.3 逻辑运算类指令,助记符 功能说明 anl a, rn ;(a)(rn)a anl a, direct ;(a)(direct)a anl a, ri ;(a)(ri)a anl a, #data ;(a)dataa anl direct, a ;(direct)(a)direct anl direct, #data ;(direct)datadirect,2逻辑与指令(6条),72,01:00,3.2.3 逻辑运算类指令,功能:将两个单元中的内容执行逻辑与操作。如果目的操作数的直接地址是i/o地址,则为“读修改写”操作。如: mov a, #45h ;a=45h mov r1, #25h ;r1=25h mov 25h, #79h ;(25h)=79h anl a, r1 ;45h79h = 41h, a = 41h anl 25h, #15h ;79h15h = 11h, (25h) = 11h anl 25h, a ;11h41h = 01h, (25h) = 01h,73,01:00,3.2.3 逻辑运算类指令,助记符 功能说明 xrl a, rn ;(a)(rn)a xrl a, direct ;(a) (direct)a xrl a, ri ;(a) (ri)a xrl a, #data ;(a)dataa xrl direct, a ;(direct) (a)direct xrl direct, #data ;(direct) datadirect,3逻辑异或指令(6条),74,01:00,3.2.3 逻辑运算类指令,功能:将两个单元中的内容执行逻辑异或操作。如果直接地址是i/o地址,则为“读修改写”操作。如: mov a, #45h ;a=45h mov r1, #25h ;r1=25h mov 25h, #39h ;(25h)=39h xrl a, r1 ;45h39h = 7ch, a = 7ch xrl 25h, #13h ;39h13h = 2ah, (25h) = 2ah xrl 25h, a ;2ah7ch =56h, (25h) = 56h,75,01:00,3.2.3 逻辑运算类指令,助记符 功能说明 清零:clr a ;0a,这条指令将累加器a中 的内容清零。 取反:cpl a ;/(a)a,这条指令将累加器a 中的内容按位取反。 如:若a=5ch,执行 cpl a后的结果是a=a3h。,4清零与取反指令(2条),76,01:00,3.2.3 逻辑运算类指令,rl a ;累加器a中的内容向左环移1位 rlc a ;累加器a中的内容带进位标志位向左环移1位,5循环移位指令(4条),77,01:00,3.2.3 逻辑运算类指令,rr a ;累加器a中的内容向右环移1位 rrc a;累加器a中的内容带进位标志位向右环移1位,5循环移位指令(4条),78,01:00,3.2.3 逻辑运算类指令,功能:对累加器a中的内容进行简单的逻辑操作。除了带进位标志位的移位指令外,其他都不影响cy,ac,ov等标志位。 如:若a=5ch,cy=1, 执行rlc a后,结果为 a=b9h,cy=0,p=1。 对rlc和rrc指令,在cy=0时: rlc相当于乘以2,rrc相当于除以2。,5循环移位指令(4条),79,01:00,3.2.4 控制转移类指令,控制转移指令有17条,助记符有: acall、lcall、ret、reti、ajmp、ljmp、sjmp、jmp、cjne、djnz、jz、jnz、nop。 控制转移指令用于控制程序的流向,所控制的范围即为程序存储器区间。,80,01:00,控制转移类指令列表,3.2.4 控制转移类指令,81,01:00,3.2.4 控制转移类指令,控制转移类指令列表,82,01:00,3.2.4 控制转移类指令,控制转移类指令列表,83,01:00,-无条件转移类指令(4条),1) 短转移类指令 ajmp addr11 ;(pc)+2pc,addr11pc.10pc.0,程序计数器赋予新值 (11位地址),pc.15pc.11不改变,程序跳转到新pc值指向的地址处 2) 长转移类指令 ljmp addr16 ;addr16pc,给程序计数器赋予新值(16位地址),程序跳转到新pc值指向的地址处 3) 相对转移指令 sjmp rel ;(pc)+2+relpc,当前程序计数器的值先加上2再加上偏移量后给程序计数器赋予新值,程序跳转到新pc值指向的地 址处,3.2.4 控制转移类指令,84,01:00,-无条件转移类指令(4条),4) 间接转移指令 jmp a+dptr ;(a)+(dptr)pc,累加器的值加上数据指针的值后给程序计数器赋予新值,程序跳转到新pc值指向的地址处 上面前3条指令的区别如下: (1) 跳转范围不同。 ajmp addr11 ;短跳转范围:2 kb ljmp addr16 ;长跳转范围:64 kb sjmp rel ;相对跳转范围:128+127 (2) 指令构成不同。ajmp和ljmp后跟的是绝对地址,而sjmp后跟的是相对地址。,3.2.4 控制转移类指令,85,01:00,mov dptr, #tab ;将tab代表的地址送入dptr jmp a+dptr ;跳转 tab: ajmp rout0 ;a=0时,跳转到rout0 tab+2: ajmp rout1 ;a=2时,跳转到rout1 tab+4: ajmp rout2 ;a=4时,跳转到rout2 tab+6: ajmp rout3 ;a=6时,跳转到rout3 . rout0: . rout1: . rout2: . rout3: .,3.2.4 控制转移类指令,例3-6 利用间接转移指令实现散转程序结构。,86,01:00,判a内容是否为0转移指令(2条) jz rel ;若a=0,则(pc)+2+relpc。累加器中的内容为0,则程序转移到偏移量所指向的地址处,否则程序往下执行 jnz rel ;若a0,则(pc)+2+relpc。累加器中的内容不为0,则程序转移到偏移量所指向的地址处,否则程序往下执行 功能:程序转移到相对于当前pc值的8位偏移量的地址处。即:新的pc值=当前pc值+2+偏移量rel。在编写汇编语言源程序时,可以将rel理解成标号,直接写成:jz 标号 ;即程序转移到标号处,3.2.4 控制转移类指令,87,01:00,例3-7 条件转移程序结构举例。 mov a, r0 jz l1 mov r1, #00h ajmp l2 l1: mov r1, #0ffh l2: sjmp l2 在执行上面这段程序前, 如果r0=0,结果是r1=0ffh; 如果r00,结果是r1=00h。 把上面例子中的jz改成jnz后, 如果r0=0,结果是r1=00h; 如果r00,结果是r1=0ffh。,3.2.4 控制转移类指令,88,01:00,比较不等转移指令(4条) cjne a, #data, rel ;若adata,则(pc)+3+relpc。累加器中的内容不等于立即数,则程序转移到偏移量所指向的地 址处,否则程序往下执行 cjne a, direct, rel ;若a(direct),则(pc)+3+relpc。累加器中的内容不等于直接地址单元中的内容,则程序转移到偏移量所指向的地址处,否则程序往下执行 cjne rn, #data, rel ;若rndata,则(pc)+3+relpc。工作寄存器rn中的内容不等于立即数,则程序转移到偏移量所指向的地址处,否则程序往下执行 cjne ri, #data, rel ;若(ri)data,则(pc)+3+relpc。工作寄存器ri指向地址单元中的内容不等于立即数,则程序转移到偏移量所指向的地址处,否则程序往下执行,3.2.4 控制转移类指令,89,01:00,mov a, r0 cjne a, #10h, l1 ;如r010h,则转移至标号l1 mov r1, #0 ;如r0=10h,则不转移,00hr1 ajmp l3 l1: jc l2 ;如cy=1,即r010h,0aahr1 ajmp l3 l2: mov r1, #0ffh ;r010h,则r1=0aah; 如果r010h,则r1=0ffh。,3.2.4 控制转移类指令,例3-8 比较r0中的数是否大于10h。,90,01:00,减1不为0转移指令(2条) djnz rn, rel ;(rn) - 1rn,若rn0,则(pc)+2+relpc。工作寄存器rn中的内容减1后不等于0,则程序转移到偏移量所指向的地址处,否则程序往下执行 djnz direct, rel ;(direct) - 1direct,若(direct)0,则(pc)+2+relpc。直接地址单元中的内容减1后不等于0,则程序转移到偏移量所指向的地址处,否则程序往下执行 功能:djnz指令将第1个操作数所指内容减1,然后看这个值是否等于0,如果等于0,就往下执行,如果不等于0,就转移到第2个操作数所指定的地方去。,3.2.4 控制转移类指令,91,01:00,例3-9 求01h0ah十个数的和,结果放在a中。 mov 23h, #0ah clr a loop: add a, 23h djnz 23h, loop sjmp $ 程序段的执行过程是:将23h单元中的数连续相加,存至a中,每加一次,23h单元中的数值减1,直至减到0,共加0ah次。,3.2.4 控制转移类指令,92,01:00,例3-10 将a累加器的低四为取反四次、高四位不变。每变换一次,从p1输出。 方法一:用加1计数和cjnz指令配合实现 mov r0, #0 ;计数初值送0 ll: xrl a, #0fh ;高4位不变,低四位取反 inc r0 ;次数加1 mov p1, a ;从p1输出 cjne r0, #04, ll ;不满四次循环 ret 方法二:用djnz指令实现 mov r0, #04h ;计数初值送4 ll: xrl a, #0fh mov p1, a djnz r0, ll ;次数减1不等于0循环 ret,3.2.4 控制转移类指令,93,01:00,调用指令(2条) lcall addr16 ;长调用指令 acall addr11 ;短调用指令 返回指令(2条) ret ;子程序返回指令 reti ;中断子程序返回指令 空操作指令(1条) nop 功能:这条指令除了使pc加1,消耗一个机器周期外,没有执行任何操作。可用于短时间的延时。,3.2.4 控制转移类指令,94,01:00,3.2.5 位操作指令,在mcs-51单片机的硬件结构中,有一个位处理器(又称布尔处理器),它有位操作指令17条,包括位传送、逻辑运算、控制程序转移等。助记符有,mov、clr、clp、setb、anl、orl、jc、jnc、jb、jnb、jbc。mcs-51指令系统的位操作指令见表3-7。,95,01:00,3.2.5 位操作指令,-指令列表,96,01:00,3.2.5 位操作指令,可位寻址的ram区是20h2fh共16个字节单元,即128个位单元(位地址空间为00h7fh)。 可位寻址的sfr有acc,b,psw,ip,ie,scon,tcon,和p0p3口。它们是sfr中字节地址能被8整除的部分。 位指令中位地址的表达形式有以下4种。 直接地址方式,如0a8h 点操作符方式,如ie.0 位名称方式,如ex0 用户定义名方式,如用伪指令bit定义,97,01:00,例3-11 p3.2和p3.3口各接有一只按键,要求它们分别按下时(p3.2=0或p3.3=0),分别使p1口为0或ffh。 start:mov p1, #0ffh mov p3, #0ffh l1: jnb p3.2, l2 ;p3.2=0,则转到l2使p1口输出0 jnb p3.3, l3 ;p3.2=1,p3.3=0,则转到l3 ljmp l1 ;p3.2=1,p3.3=1,则转到l1(等待) l2: mov p1, #00h ;p3.2=0,使p1口全为“0” ljmp l1 l3: mov p1, #0ffh ;p3.3=0,使p1口全为“1” ljmp l1,3.2.5 位操作指令,98,01:00,例3-12 用位操作指令实现xx0x1,设x0为p1.0,x1为p1.1,x为acc.0。 分析:因位操作指令中无异或指令, 依据xx0x1x0x1+x0x1,用与、或指令完成,编程如下。 x bit acc.0 x0 bit p1.0 x1 bit p1.1 ;位定义 mov c, x0 anl c, /x1 ;c=x0x1 mov 20h, c ;暂存于20h单元 mov c, x1 anl c, /x0 ;c=x0x1 orl c, 20h ;cx0x1+x0x1 mov x, c sjmp $,3.2.5 位操作指令,99,01:00,习题与思考题,3-1 什么是寻址方式?mcs-51指令系统

温馨提示

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

评论

0/150

提交评论