
第三章单片机.ppt
131页Ø3.1 3.1 概述概述 Ø3.2 80C513.2 80C51单片机寻址方式单片机寻址方式Ø3.3 80C513.3 80C51指令系统指令系统Ø3.4 3.4 本章小节本章小节Ø3.5 3.5 思考与练习题思考与练习题 3.1 概述概述 3.1 3.1 概述概述 一、指令系统与编程一、指令系统与编程 1 1、指令、指令 计算机进行某种操作的代码形式 计算机进行某种操作的代码形式 2 2、指令系统、指令系统 一台计算机所能识别的全部指令 一台计算机所能识别的全部指令 3 3、程序、程序 使计算机完成某种任务的一系列指令 使计算机完成某种任务的一系列指令3.1 概述概述 二、二、 汇编语言与机器语言汇编语言与机器语言 1 1、机器语言、机器语言 计算机能直接识别的由 计算机能直接识别的由0 0和和1 1组成的二进制编码指组成的二进制编码指令,这种编码称为机器码令,这种编码称为机器码 特点: 特点: 记忆、书写、编程很不方便,不易理解,容易出记忆、书写、编程很不方便,不易理解,容易出错。
错 2 2、汇编语言、汇编语言 用助记符用助记符( (操作码操作码) )、符号地址、符号地址( (操作数操作数) )、标号等、标号等符号表示指令的功能和特征符号表示指令的功能和特征 特点: 特点: 便于记忆、理解、分类和编程便于记忆、理解、分类和编程3.1 概述概述 三、汇编语言格式三、汇编语言格式 1 1、汇编语句、汇编语句 由 由4 4部分构成部分构成 [ [标号:标号:] ] 操作码 操作码 [ [操作数操作数] ] [ [;注释;注释] ] 2 2、各部分作用、各部分作用 ““标号标号” ” 该指令的符号地址,根据需要设定该指令的符号地址,根据需要设定 标号是以字母开始,由 标号是以字母开始,由1 1~~8 8个字母或数字串组成,个字母或数字串组成,以冒号结尾;以冒号结尾; 不能用指令助记符、伪指令或寄存器名来做标号 不能用指令助记符、伪指令或寄存器名来做标号名;名; 标号是任选的,只在需要时才设标号; 标号是任选的,只在需要时才设标号; 一旦使用了某标号定义一地址单元,在程序的其 一旦使用了某标号定义一地址单元,在程序的其他地方就不能随意修改这个定义,也不能重复定义。
他地方就不能随意修改这个定义,也不能重复定义3.1 概述概述 ““操作码操作码” ” 指令或伪指令的助记符,用来表示指令的性质指令或伪指令的助记符,用来表示指令的性质对于一条汇编语言指令,这一字段是必不可少的对于一条汇编语言指令,这一字段是必不可少的 “ “操作数操作数”” 可以为工作寄存器名、可以为工作寄存器名、SFRSFR名、标号名、常数、表名、标号名、常数、表达式等,用以表示操作数地址;达式等,用以表示操作数地址; 根据指令功能的不同,操作数可以有一个、两个、 根据指令功能的不同,操作数可以有一个、两个、三个或者没有,操作数之间用三个或者没有,操作数之间用““,,””分开;分开; 分为目的操作数和源操作数两种; 分为目的操作数和源操作数两种; 为使操作数区段出现的字符和 为使操作数区段出现的字符和1616进制数区别开来,进制数区别开来,在以字母开头的在以字母开头的1616进制数前加进制数前加0 0,如将,如将FFHFFH写成写成0FFH(H0FFH(H表示此数为表示此数为1616进制数,二进制用进制数,二进制用B B表示,十进制用表示,十进制用D D表表示或省略示或省略) )。
3.1 概述概述 ““注释注释”” 对指令的解释,可有可无良好的注释是对指令的解释,可有可无良好的注释是汇编语言程序编写中的重要组成部分汇编语言程序编写中的重要组成部分3.1 概述概述 四、指令代码格式四、指令代码格式 1 1、指令代码、指令代码( (即机器语言即机器语言) ) 指令的二进制数表示方法,是指令在存储器存储 指令的二进制数表示方法,是指令在存储器存储的形式 2 2、根据指令代码的长度,、根据指令代码的长度,80C5180C51的指令可分为的指令可分为:: 单字节指令 单字节指令 由 由8 8位二进制编码表示有两种形式:位二进制编码表示有两种形式: (1) 8(1) 8位全表示操作码位全表示操作码 例如,空操作指令 例如,空操作指令NOPNOP,机器码为:,机器码为:00000000 00000000 第三章第三章 80C5180C51单片机指令系统单片机指令系统--- 3.1 概述概述 (2) 8(2) 8位编码中包含操作码和寄存器编码位编码中包含操作码和寄存器编码。
例如 例如 MOV AMOV A,,RnRn ;; 功能:功能:把把RnRn中的内容送到中的内容送到A A中,机器码为:中,机器码为: 1 1 1 0 1 ← n → (E8H1 1 1 0 1 ← n → (E8H~~EFH) EFH) 又如 又如 MOV AMOV A,,@ @RiRi ;; 功能:功能:把间址寄存器把间址寄存器RiRi中的内容为地址的单元中中的内容为地址的单元中内容送到内容送到A A中,其机器码为:中,其机器码为: 1 1 1 0 0 1 1 i (E6H1 1 1 0 0 1 1 i (E6H~~E7H) E7H) 3.1 概述概述 双字节指令双字节指令 编码由两个字节组成,存放在存储器中占两个存编码由两个字节组成,存放在存储器中占两个存储单元 例如例如 MOV AMOV A,,#data#data;; 功能:功能:把立即数把立即数#data#data送到送到A A中,机器码为:中,机器码为: 第一字节 第一字节 0 1 1 1 0 1 0 0 0 1 1 1 0 1 0 0 操作码操作码 (74H) (74H) 第二字节 第二字节 #data #data 操作数操作数( (立即数立即数) ) 又如又如 JZ JZ relrel ; ;功能:功能:先调整程序指针,即先调整程序指针,即PC←(PC)+2PC←(PC)+2,再进行判断:若,再进行判断:若(A)=0(A)=0,则跳转到,则跳转到PC=((PC=((PC)+relPC)+rel) )的程序地址处。
机器码为:的程序地址处机器码为: 第一字节 第一字节 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 操作码操作码(60H) (60H) 第二字节 第二字节 relrel 操作数操作数( (相对偏移量相对偏移量) )3.1 概述概述 三字节指令三字节指令 三字节指令的编码由三个字节组成,第一字节为三字节指令的编码由三个字节组成,第一字节为操作码,第二、三字节为操作数,存放在存储器中占操作码,第二、三字节为操作数,存放在存储器中占三个存储单元三个存储单元 例如 例如 MOV MOV direct,#datadirect,#data 功能:功能:把立即数把立即数#data#data送到直接地址送到直接地址directdirect中,机中,机器码为:器码为: 第一字节 第一字节 0 1 1 1 0 1 0 1 0 1 1 1 0 1 0 1 操作码操作码(75H)(75H) 第二字节 第二字节 direct direct 操作数操作数( (直接地址直接地址) ) 第三字节 第三字节 #data #data 操作数操作数( (立即数立即数) ) 3.1 概述概述 结论结论:: 无论是哪种指令,其第一个字节均为操作码,它 无论是哪种指令,其第一个字节均为操作码,它确定了指令的功能;其他的字节为操作数,指出了被确定了指令的功能;其他的字节为操作数,指出了被操作的对象,指明了参与操作的数据或数据所存放的操作的对象,指明了参与操作的数据或数据所存放的地址。
地址 学会初步判断指令代码长度的方法,对于正确应 学会初步判断指令代码长度的方法,对于正确应用指令系统是非常有益的用指令系统是非常有益的 3.1 概述概述 3 3、指令代码长度的初步确定、指令代码长度的初步确定 (1)(1)操作码是一定要占一个字节;操作码是一定要占一个字节; (2)80C51(2)80C51在进行指令编码时,在进行指令编码时,掌握的原则掌握的原则是尽量是尽量简单、短、具有规律性因此,通常将作操作数的固简单、短、具有规律性因此,通常将作操作数的固定不变的寄存器隐含到操作码中定不变的寄存器隐含到操作码中( (如如A A,,B B,,RnRn,,DPTRDPTR等等) );; (3)(3)通常将作操作数的间址寄存器通常将作操作数的间址寄存器RiRi,,DPTRDPTR隐含到隐含到操作码中;操作码中; (4)(4)通常通常8 8位立即数位立即数#data#data,直接地址,直接地址directdirect,相对,相对偏移量偏移量relrel单独占一个字节单独占一个字节 通过指令系统的学习,逐步了解、掌握确定指令通过指令系统的学习,逐步了解、掌握确定指令代码长度的方法。
代码长度的方法3.1 概述概述五、指令中常用符号五、指令中常用符号 (1) A(1) A:累加器:累加器ACCACC;; (2) B(2) B:寄存器:寄存器B B;; (3) C(3) C:进:进( (借借) )位标志位,在位操作指令中作为位累位标志位,在位操作指令中作为位累加器使用;加器使用; (4) (4) RnRn:当前选中的工作寄存器组的:当前选中的工作寄存器组的8 8个寄存器个寄存器R0R0~~R7R7;; (5) (5) RiRi:当前选中的工作寄存器组中作为寄存器间:当前选中的工作寄存器组中作为寄存器间接寻址的接寻址的2 2个寄存器个寄存器R0R0、、R1R1;; 3.1 概述概述 (6) direct(6) direct:表示可以直接寻址的内部:表示可以直接寻址的内部RAMRAM地址或地址或SFRSFR地址;地址; (7) #data(7) #data:包含在指令中的:包含在指令中的8 8位立即数;位立即数; (8) #data16(8) #data16:包含在指令中的:包含在指令中的1616位立即数;位立即数; (9) addr16(9) addr16::1616位目的地址;位目的地址; (10) addr11(10) addr11::1111位目的地址;位目的地址; (11) (11) relrel:补码形式的:补码形式的8 8位地址偏移量。
用于相对转移位地址偏移量用于相对转移指令中,偏移量以下一条指令第一字节地址为基址,指令中,偏移量以下一条指令第一字节地址为基址,偏移量范围为偏移量范围为-128-128~~+127+127;; (12) bit(12) bit:内部:内部RAMRAM或或SFRSFR的直接寻址位地址的直接寻址位地址3.1 概述概述 (13) @(13) @:间址寄存器或基址寄存器前缀; :间址寄存器或基址寄存器前缀; (14) /(14) /:位操作指令中,表示对该位先求反再参与操:位操作指令中,表示对该位先求反再参与操作,但不影响原值; 作,但不影响原值; (15) (X)(15) (X):表示:表示X X地址中的内容;地址中的内容; (16) ((X))(16) ((X)):表示以:表示以X X地址单元中内容为地址的单元中地址单元中内容为地址的单元中数; 数; (17) X←Y(17) X←Y:把:把Y Y单元中内容赋给单元中内容赋给X X地址单元中;地址单元中; (18) (X)←Y(18) (X)←Y:把:把Y Y单元中内容赋给以单元中内容赋给以X X地址中内容为地地址中内容为地址的单元中。
址的单元中3.280C513.280C51单片机寻址方式单片机寻址方式 3.2 80C513.2 80C51单片机寻址方式单片机寻址方式 寻址方式:根据指令中给出的地址寻找真实操作数 寻址方式:根据指令中给出的地址寻找真实操作数地址的方式地址的方式 80C5180C51单片机共有单片机共有7 7种寻址方式种寻址方式一、立即寻址一、立即寻址 指令操作码后的一个字节是实际操作数本身该操 指令操作码后的一个字节是实际操作数本身该操作数直接参与操作,又称立即数,用符号作数直接参与操作,又称立即数,用符号““##””表示表示 例例3.13.1 MOV AMOV A,,#3AH#3AH ; ;A←3AHA←3AH 机器码: 机器码:74H74H 3AH3AH 一条双字节指令, 一条双字节指令,功能:功能:将立即数将立即数3AH3AH送入送入A A中3.280C513.280C51单片机寻址方式单片机寻址方式 设把指令存放在存储器的设把指令存放在存储器的2000H2000H、、2001H2001H两单元中两单元中3.280C513.280C51单片机寻址方式单片机寻址方式 例例3.23.2 MOV DPTRMOV DPTR,#,#26ABH26ABH ; ;DPH←26HDPH←26H,,DPL←0ABHDPL←0ABH 指令代码为 指令代码为90H90H、、26H26H、、ABHABH,存放在,存放在ROMROM中占用中占用3 3个存个存储单元。
储单元 设把该指令存放在存储区的 设把该指令存放在存储区的2000H2000H、、2001H2001H、、2002H2002H单单元执行该指令后,立即数元执行该指令后,立即数26ABH26ABH被送到被送到DPTRDPTR中3.280C513.280C51单片机寻址方式单片机寻址方式 二、直接寻址二、直接寻址 指令操作码后面的一个字节就是实际操作数地址 指令操作码后面的一个字节就是实际操作数地址该地址指出了参与操作的数据所在的字节地址该地址指出了参与操作的数据所在的字节地址 可用于直接寻址的空间有两种: 可用于直接寻址的空间有两种: (1)(1)内部内部RAMRAM低低128128字节单元字节单元((00H00H~~7FH7FH) 例例3.33.3 MOV AMOV A,,70H70H ; ;A←(70H)A←(70H),指令的代码为,指令的代码为E5HE5H、、70H70H,双字节指令双字节指令第三章第三章 80C5180C51单片机指令系统单片机指令系统------ 3.280C513.280C51单片机寻址方式单片机寻址方式 设把该指令存放在 设把该指令存放在1000H1000H、、1001H1001H单元,且单元,且70H70H单元中单元中存放的数值为存放的数值为10H10H。
执行该指令后,数值执行该指令后,数值10H10H就被送到就被送到A A中2)SFR(2)SFR,只能用于直接寻址只能用于直接寻址 例例3.43.4 MOV IEMOV IE,#,#85H85H ;中断允许寄存器 ;中断允许寄存器IE←85HIE←85H3.280C513.280C51单片机寻址方式单片机寻址方式三、寄存器寻址三、寄存器寻址 指令中地址码给出的是某一通用寄存器编号,寄存 指令中地址码给出的是某一通用寄存器编号,寄存器的内容为操作数器的内容为操作数 可用于寄存器寻址的空间是: 可用于寄存器寻址的空间是:R0R0~~R7R7,,ACCACC,,Cy(Cy(位位) ),,DPTRDPTR,,B B 对于 对于A A、、B B、、DPTRDPTR和和C C,其寻址时具体的寄存器已隐含,其寻址时具体的寄存器已隐含在其操作码中;而对选定的在其操作码中;而对选定的8 8个工作寄存器个工作寄存器R0R0~~R7R7,则用,则用操作码的低操作码的低3 3位来指明所用的寄存器,用位来指明所用的寄存器,用PSWPSW中中RS1RS1、、RS0RS0来选择寄存器组。
来选择寄存器组 例例3.53.5 MOV AMOV A,,R2 R2 ;;A←(R2)A←(R2) 指令代码的二进制形式为 指令代码的二进制形式为1110101011101010,十六进制为,十六进制为EAHEAH这里二进制数的低这里二进制数的低3 3位为位为010010,正好为,正好为2 2,表示操作数为,表示操作数为R2R23.280C513.280C51单片机寻址方式单片机寻址方式 四、寄存器间接寻址四、寄存器间接寻址 指令中给出的寄存器的内容为操作数的地址 指令中给出的寄存器的内容为操作数的地址 可间接寻址的寄存器有: 可间接寻址的寄存器有:R0R0、、R1R1和和DPTRDPTR 使用时前面加符号 使用时前面加符号@ @表示间接寻址可用表示间接寻址可用R0R0或或R1R1间接间接寻址片内寻址片内RAMRAM低低128128字节或片外字节或片外RAMRAM的的256256个字节范围,此个字节范围,此类指令用操作码的最低位指明类指令用操作码的最低位指明R0R0或或R1R1;也可用;也可用DPTRDPTR间接间接寻址寻址64K64K字节外部字节外部RAMRAM。
例例3.63.6 MOV AMOV A,,@R0@R0 ; ;A←((R0))A←((R0)) 指令代码的二进制形式为 指令代码的二进制形式为1110011011100110注意,这里的注意,这里的最低位为最低位为0 0,表示现用寄存器为,表示现用寄存器为R0R0该指令代码的十六进该指令代码的十六进制形式为制形式为E6HE6H3.280C513.280C51单片机寻址方式单片机寻址方式 设此指令存放在设此指令存放在2030H2030H单元,工作寄存器为第单元,工作寄存器为第0 0组,组,在在R0R0中存放的数值为中存放的数值为50H50H,,50H50H为片内为片内RAMRAM的一个单元,的一个单元,50H50H单元中存放的数值为单元中存放的数值为ACHACH执行该指令后,执行该指令后,ACHACH送入送入A A中 3.280C513.280C51单片机寻址方式单片机寻址方式 例例3.73.7 MOVX AMOVX A,,@R1@R1 指令代码的二进制形式为 指令代码的二进制形式为1110001111100011注意,这里的注意,这里的最低位为最低位为1 1,表示现用寄存器为,表示现用寄存器为R1R1。
该指令代码的十六进该指令代码的十六进制形式为制形式为E3HE3H 设此指令存放在 设此指令存放在2030H2030H单元,工作寄存器为第单元,工作寄存器为第0 0组,组,在在R1R1中存放的数值为中存放的数值为AFHAFH,片外数据存储器,片外数据存储器AFHAFH单元中的单元中的值为值为30H30H执行该指令后,执行该指令后,30H30H送入送入A A中 在执行在执行PUSHPUSH和和POPPOP指令时,采用指令时,采用SPSP作寄存器间接寻址作寄存器间接寻址 3.280C513.280C51单片机寻址方式单片机寻址方式五、变址寻址五、变址寻址( (基址寄存器基址寄存器+ +变址寄存器间接寻址变址寄存器间接寻址) ) 变址寻址时,指定的基址寄存器的内容与变址寄存 变址寻址时,指定的基址寄存器的内容与变址寄存器的内容器的内容( (偏移量偏移量) )相加,所得的结果作为操作数的地址相加,所得的结果作为操作数的地址 例例3.83.8 MOVC AMOVC A,,@A+DPTR@A+DPTR ; ;A←((A)+(DPTR))A←((A)+(DPTR)),源,源操作数中操作数中DPTRDPTR的内容为基地址,的内容为基地址,A A中的内容为偏移量。
中的内容为偏移量 可作为基地址的寄存器有 可作为基地址的寄存器有DPTRDPTR和和PCPC,偏移量只能放,偏移量只能放在在A A中,偏移量为无符号数中,偏移量为无符号数 无论用 无论用DPTRDPTR或或PCPC作为基址指针,变址寻址方式只适作为基址指针,变址寻址方式只适用于用于外部外部ROMROM,通常用于读取数据表通常用于读取数据表 该指令的代码为 该指令的代码为93H93H,是单字节指令 ,是单字节指令 3.280C513.280C51单片机寻址方式单片机寻址方式 设此指令存放在设此指令存放在2040H2040H单元,单元,A A中原存放值为中原存放值为E0HE0H,,DPTRDPTR中值为中值为2000H2000H,则,则A+DPTRA+DPTR形成的地址为形成的地址为20E0H20E0H20E0H20E0H单元中内容为单元中内容为47H47H,则执行该指令后,,则执行该指令后,A A中原来的中原来的E0HE0H被被47H47H代替 3.280C513.280C51单片机寻址方式单片机寻址方式 六、相对寻址六、相对寻址 相对寻址时,由 相对寻址时,由PCPC提供的基地址与指令中提供的偏提供的基地址与指令中提供的偏移量移量relrel相加,得到操作数地址。
这时指出的地址是操作相加,得到操作数地址这时指出的地址是操作数与现行指令的相对位置 数与现行指令的相对位置 例例3.93.9 JC JC relrel ;若 ;若Cy=1Cy=1,则,则 PC←(PC)+2+relPC←(PC)+2+rel,,否则否则 PC←(PC)+2PC←(PC)+2 执行这条指令时,若 执行这条指令时,若Cy=1Cy=1,则程序跳转到当前,则程序跳转到当前PCPC值值加加2 2再加再加relrel的方向地址处,其中的方向地址处,其中2 2为该指令的字节长度,为该指令的字节长度,relrel为为8 8位带符号数,其表示的范围为位带符号数,其表示的范围为-128-128~~+127+127 3.280C513.280C51单片机寻址方式单片机寻址方式 该指令中设 该指令中设relrel=03H=03H,则指令的代码为,则指令的代码为40H40H、、03H03H,是,是双字节指令此指令表示若进位双字节指令此指令表示若进位C=0C=0,则程序顺序执行,,则程序顺序执行,即不跳转,即不跳转,(PC)=(PC)+2(PC)=(PC)+2;若进位;若进位C=1C=1,则以,则以PCPC中的当前中的当前内容为基地址,加上偏移量内容为基地址,加上偏移量03H03H后所得到的结果为该转移后所得到的结果为该转移指令的目的地址。
指令的目的地址 现设此指令存放在 现设此指令存放在1000H1000H和和1001H1001H单元,且目前单元,且目前C=1C=1,,则取指令后,则取指令后,PCPC当前内容为当前内容为1002H1002H对C C进行判断后,把进行判断后,把PCPC当前内容与偏移量当前内容与偏移量03H03H相加,得到转移目的地址相加,得到转移目的地址1005H1005H所以执行完此指令后,所以执行完此指令后,PCPC中的值为中的值为1005H1005H,程序将从,程序将从1005H1005H开始执行开始执行3.280C513.280C51单片机寻址方式单片机寻址方式 80C5180C51中的相对转移指令有二字节或三字节两种,它中的相对转移指令有二字节或三字节两种,它只适用于只适用于ROMROM空间3.280C513.280C51单片机寻址方式单片机寻址方式 七、位寻址七、位寻址 位寻址是对片内 位寻址是对片内RAMRAM的位寻址区和某些可位寻址的位寻址区和某些可位寻址( (字字节地址能被节地址能被8 8整除整除) )的的SFRSFR进行位操作时的寻址方式。
位寻进行位操作时的寻址方式位寻址与直接寻址中字节地址形式完全一样,主要由操作码址与直接寻址中字节地址形式完全一样,主要由操作码来区分,使用时应注意来区分,使用时应注意 例例3.103.10 CLR 92HCLR 92H ; ;92H92H是是SFR P1SFR P1的的D2D2这一位,若这一位,若指令执行前指令执行前P1=0FFHP1=0FFH,则执行该指令后,,则执行该指令后,P1=0FBHP1=0FBH 例如例如 MOV CMOV C,,06H06H ; ;功能:功能:将直接位地址将直接位地址06H06H中的中的内容送入位累加器内容送入位累加器C C中3.280C513.280C51单片机寻址方式单片机寻址方式 3.280C513.280C51单片机寻址方式单片机寻址方式 [ [例题例题1] 1] 指出下列指令的寻址方式指出下列指令的寻址方式 MOV AMOV A,,R1 R1 ;(A)←(R1) ;(A)←(R1) 寄存器寻址寄存器寻址 ADD AADD A,,#05H #05H ; (A)←(A)+; (A)←(A)+立即数立即数05H05H 立即寻址立即寻址 MOV AMOV A,,@R1 @R1 ; (A)←((R1)); (A)←((R1))寄存器间接寻址寄存器间接寻址 MOV 30HMOV 30H,,4AH 4AH ;(30H);(30H)←←(4AH(4AH)) 直接寻址直接寻址 MOVC AMOVC A,,@A+DPTR @A+DPTR ;(A)←((A)+(DPTR)) ;(A)←((A)+(DPTR)) 变址寻址变址寻址 SJMP LP SJMP LP ;(PC)←(PC)+2+;(PC)←(PC)+2+偏移量偏移量 相对寻址相对寻址 MOV 65H, C MOV 65H, C ;(65H)←(Cy) ;(65H)←(Cy) 位寻址位寻址3.380C513.380C51指令系统指令系统 3.3 80C513.3 80C51指令系统指令系统3.380C513.380C51指令系统指令系统 3.3 80C513.3 80C51指令系统指令系统 一、数据传送指令一、数据传送指令(29(29条条) ) 指令系统中最基本、最常用的一类指令,主要用于 指令系统中最基本、最常用的一类指令,主要用于数据的传送、保存以及交换等场合。
数据的传送、保存以及交换等场合 1 1、内部、内部RAMRAM间的数据传送间的数据传送 80C5180C51内部传送指令的指令助记符为内部传送指令的指令助记符为MOVMOV按源操作按源操作数的寻址方式可分为数的寻址方式可分为4 4组:组:3.380C513.380C51指令系统指令系统1 1、内部、内部RAMRAM间的数据传送间的数据传送 3.380C513.380C51指令系统指令系统 (1)(1)立即寻址立即寻址 MOV AMOV A,,#data#data ;;A←dataA←data MOV MOV RnRn,,#data #data ;;Rn←dataRn←data MOV @MOV @RiRi,,#data#data ;;( (Ri)←dataRi)←data MOV directMOV direct,,#data #data ;;direct←datadirect←data MOV DPTRMOV DPTR,,#data16 #data16 ;;DPTR←data16DPTR←data16 例例3.113.11 MOV AMOV A,,#30H #30H ; ;A←30HA←30H MOV R1MOV R1,,#20H #20H ;;R1←20HR1←20H MOV @R1MOV @R1,,#40H #40H ; ;(20H)←40H(20H)←40H3.380C513.380C51指令系统指令系统 (2)(2)直接寻址直接寻址 MOV AMOV A,,direct direct ; ;A←(directA←(direct) ) MOV directMOV direct,,A A ; ;direct←(Adirect←(A) ) MOV MOV RnRn,,direct direct ; ;Rn←(directRn←(direct) ) MOV @MOV @RiRi,,direct direct ; ;( (Ri)←(directRi)←(direct) ) MOV direct2MOV direct2,,direct1direct1 ; ;direct2←(direct1)direct2←(direct1) 这组指令将内部 这组指令将内部RAMRAM直接地址中的内容传送到直接地址中的内容传送到RnRn、、A A及直接地址中,这里的直接地址既可以指内部及直接地址中,这里的直接地址既可以指内部RAMRAM低低128128字节,也可以指字节,也可以指SFRSFR区的地址。
最后一条指令功能区的地址最后一条指令功能灵活,可使数据直接在内部灵活,可使数据直接在内部RAMRAM间传送,无需在间传送,无需在A A中中中中转 例例3.123.12 MOV P2MOV P2,,P1 P1 ; ;P2←(P1)P2←(P1)3.380C513.380C51指令系统指令系统 (3)(3)间接寻址间接寻址 MOV AMOV A,,@ @RiRi ; ;A←((RiA←((Ri)))) MOV @MOV @RiRi,,A A ;;( (Ri)←(ARi)←(A) ) MOV directMOV direct,,@ @RiRi ;;direct←((Ridirect←((Ri)))) 例例3.133.13 MOV 20HMOV 20H,,#30H#30H MOV R1MOV R1,,#20H#20H MOV AMOV A,,@R1 @R1 ;;(A)=30H(A)=30H3.380C513.380C51指令系统指令系统 (4)(4)寄存器寻址寄存器寻址 MOV AMOV A,,RnRn ; ;A←(RnA←(Rn) ) MOV MOV RnRn,,A A ; ;Rn←(ARn←(A) ) MOV directMOV direct,,RnRn ; ;direct←(Rndirect←(Rn) ) 这组指令允许通用寄存器这组指令允许通用寄存器RnRn与与A A或直接地址单元间或直接地址单元间的数据传送,但不允许寄存器间互相传送,寄存器间的数据传送,但不允许寄存器间互相传送,寄存器间的传送要经的传送要经A A中转。
中转 例如, 例如,MOV R1MOV R1,,R2R2这条指令是非法的这条指令是非法的3.380C513.380C51指令系统指令系统 2 2、涉及外部、涉及外部ROMROM和和RAMRAM的数据传送指令的数据传送指令 80C5180C51对外部对外部ROMROM传送操作的指令助记符为传送操作的指令助记符为MOVCMOVC,,对外部对外部RAMRAM传送操作的指令助记符为传送操作的指令助记符为MOVXMOVX (1)(1)对外部对外部ROMROM的传送操作的传送操作 MOVC AMOVC A,,@A+DPTR @A+DPTR ; ;A←((A)+(DPTR))A←((A)+(DPTR)) MOVC AMOVC A,,@A+PC@A+PC ; ;PC←(PC)+1PC←(PC)+1,,A←((A)+(PC))A←((A)+(PC)) 两条指令都是单字节指令,均为变址寻址方式,两条指令都是单字节指令,均为变址寻址方式,A A中的偏移量为无符号数中的偏移量为无符号数 第一条指令以第一条指令以DPTRDPTR为基址寄存器,功能是将为基址寄存器,功能是将A A的内的内容与容与DPTRDPTR的内容相加后形成一个的内容相加后形成一个1616位地址,把该地址位地址,把该地址指出的指出的ROMROM单元的内容送给单元的内容送给A A。
3.380C513.380C51指令系统指令系统 第二条指令以第二条指令以PCPC作为基址寄存器,首先将作为基址寄存器,首先将PCPC值加值加1 1指向下一条指令地址,然后将指向下一条指令地址,然后将A A的内容与的内容与PCPC的内容相加的内容相加形成形成1616位地址,把该地址指出的位地址,把该地址指出的ROMROM单元的内容送给单元的内容送给A A 这两条指令常用于查表采用这两条指令常用于查表采用PCPC作为基址寄存器作为基址寄存器时,常数表与时,常数表与MOVCMOVC指令离得较近,称为指令离得较近,称为近程查表近程查表;而;而采用采用DPTRDPTR作基址寄存器时,表首地址可在作基址寄存器时,表首地址可在64K64K范围任意范围任意处,故称处,故称远程查表远程查表 例例3.143.14 (DPTR)=8100H(DPTR)=8100H,,(A)=40H(A)=40H,执行指令 ,执行指令 MOVC AMOVC A,,@A+DPTR @A+DPTR ,结果为,结果为ROMROM中中8140H8140H单元的内容送单元的内容送给给A A。
例例3.153.15 (A)=30H(A)=30H,执行指令,执行指令 1000H1000H::MOVC AMOVC A,,@A+PC@A+PC 结果为结果为ROMROM中中1031H1031H单元的内容送给单元的内容送给A A3.380C513.380C51指令系统指令系统(2)(2)对外部对外部RAMRAM的传送操作的传送操作 MOVX AMOVX A,,@ @RiRi ; ;A←((RiA←((Ri)))) MOVX @MOVX @RiRi,,A A ; ;( (Ri)←(ARi)←(A) ) MOVX AMOVX A,,@DPTR@DPTR ;;A←((DPTR))A←((DPTR)) MOVX @DPTRMOVX @DPTR,,A A ; ;(DPTR)←(A)(DPTR)←(A) 这组指令的功能:这组指令的功能:A A与片外与片外RAMRAM间的相互传送间的相互传送 前两条指令用前两条指令用R0R0或或R1R1作低作低8 8位地址指针,由位地址指针,由P0P0口送口送出,寻址范围为出,寻址范围为256B256B,此时,此时P2P2口仍可作通用口仍可作通用I/OI/O口。
口 后两条指令以后两条指令以DPTRDPTR为片外为片外RAM 16RAM 16位地址指针,寻位地址指针,寻址范围为址范围为64KB64KB当片外RAMRAM少于少于( (或等于或等于)256)256个字节时,个字节时,上述指令均可使用;当片外上述指令均可使用;当片外RAMRAM大于大于256256个字节时,宜个字节时,宜选用后两条指令选用后两条指令3.380C513.380C51指令系统指令系统 由于由于80C5180C51指令系统中没有专门的输入指令系统中没有专门的输入/ /输出指令,输出指令,且片外扩展的且片外扩展的I/OI/O口与片外口与片外RAMRAM是统一编址的,故上述是统一编址的,故上述4 4条指令也可以作为输入输出指令条指令也可以作为输入输出指令 例例3.163.16 设片外 设片外RAMRAM::(2079H)=80H(2079H)=80H,执行下列指令:,执行下列指令: MOV DPTRMOV DPTR,,#2079H#2079H MOVX AMOVX A,,@DPTR@DPTR 结果为: 结果为:(A)=80H(A)=80H。
3.380C513.380C51指令系统指令系统 80C5180C51的堆栈区必须设在内部的堆栈区必须设在内部RAMRAM中堆栈是向上中堆栈是向上生长的,堆栈指针始终指向堆顶,且按生长的,堆栈指针始终指向堆顶,且按““先进后出先进后出””的原则进行操作,即入栈时的原则进行操作,即入栈时SPSP的内容先加的内容先加1 1,然后数据,然后数据推入;出栈时先弹出数据,然后推入;出栈时先弹出数据,然后SPSP的内容减的内容减1 1 进栈指令:进栈指令:PUSHPUSH directdirect ;;SP←(SP)+1SP←(SP)+1,,( (SP)←(directSP)←(direct) ) 出栈指令:出栈指令:POPPOP direct direct ;;direct←((SPdirect←((SP)))),,SP←(SP)-1SP←(SP)-13.380C513.380C51指令系统指令系统 例例3.173.17 编制根据 编制根据A A中的内容中的内容(0(0~~9)9)查其平方表的查其平方表的程序 COUNTCOUNT::PUSH DPH PUSH DPH ;保护;保护DPTRDPTR内容内容 PUSH DPL PUSH DPL MOV DPTR MOV DPTR ,,#TABLE #TABLE ;赋表首址 ;赋表首址 MOVC AMOVC A,,@A+DPTR @A+DPTR ;查表并传送给 ;查表并传送给A A POP DPL POP DPL ;恢复 ;恢复DPTRDPTR原值原值 POP DPH POP DPH RET RET ;返回主程序;返回主程序 TABLETABLE::DB 00DB 00 DB 01DB 01 … … DB 64DB 64 DB 81DB 813.380C513.380C51指令系统指令系统 4 4、数据交换指令、数据交换指令 XCH AXCH A,,RnRn ; ;(A) ((A) (RnRn) ) XCH AXCH A,,directdirect ;;(A) (direct)(A) (direct) XCH AXCH A,,@ @RiRi ;;(A) (((A) ((RiRi)))) XCHD AXCHD A,,@ @RiRi ;;(A)3(A)3~~0 ((Ri))30 ((Ri))3~~0 0,, 将将A A内容的低内容的低4 4位与位与RiRi间址单元内容的低间址单元内容的低4 4位交换,各自位交换,各自高高4 4位内容保持不变。
位内容保持不变 SWAP A SWAP A ;;(A)3(A)3~~0 (A)70 (A)7~~4 4,将,将A A中内容的低中内容的低4 4位与高位与高4 4位交换 前三条为字节交换指令,前三条为字节交换指令,A A的内容与源操作数所指的内容与源操作数所指定的数据相互交换定的数据相互交换 后两条为半字节交换指令后两条为半字节交换指令3.380C513.380C51指令系统指令系统例例3.183.18 分析下列程序执行情况 分析下列程序执行情况 MOV AMOV A,,#20H #20H ; ;(A)=20H(A)=20H MOV 30HMOV 30H,,#8FH #8FH ; ;(30H)=8FH(30H)=8FH MOV R1MOV R1,,#30H #30H ;;(R1)=30H(R1)=30H XCH AXCH A,,@R1@R1 ;;(A)=8FH(A)=8FH,,((R1))=20H((R1))=20H XCHD AXCHD A,,@R1 @R1 ; ;(A)3(A)3~~0 ((R1))30 ((R1))3~~0 0 结果为:结果为:(A)=80H(A)=80H,,(R1)=30H(R1)=30H,,(30H)=2FH(30H)=2FH。
例例3.193.19 (A)=0ABH (A)=0ABH,执行指令 ,执行指令 SWAP ASWAP A 结果为: 结果为:(A)=0BAH(A)=0BAH 3.380C513.380C51指令系统指令系统二、算术运算指令二、算术运算指令(24(24条条) ) 主要完成加、减、乘、除四则运算,以及加主要完成加、减、乘、除四则运算,以及加1 1 、、减减1 1、、BCDBCD码的运算和调整等除加码的运算和调整等除加1 1、减、减1 1运算外,这运算外,这类指令大多数要影响类指令大多数要影响PSWPSW 分为 分为7 7组:组:(1)(1)加法指令加法指令 ADD AADD A,,RnRn ; ;A←(A)+(RnA←(A)+(Rn) ) ADD AADD A,,direct direct ; ;A←(A)+(directA←(A)+(direct) ) ADD AADD A,,@ @RiRi ;;A←(A)+(RiA←(A)+(Ri) ) ADD AADD A,,#data #data ; ;A←(A)+dataA←(A)+data 以上指令都以以上指令都以A A为目的操作数地址,将为目的操作数地址,将A A中内容与中内容与源操作数所指出的数据相加,结果送入源操作数所指出的数据相加,结果送入A A中。
中3.380C513.380C51指令系统指令系统 例例3.203.20 (A)=85H (A)=85H,,(R0)=20H(R0)=20H,,(20H)=0AFH(20H)=0AFH,执行指令 ,执行指令 ADD AADD A,,@R0@R0 运算后: 运算后:(A)=34H(A)=34H,,CY=1CY=1,,AC=1AC=1,,OV=1OV=1,,P=1P=1 上例中,若把上例中,若把85H85H和和0AFH0AFH作无符号数相加,则不考作无符号数相加,则不考虑溢出,结果为虑溢出,结果为134H134H若把85H85H和和0AFH0AFH作有符号数相加,作有符号数相加,则得到两个负数相加得正数的错误结论,此时则得到两个负数相加得正数的错误结论,此时OV=1OV=1,,表示出错当进行带符号数表示出错当进行带符号数( (补码补码) )运算时,若第运算时,若第6 6、、7 7位中有一位产生进位而另一位不产生进位,则使位中有一位产生进位而另一位不产生进位,则使OV=1OV=1;否则使;否则使OV=0OV=0OV=1OV=1表示两正数相加,和变为负数,表示两正数相加,和变为负数,或两负数相加和变为正数的错误结果。
溢出标志或两负数相加和变为正数的错误结果溢出标志OVOV在在CPUCPU内部是靠硬件内部是靠硬件““异或门异或门””获得的3.380C513.380C51指令系统指令系统 (2)(2)带进位加法指令带进位加法指令 ADDC AADDC A,,RnRn ; ;A←(A)+(RnA←(A)+(Rn) )++C C ADDC AADDC A,,direct direct ; ;A←(A)+(directA←(A)+(direct) )++C C ADDC AADDC A,,@ @RiRi ;;A←(A)+((RiA←(A)+((Ri))))++C C ADDC AADDC A,,#data #data ;;A←(A)+dataA←(A)+data++C C 上述指令除考虑进位位外,和 上述指令除考虑进位位外,和ADDADD指令完全相同指令完全相同 例例3.213.21 (A)=85H(A)=85H,,(20H)=0FFH(20H)=0FFH,,CY=1CY=1,执行指令 ,执行指令 ADDC AADDC A,,20H20H 运算后:运算后:(A)=85H(A)=85H,,CY=1CY=1,, AC=1AC=1,,OV=0OV=0,,P=1P=1。
3.380C513.380C51指令系统指令系统(3)(3)加加1 1指令指令 INC A INC A ; ;A←(A)+1A←(A)+1 INC INC RnRn ;;Rn←(Rn)+1Rn←(Rn)+1 INC directINC direct ; ;direct←(direct)+1direct←(direct)+1 INC @INC @RiRi ; ;(Ri)←((Ri))+1(Ri)←((Ri))+1 INC DPTRINC DPTR ; ;DPTR←(DPTR)+1DPTR←(DPTR)+1 所有加 所有加1 1指令,除指令,除INC AINC A指令只影响奇偶标志指令只影响奇偶标志P P外,均外,均不影响不影响PSWPSW 在第三条指令中若直接地址为 在第三条指令中若直接地址为I/OI/O口,则进行口,则进行““读读- -改改- -写写””操作其功能是先读入端口锁存器内容,然后在操作其功能是先读入端口锁存器内容,然后在CPUCPU中加中加1 1,再输出到端口再输出到端口。
3.380C513.380C51指令系统指令系统(4)(4)带借位减法指令带借位减法指令 SUBB ASUBB A,,RnRn ; ;A←(A)-(A←(A)-(RnRn)-C)-C SUBB ASUBB A,,direct direct ; ;A←(A)-(direct)-CA←(A)-(direct)-C SUBB ASUBB A,,@ @RiRi ;;A←(A)-((A←(A)-((RiRi))-C))-C SUBB ASUBB A,,#data #data ; ;A←(A)-data-CA←(A)-data-C 功能:功能:从从A A中内容,减去借位中内容,减去借位CyCy,再减去源操作数指,再减去源操作数指定的内容,结果送入定的内容,结果送入A A中 在上述操作中, 在上述操作中,Cy=1Cy=1表示有借位,表示有借位,CY=0CY=0表示无借位;表示无借位;OV=1OV=1,表示带符号数相减时,正数减负数结果为负数或负,表示带符号数相减时,正数减负数结果为负数或负数减正数结果为正数的错误结论,与加法类似,溢出标志数减正数结果为正数的错误结论,与加法类似,溢出标志也由运算时差的第也由运算时差的第6 6、、7 7位的借位状态位的借位状态““异或异或””而得。
另外,而得另外,减法运算也影响减法运算也影响PSWPSW中的中的ACAC和和P P标志标志 3.380C513.380C51指令系统指令系统 例例3.223.22 (A)=0C9H(A)=0C9H,,(R3)=54H(R3)=54H,,Cy=1Cy=1,执行命令 ,执行命令 SUBB ASUBB A,,R3R3 运算后:运算后:(A)=74H(A)=74H,,Cy=0Cy=0,,AC=0AC=0,,OV=1OV=1,,P=0P=0 若在进行单字节或多字节减法运算前,不知借位标 若在进行单字节或多字节减法运算前,不知借位标志志CyCy的值,则应在进行运算前对的值,则应在进行运算前对CYCY清清““0”0”3.380C513.380C51指令系统指令系统(5)(5)减减1 1指令指令 DEC A DEC A ; ;A←(A)-1A←(A)-1 DEC DEC RnRn ;;Rn←(Rn)-1Rn←(Rn)-1 DEC directDEC direct ; ;direct←(direct)-1direct←(direct)-1 DEC @DEC @RiRi ; ;(Ri)←((Ri))-1(Ri)←((Ri))-1 所有减 所有减1 1指令,除指令,除DEC ADEC A指令只影响奇偶标志指令只影响奇偶标志P P外,均外,均不影响不影响PSWPSW。
与加 与加1 1指令相同,在第三条指令中若直接地址为指令相同,在第三条指令中若直接地址为I/OI/O口,则进行口,则进行““读读- -改改- -写写””操作应注意,操作应注意,DEC DPTRDEC DPTR指令指令是非法的,需要时可以用是非法的,需要时可以用DEC DPLDEC DPL代替3.380C513.380C51指令系统指令系统(6)(6)乘、除法指令乘、除法指令 乘法乘法 功能:功能:两个两个8 8位无符号数相乘,其位无符号数相乘,其1616位积的高位积的高8 8位存位存于于B B中,低中,低8 8位存于位存于A A中;若乘积大于中;若乘积大于0FFH0FFH,则,则OV=1OV=1,否则,否则OV=0OV=0;乘法运算总使;乘法运算总使Cy=0Cy=0,,P P标志由标志由A A中内容确定中内容确定 例例3.233.23 (A)=50H(A)=50H,,(B)=0A0H(B)=0A0H,执行指令 ,执行指令 MUL ABMUL AB 结果为: 结果为:(B)=32H(B)=32H,,(A)=00H(A)=00H,,Cy=0Cy=0,,OV=1OV=1,,P=0P=0。
3.380C513.380C51指令系统指令系统 除法除法 功能:功能:除法指令中,除法指令中,A A和和B B中均为无符号数,中均为无符号数,A A中存放中存放被除数,被除数,B B中存放除数;所得商送入中存放除数;所得商送入A A中,余数送入中,余数送入B B中除法运算总使除法运算总使CyCy和和OVOV清清““0”0”,,P P标志仍由标志仍由A A中内容确定中内容确定 例例3.243.24 (A)=0FBH (A)=0FBH,,(B)=12H(B)=12H,执行指令 ,执行指令 DIV ABDIV AB 结果为:结果为:(A)=0DH(A)=0DH,,(B)=11H(B)=11H,,CY=0CY=0,,OV=0OV=0,,P=1P=13.380C513.380C51指令系统指令系统DA ADA A 它是在进行 它是在进行BCDBCD码运算时,跟在码运算时,跟在ADDADD和和ADDCADDC指令之后,指令之后,将相加后存放在将相加后存放在A A中结果进行调整中结果进行调整 调整的条件和方法调整的条件和方法:: 若 若(A)3(A)3~~0 0>>9 9或或AC=1AC=1,则,则(A)3(A)3~~0←(A)30←(A)3~~0 0++6H6H;; 若 若(A)7(A)7~~4 4>>9 9或或Cy=1Cy=1,则,则(A)7(A)7~~4←(A)74←(A)7~~4 4++6H6H;; 若以上两条同时满足,或高 若以上两条同时满足,或高4 4位虽等于位虽等于9 9,但低,但低4 4位调位调整后有进位,则应加整后有进位,则应加66H66H。
说明:说明: 以上讨论的调整情况是由 以上讨论的调整情况是由ALUALU硬件中的十进制硬件中的十进制调整电路自动进行的,用户不必考虑何时应加调整电路自动进行的,用户不必考虑何时应加6H6H,使用,使用时只需在时只需在ADDADD和和ADDCADDC后面紧跟一条后面紧跟一条DA ADA A指令即可指令即可3.380C513.380C51指令系统指令系统 例例3.253.25 利用十进制加法调整指令作十进制减法运 利用十进制加法调整指令作十进制减法运算算( (应采用补码相加的方法,用应采用补码相加的方法,用9AH9AH减去减数即得以减去减数即得以1010为为模的减数补码模的减数补码) ) 设被减数存放在 设被减数存放在30H30H单元,减数存放在单元,减数存放在40H40H单元,结单元,结果存放在果存放在50H50H单元,编程如下:单元,编程如下: CLR C CLR C ;清进位位 ;清进位位 MOV AMOV A,#,#9AH9AH ;求减数补码 ;求减数补码 SUBB ASUBB A,,40H 40H ADD AADD A,,30H30H ;与补码相加 ;与补码相加 DA ADA A ;十进制调整 ;十进制调整 MOV 50HMOV 50H,,A A ;结果存放在 ;结果存放在50H50H单元单元3.380C513.380C51指令系统指令系统 例如例如 26-11=15 26-11=15 第三章第三章 80C5180C51单片机指令系统单片机指令系统------ 3.380C513.380C51指令系统指令系统三、逻辑操作指令三、逻辑操作指令(24(24条条) ) 包括与、或、异或、求反、左右移位、清包括与、或、异或、求反、左右移位、清““0”0”等。
等这类指令的执行一般不影响这类指令的执行一般不影响PSWPSW3.380C513.380C51指令系统指令系统(1)(1)逻辑与运算指令逻辑与运算指令 ANL AANL A,,#data#data ; ;A←(A)∧dataA←(A)∧data ANL AANL A,,RnRn ; ;A←(A)∧(RnA←(A)∧(Rn) ) ANL AANL A,,directdirect ; ;A←(A)∧(directA←(A)∧(direct) ) ANL AANL A,,@ @RiRi ;;A←(A)∧((RiA←(A)∧((Ri)))) ANL directANL direct,,#data #data ; ;direct←(direct)∧datadirect←(direct)∧data ANL directANL direct,,A A ;;direct←(direct)∧(Adirect←(direct)∧(A) ) 指令功能:指令功能:两操作数所确定的内容按位相与后,结两操作数所确定的内容按位相与后,结果送给目的操作数地址中。
对于最后两条指令,当直接果送给目的操作数地址中对于最后两条指令,当直接地址为地址为I/OI/O口时,则进行口时,则进行““读读- -改改- -写写””操作,即数据来自操作,即数据来自端口锁存器,结果也写回端口锁存器端口锁存器,结果也写回端口锁存器用来屏蔽某些位用来屏蔽某些位3.380C513.380C51指令系统指令系统例例3.263.26 (A)=07H(A)=07H,,(R0)=0FDH(R0)=0FDH,, 执行指令 执行指令 ANL AANL A,,R0R0 结果为: 结果为:(A)=05H(A)=05H3.380C513.380C51指令系统指令系统(2)(2)逻辑或运算指令逻辑或运算指令 ORL AORL A,,#data #data ; ;A←(A)∨dataA←(A)∨data ORL AORL A,,RnRn ; ;A←(A)∨(RnA←(A)∨(Rn) ) ORL AORL A,,direct direct ; ;A←(A)∨(directA←(A)∨(direct) ) ORL AORL A,,@ @RiRi ;;A←(A)∨((RiA←(A)∨((Ri)) )) ORL directORL direct,,#data#data ;;direct←(direct)∨datadirect←(direct)∨data ORL directORL direct,,A A ; ;direct←(direct)∨(Adirect←(direct)∨(A) ) 指令功能:指令功能:两操作数所确定的内容按位相或后,结两操作数所确定的内容按位相或后,结果送给目的操作数地址中。
同与逻辑一样,对于最后两果送给目的操作数地址中同与逻辑一样,对于最后两条指令,当直接地址为条指令,当直接地址为I/OI/O口时,也进行口时,也进行““读读- -改改- -写写””操操作可置位任何可置位任何RAMRAM单元或寄存器的某些位单元或寄存器的某些位3.380C513.380C51指令系统指令系统 与、或逻辑运算结合使用,可以实现对某单元内容 与、或逻辑运算结合使用,可以实现对某单元内容的某些位进行交换,而其余位保持不变的某些位进行交换,而其余位保持不变例例3.273.27 将 将A A的高的高5 5位送到位送到P1P1口的高口的高5 5位,而位,而P1P1口的低口的低3 3位位保持不变编程如下:保持不变编程如下: MOV R2MOV R2,,A A ;暂存 ;暂存A A的内容的内容 ANL AANL A,,#0F8H #0F8H ;取;取A A的高的高5 5位位 ANL P1ANL P1,,#07H #07H ;取 ;取P1P1的低的低3 3位位 ORL P1ORL P1,,A A ;组合 ;组合P1P1口的内容口的内容 MOV AMOV A,,R2 R2 ;恢复 ;恢复A A的内容的内容3.380C513.380C51指令系统指令系统(3)(3)逻辑异或运算指令逻辑异或运算指令 XRL AXRL A,,#data #data ; ;A←(A)A←(A)⊕ ⊕datadata XRL AXRL A,,RnRn ; ;A←(A)A←(A)⊕ ⊕(Rn(Rn) ) XRL AXRL A,,direct direct ; ;A←(A)A←(A)⊕ ⊕(direct(direct) ) XRL AXRL A,,@ @RiRi ;;A←(A)A←(A)⊕ ⊕((Ri((Ri)) )) XRL directXRL direct,,#data #data ; ;direct←(directdirect←(direct) )⊕ ⊕ data data XRL directXRL direct,,A A ; ;direct←(direct)direct←(direct)⊕ ⊕(A(A) ) 同样,最后两条指令,也具有 同样,最后两条指令,也具有““读读- -改改- -写写””功能。
功能3.380C513.380C51指令系统指令系统 异或操作也是按位进行的,当两操作数相同时结果异或操作也是按位进行的,当两操作数相同时结果为为0 0,不同时结果为,不同时结果为1 1任一操作数与它自身相等的数异任一操作数与它自身相等的数异或,结果为或,结果为0 0;任一操作数与;任一操作数与00H00H异或,结果为操作数本异或,结果为操作数本身;任一操作数与身;任一操作数与0FFH0FFH异或,结果为操作数的非应用异或,结果为操作数的非应用于对目的操作数的某些位取反于对目的操作数的某些位取反 例例3.283.28 (A)=90H (A)=90H,,(R3)=73H(R3)=73H,, 执行指令 执行指令 XRL AXRL A,,R3R3 结果为: 结果为:(A)=0E3H(A)=0E3H3.380C513.380C51指令系统指令系统(4)A(4)A清清““0”0”与取反指令与取反指令 清 清““0”0”指令:指令: CLR A CLR A ; ;A←0A←0 取反指令: 取反指令: CPL A CPL A ; ;A←( ) A←( ) 清 清““0”0”与取反指令只对与取反指令只对A A操作,它们都是单字节指操作,它们都是单字节指令,若用上述异或指令也可以对某操作数清令,若用上述异或指令也可以对某操作数清““0”0”或取反,或取反,但至少要二字节指令。
但至少要二字节指令 5151系列没有求补指令,若需进行求补计算,可用系列没有求补指令,若需进行求补计算,可用““取反加取反加1”1”实现3.380C513.380C51指令系统指令系统(5)(5)移位指令移位指令 RL A RL A ;左小循环;左小循环 RR A RR A ;右小循环;右小循环 RLC A RLC A ;左大循环;左大循环 RRC A RRC A ;右大循环;右大循环 移位指令也只对 移位指令也只对A A进行操作前两条指令分别将进行操作前两条指令分别将A A中中内容循环左移或右移一位,后两条指令分别将内容循环左移或右移一位,后两条指令分别将A A中内容连中内容连同进位位同进位位CYCY一起循环左移或右移一位一起循环左移或右移一位3.380C513.380C51指令系统指令系统 (5)(5)移位指令移位指令 3.380C513.380C51指令系统指令系统用用9 9位循环指令实现多字节移位位循环指令实现多字节移位 例:例:编程将寄存器编程将寄存器 R6R5 R6R5 中的双字节数中的双字节数X X左移一位。
左移一位 CLR CCLR C ; ;Cy=0Cy=0,, 设设 R6= 55H R6= 55H ,,R5= AAHR5= AAH MOV AMOV A,,R5R5 ; ;R6=01010101R6=01010101,,R5=10101010R5=10101010,,Cy=0Cy=0 RLC ARLC A ; ; MOV R5MOV R5,,A A ; ;R6=01010101R6=01010101,,R5=01010100R5=01010100,,Cy=1Cy=1 MOV AMOV A,,R6R6 ; ; RLC ARLC A ; ; MOV R6MOV R6,,A A ; ;R6=10101011R6=10101011,,R5=01010100R5=01010100,,Cy=0Cy=0 思考题:思考题:如何将寄存器如何将寄存器R6R5R6R5中的双字节数中的双字节数X X右移一位右移一位3.380C513.380C51指令系统指令系统四、控制转移指令四、控制转移指令(17(17条条) ) 转移指令通过改写 转移指令通过改写PCPC的当前值,从而改变的当前值,从而改变CPUCPU执行程执行程序的顺序,使程序发生跳转。
序的顺序,使程序发生跳转 功能:功能:用于控制程序的走向,作用区间是用于控制程序的走向,作用区间是ROMROM空间 包括 包括无条件转移指令、条件转移指令以及子程序调无条件转移指令、条件转移指令以及子程序调用和返回指令用和返回指令 按转移条件分类: 按转移条件分类: 1)1)无条件转移:无条件转移:执行无条件转移指令,程序无条件执行无条件转移指令,程序无条件转移到指定处转移到指定处 2)2)条件转移:条件转移:指令中给出转移条件,执行指令时,指令中给出转移条件,执行指令时,先测试条件,若满足条件,则程序发生转移,否则,仍先测试条件,若满足条件,则程序发生转移,否则,仍顺序执行程序顺序执行程序3.380C513.380C51指令系统指令系统按转移方式分类:按转移方式分类: 1)1)绝对转移:绝对转移:指令给出转移目的的绝对地址指令给出转移目的的绝对地址nnnn,执行指令后,,执行指令后,PC←nnPC←nn 例:地址 例:地址 源程序 源程序 1000H 1000H LJMP 2000H LJMP 2000H 1003H1003H … … … … 2000H 2000H … … ;转移目的指令 ;转移目的指令 2)2)相对转移:相对转移:指令给出转移目的与转移指令的相对偏移量指令给出转移目的与转移指令的相对偏移量e e,执,执行指令后,行指令后,PC←PC+ePC←PC+e 。
例:地址 例:地址 源程序 源程序 1000H 1000H SJMP 02 SJMP 02 … … 1004H 1004H … … ;转移目的指令 ;转移目的指令3.380C513.380C51指令系统指令系统1 1、无条件转移指令、无条件转移指令( (必转指令必转指令) ) 功能:功能:当程序执行完该指令时,程序无条件转移到当程序执行完该指令时,程序无条件转移到指令所提供的地址上去指令所提供的地址上去 LJMP addr16 LJMP addr16 ; ;PC←addr16PC←addr16 长转移指令长转移指令,指令提供,指令提供1616位目的地址故程序可在位目的地址故程序可在64K64K字节空间内无条件地转移到任何地方字节空间内无条件地转移到任何地方 例例3.293.29 LJMP 8100HLJMP 8100H 指令执行后,使程序转移到 指令执行后,使程序转移到8100H8100H3.380C513.380C51指令系统指令系统 AJMP addr11 AJMP addr11 ; ;PC←(PC)+2,PC10PC←(PC)+2,PC10~~0←addr11, 0←addr11, PC15PC15~~1111不变不变 绝对转移指令绝对转移指令,它提供,它提供1111位目的地址,可在位目的地址,可在2K2K范围范围内无条件地转移到由内无条件地转移到由a10a10~~a0a0所指出的地址单元中去。
所指出的地址单元中去 AJMPAJMP指令将指令将64K64K字节字节ROMROM划分为划分为3232个区,由个区,由PCPC高五位高五位PC15PC15~~1111确定,每个区为确定,每个区为2K2K,而每个区又分为,而每个区又分为8 8页,由指页,由指令的令的a10a9a8a10a9a8确定,每页有确定,每页有256256个单元,所以,每个区相个单元,所以,每个区相应有应有8 8种操作码种操作码本指令不影响标志位本指令不影响标志位3.380C513.380C51指令系统指令系统3.380C513.380C51指令系统指令系统例例3.303.30 KVRKVR::AJMP addr11AJMP addr11 设 设addr11=00100000000Baddr11=00100000000B,标号,标号KVRKVR的地址为的地址为1030H1030H,,则执行该指令后,程序转移到则执行该指令后,程序转移到1100H1100H SJMP SJMP relrel ;;PC←(PC)+2+relPC←(PC)+2+rel 相对短转移指令相对短转移指令。
指令控制程序无条件转向指定地指令控制程序无条件转向指定地址指令中,址指令中,relrel是一个带符号的相对偏移量,范围为是一个带符号的相对偏移量,范围为-128-128~+~+127127,负数表示向后转移,正数表示向前转移负数表示向后转移,正数表示向前转移 指令优点:指令优点:指令给出相对转移地址,不具体指出地指令给出相对转移地址,不具体指出地址值,这样程序地址发生变化时,只要相对地址不发生址值,这样程序地址发生变化时,只要相对地址不发生变化,该指令就不需做任何改动变化,该指令就不需做任何改动3.3 80C513.3 80C51指令系统指令系统 在用汇编语言编写程序时,在用汇编语言编写程序时,relrel是一个地址符号,由是一个地址符号,由汇编程序在汇编过程中自动计算偏移地址在手工汇编汇编程序在汇编过程中自动计算偏移地址在手工汇编时,可用下式计算偏移地址:时,可用下式计算偏移地址: 向后转移时向后转移时::relrel=0FEH-(=0FEH-(源、目的地址差的绝对值源、目的地址差的绝对值) ) 向前转移时向前转移时::relrel=(=(源、目的地址差的绝对值源、目的地址差的绝对值)-2)-2 例例3.313.31 KRDKRD::SJMP PKRDSJMP PKRD 如果 如果KRDKRD标号值为标号值为0100H0100H,标号,标号PKRDPKRD值为值为0123H0123H,则转,则转移的目的地址为移的目的地址为0123H0123H,偏移量为:,偏移量为:relrel=0123H=0123H--0100H0100H--2=21H2=21H。
3.3 80C513.3 80C51指令系统指令系统 JMPJMP @A+DPTR @A+DPTR ; ;PC←(A)+(DPTRPC←(A)+(DPTR) ) 变址寻址的转移指令变址寻址的转移指令( (散转指令散转指令) )转移的目的地址转移的目的地址由基址寄存器由基址寄存器DPTRDPTR中的中的1616位数和位数和A A中的中的8 8位无符号偏移量位无符号偏移量之和确定之和确定 当 当DPTRDPTR中内容确定后,改变中内容确定后,改变A A的值,可以实现多分支的值,可以实现多分支的程序转移的程序转移 该指令 该指令执行后不改变执行后不改变A A和数据指针和数据指针DPTRDPTR中内容,不影中内容,不影响任何标志位响任何标志位3.3 80C513.3 80C51指令系统指令系统 例例3.323.32 利用散转指令,要求当利用散转指令,要求当(A)=0(A)=0时,转处理程序时,转处理程序G0G0,,(A)=1(A)=1时转处理程序时转处理程序G1G1,,(A)=n(A)=n时转处理程序时转处理程序Gn(nGn(n=0,1,2,3…)=0,1,2,3…)。
编程: 编程: MOV DPTRMOV DPTR,#,#TABLE TABLE ;表首址送 ;表首址送DPTRDPTR JMP @AJMP @A++DPTR DPTR ;以;以A A中内容为偏移量跳转中内容为偏移量跳转TABLETABLE:: AJMP G0 AJMP G0 ; ;(A)=0(A)=0,转,转G0G0处执行处执行 AJMP G1 AJMP G1 ; ;(A)=1(A)=1,转,转G1G1处执行处执行 ┆┆ AJMP AJMP GnGn ; ;(A)=n(A)=n,转,转GnGn处执行处执行 3.3 80C513.3 80C51指令系统指令系统2 2、条件转移指令、条件转移指令 它是依据某种特定条件转移的指令条件满足时转移, 它是依据某种特定条件转移的指令条件满足时转移,否则顺序执行其中的条件一般为前条指令执行后产生的否则顺序执行其中的条件一般为前条指令执行后产生的结果,如运算结果为结果,如运算结果为0 0否?是否产生了进否?是否产生了进( (借借) )位等。
位等 ⑴⑴结果为结果为0 0条件转移指令条件转移指令 JZ JZ relrel ;若 ;若(A)=0(A)=0,则,则PC←(PC)PC←(PC)++2 2++relrel,否则,否则PC←(PC)PC←(PC)++2 2 JNZ JNZ relrel ;若 ;若(A)≠0(A)≠0,则,则PC←(PC)PC←(PC)++2 2++relrel,否,否则则PC←(PC)PC←(PC)++2 2 这两条指令都是双字节条件相对转移指令前者转移 这两条指令都是双字节条件相对转移指令前者转移的条件是的条件是A=0A=0,后者转移的条件是,后者转移的条件是A≠0A≠0,,A A中内容为之前最中内容为之前最后一次运算产生的结果后一次运算产生的结果3.3 80C513.3 80C51指令系统指令系统 例例3.333.33 将外部将外部RAMRAM的一组数据传送到内部的一组数据传送到内部RAMRAM,二者,二者首地址分别为首地址分别为EXDATAEXDATA和和INDATAINDATA,遇到数据为,遇到数据为0 0时停止传送时停止传送编程:编程: MOV R0MOV R0,,#EXDATA #EXDATA MOV R1MOV R1,,#INDATA #INDATA LOOPLOOP::MOVX AMOVX A,,@R0@R0 HEREHERE::JZ HERE JZ HERE ;为 ;为0 0停止停止 MOV @R1MOV @R1,,A A ;不为;不为0 0向内部传送向内部传送 INC R0INC R0 INC R1INC R1 SJMP LOOP SJMP LOOP ;继续 ;继续3.3 80C513.3 80C51指令系统指令系统⑵⑵比较条件转移指令。
比较条件转移指令 格式:格式:CJNE (CJNE (目的字节目的字节) ),,( (源字节源字节) ),,relrel ;三字;三字节指令节指令 CJNE ACJNE A,,#data#data,,relrel ;若 ;若(A)=data(A)=data,则,则PC←(PC)PC←(PC)++3 3,,C←0C←0 若 若(A)(A)>>datadata,则,则PC←(PC)PC←(PC)++3 3++relrel,,C←0C←0 若 若(A)(A)<<datadata,则,则PC←(PC)PC←(PC)++3 3++relrel,,C←1C←1 CJNE ACJNE A,,directdirect,,relrel ;若 ;若(A)=(direct)(A)=(direct),则,则PC←(PC)PC←(PC)++3 3,,C←0C←0 若 若(A)(A)>>(direct)(direct),则,则PC←(PC)PC←(PC)++3 3++relrel,,C←0C←0 若 若(A)(A)<<(direct)(direct),则,则PC←(PC)PC←(PC)++3 3++relrel,,C←1C←1第三章第三章 80C5180C51单片机指令系统单片机指令系统------ 3.3 80C513.3 80C51指令系统指令系统 CJNE CJNE RnRn,,#data#data,,relrel ;若 ;若( (RnRn)=data)=data,则,则PC←(PC)PC←(PC)++3 3,,C←0C←0 若 若( (RnRn) )>>datadata,则,则PC←(PC)PC←(PC)++3 3++relrel,,C←0C←0 若 若( (RnRn) )<<datadata,则,则PC←(PC)PC←(PC)++3 3++relrel,,C←1C←1 CJNE @CJNE @RiRi,,#data#data,,relrel ;若 ;若((((RiRi))=data))=data,则,则PC←(PC)PC←(PC)++3 3,,C←0C←0 若若((((RiRi))))>>datadata,则,则PC←(PC)PC←(PC)++3 3++relrel,,C←0C←0 若 若((((RiRi))))<<datadata,则,则PC←(PC)PC←(PC)++3 3++relrel,,C←1 C←1 3.3 80C513.3 80C51指令系统指令系统 以上均为三字节指令,这类指令是先对两个规定的以上均为三字节指令,这类指令是先对两个规定的操作数进行比较,根据比较的结果决定转移到指定的转操作数进行比较,根据比较的结果决定转移到指定的转移地址,还是顺序执行。
若两个操作数不相等则转移,移地址,还是顺序执行若两个操作数不相等则转移,相等则顺序执行比较的过程是执行一次减法操作,但相等则顺序执行比较的过程是执行一次减法操作,但不保留差值不保留差值 设两无符号操作数为 设两无符号操作数为A A和和B B,, 若 若A≠BA≠B,则,则PC←(PC)PC←(PC)++3 3++relrel,且,且C=1(AC=1(A<<B)B)或或C=0C=0(A(A>>B)B),, 若 若A=BA=B,则,则PC←(PC)PC←(PC)++3 33.3 80C513.3 80C51指令系统指令系统⑶⑶减减1 1条件转移指令条件转移指令 DJNZ DJNZ RnRn,,relrel ; ;Rn←(RnRn←(Rn) )--1 1,若,若(Rn)≠0(Rn)≠0,则,则PC←(PC)PC←(PC)++2 2++relrel,否则,否则PC←(PC)PC←(PC)++2 2 DJNZ directDJNZ direct,,relrel ;;direct←(directdirect←(direct) )--1 1,若,若(direct)≠0(direct)≠0,则,则PC←(PC)PC←(PC)++3 3++relrel,否则,否则PC←(PC)PC←(PC)++3 3 这组指令先将操作数减 这组指令先将操作数减1 1,结果回送操作数,如果结,结果回送操作数,如果结果不为果不为0 0则转移,否则顺序执行。
第一条指令为则转移,否则顺序执行第一条指令为2 2字节指字节指令,第二条为令,第二条为3 3字节指令字节指令 常用于循环程序中,故亦称 常用于循环程序中,故亦称循环控制指令循环控制指令3.3 80C513.3 80C51指令系统指令系统 例例3.343.34 将内部将内部RAMRAM从从30H30H单元开始的单元开始的1010个无符号数相个无符号数相加,结果存放在加,结果存放在3AH3AH单元,设和不超过单元,设和不超过8 8位二进制数位二进制数 编程: 编程: MOV R0MOV R0,,#0AH #0AH ;向 ;向R0R0置计数初值置计数初值 MOV R1MOV R1,,#30H #30H ; ;R1R1指向首地址指向首地址 CLR A CLR A LOOPLOOP::ADD AADD A,,@R1 @R1 ;加一个数;加一个数 INC R1INC R1 DJNZ R0DJNZ R0,,LOOP LOOP ;循环 ;循环1010次未完继续次未完继续 MOV 3AHMOV 3AH,,A A ;存和;存和 SJMP $ SJMP $ ;停止;停止第三章第三章 80C5180C51单片机指令系统单片机指令系统------ 3.3 80C513.3 80C51指令系统指令系统3 3、子程序调用及返回指令、子程序调用及返回指令 在程序设计中,常常把具有一定功能的公用程序段 在程序设计中,常常把具有一定功能的公用程序段编写成子程序。
编写成子程序 从主程序转向子程序的指令称为 从主程序转向子程序的指令称为子程序调用指令子程序调用指令,,从子程序返回主程序的指令称为从子程序返回主程序的指令称为返回指令返回指令 为保证正确返回,每次调用子程序时自动将下条指 为保证正确返回,每次调用子程序时自动将下条指令地址保存到堆栈,返回时按先进后出原则再把地址弹令地址保存到堆栈,返回时按先进后出原则再把地址弹出到出到PCPC中3.3 80C513.3 80C51指令系统指令系统(1)(1)子程序调用指令子程序调用指令 ACALL addr11ACALL addr11 ; ;PC←(PC)PC←(PC)++2 2 SP←(SP) SP←(SP)++1 1,,(SP)←PC7(SP)←PC7~~0 0 SP←(SP)SP←(SP)++1 1,,(SP)←PC15(SP)←PC15~~8 8 PC10PC10~~0←addr110←addr11,,PC15PC15~~1111保留保留 LCALL addr16LCALL addr16 ; ;PC←(PC)PC←(PC)++3 3 SP←(SP)SP←(SP)++1 1,,(SP)←PC7(SP)←PC7~~0 0 SP←(SP)SP←(SP)++1 1,,(SP)←PC15(SP)←PC15~~8 8 PC←addr16PC←addr163.3 80C513.3 80C51指令系统指令系统子程序调用指令具有两个功能:子程序调用指令具有两个功能: 1)1)将断点地址将断点地址( (断点地址断点地址=(PC)+=(PC)+调用指令本身字节数调用指令本身字节数) )推入堆栈进行保护,以确保正确返回;推入堆栈进行保护,以确保正确返回; 2)2)将子程序的入口地址送给将子程序的入口地址送给PCPC,转去执行子程序。
转去执行子程序 ACALLACALL指令为指令为2 2字节指令,称字节指令,称绝对调用指令绝对调用指令( (短调用指短调用指令令) )子程序的起始地址必须与该指令后第一条指令的第子程序的起始地址必须与该指令后第一条指令的第一个字节在同一个一个字节在同一个2K2K区域的存储器区内,即区域的存储器区内,即2K2K范围的页范围的页内调用ACALLACALL指令的机器码:第一字节的高指令的机器码:第一字节的高3 3位为位为A10A10~~A8A8,低,低5 5位为位为1000110001;第二字节为;第二字节为A7A7~~A0A0 LCALLLCALL为为3 3字节指令,称字节指令,称长调用指令长调用指令子程序的入口子程序的入口地址可在地址可在64K64K范围内的任何地方范围内的任何地方3.3 80C513.3 80C51指令系统指令系统 例例3.353.35 设设(SP)=60H(SP)=60H,标号地址,标号地址HEREHERE为为0123H0123H,子程,子程序序SUBSUB的入口地址为的入口地址为0345H0345H,执行指令:,执行指令: HEREHERE::ACALL SUBACALL SUB 结果为: 结果为:(SP)=62H(SP)=62H,,(61H)=25H(61H)=25H,,(62H)=01H(62H)=01H,,(PC)=0345H(PC)=0345H。
例例3.363.36 设设(SP)=07H(SP)=07H,子程序首地址为,子程序首地址为3000H3000H,指令,指令LCALLLCALL第一字节地址为第一字节地址为2000H2000H,执行指令:,执行指令: LCALL 3000HLCALL 3000H 结果为: 结果为:(SP)=09H(SP)=09H,,(08H)=03H(08H)=03H,,(09H)=20H(09H)=20H,,(PC)=3000H(PC)=3000H3.3 80C513.3 80C51指令系统指令系统(2)(2)返回指令返回指令 子程序返回:子程序返回: RETRET ; ;PC15PC15~~8←((SP))8←((SP)),,SP←(SP)-1SP←(SP)-1 PC7PC7~~0←((SP))0←((SP)),,SP←(SP)-1SP←(SP)-1 中断返回:中断返回: RETIRETI ;;PC15PC15~~8←((SP))8←((SP)),,SP←(SP)-1SP←(SP)-1 PC7PC7~~0←((SP))0←((SP)),,SP←(SP)-1SP←(SP)-1 上述指令的功能都是从堆栈中取出 上述指令的功能都是从堆栈中取出1616位断点送位断点送PCPC,,使程序返回到主程序。
使程序返回到主程序RETRET指令总是安排在子程序的出口指令总是安排在子程序的出口处,而处,而RETIRETI指令安排在中断处理程序的出口处,指令安排在中断处理程序的出口处,RETIRETI指指令还有其他的操作,在中断系统中再进行讨论令还有其他的操作,在中断系统中再进行讨论第三章第三章 80C5180C51单片机指令系统单片机指令系统------ 3.3 80C513.3 80C51指令系统指令系统 4 4、空操作指令、空操作指令 NOP NOP ; ;PC←(PC)PC←(PC)++1 1 指令执行时,没有作任何实质性操作,只消耗一指令执行时,没有作任何实质性操作,只消耗一条指令时间它条指令时间它多用于延时程序多用于延时程序3.3 80C513.3 80C51指令系统指令系统五、位操作指令五、位操作指令(17(17条条) ) 位操作指令是以位为操作对象进行运算和操作的指 位操作指令是以位为操作对象进行运算和操作的指令,可以实现位的传送、运算、转移、控制等令,可以实现位的传送、运算、转移、控制等 适用于位操作的地址空间是内部 适用于位操作的地址空间是内部RAMRAM中中20H20H~~2FH2FH字节字节地址地址( (位地址位地址00H00H~~7FH)7FH)以及以及SFRSFR区中可以位寻址的位。
区中可以位寻址的位 5151系列片内系列片内RAMRAM的上述可寻址位构成了一个完整的布的上述可寻址位构成了一个完整的布尔处理机尔处理机( (位处理机位处理机) ) PSWPSW中的中的CyCy为位累加器,为位累加器,P0P0~~P3P3口的各位为位口的各位为位I/OI/O口,口,00H00H~~7FH7FH为位为位RAM(RAM(位地址位地址) )3.3 80C513.3 80C51指令系统指令系统五、位操作指令五、位操作指令(17(17条条) ) 在汇编语言中,位地址的表达方式有以下 在汇编语言中,位地址的表达方式有以下4 4种:种: (1)(1)直接位地址:如直接位地址:如91H91H;; (2)(2)字节符号地址点操作:如字节符号地址点操作:如P1.0(90H)P1.0(90H);; (3)(3)位符号地址:如位符号地址:如RS0RS0;; (4)(4)用户使用伪指令事先定义过的符号地址用户使用伪指令事先定义过的符号地址 如如 X bit 00HX bit 00H;将符号地址;将符号地址00H00H定义为位符号地址定义为位符号地址X X。
3.3 80C513.3 80C51指令系统指令系统 1 1、位传送指令、位传送指令 MOV CMOV C,,bitbit ; ;C←(bitC←(bit) ) MOV bitMOV bit,,C C ; ;bit←(Cbit←(C) ) 位传送指令只允许位地址与 位传送指令只允许位地址与CyCy间进行传送若要实间进行传送若要实现两个位地址之间的传送,需经现两个位地址之间的传送,需经CyCy中转 例例3.373.37 将位地址将位地址20H20H的内容传送到位地址的内容传送到位地址10H10H中去 编程: 编程:MOV 00HMOV 00H,,C C ;保存原来;保存原来CYCY的值的值 MOV CMOV C,,20H 20H ; ;CY←(20H)CY←(20H) MOV 10HMOV 10H,,C C ;完成传送 ;完成传送 MOV CMOV C,,00H 00H ;恢复 ;恢复CYCY的值的值3.3 80C513.3 80C51指令系统指令系统 2 2、位运算指令、位运算指令 清零清零( (复位复位) )::CLR C CLR C ; ;CY←0CY←0 CLR bitCLR bit ;;(bit)←0(bit)←0,位地址清,位地址清0 0置位:置位: SETB C SETB C ;;CY←1CY←1 SETB bitSETB bit ; ;(bit)←1(bit)←1与运算:与运算: ANL CANL C,,bitbit ; ;CY←(CY)∧(bitCY←(CY)∧(bit) ) ANL CANL C,,/bit /bit ; ;CY←(CY)∧(/bit)CY←(CY)∧(/bit)或运算:或运算: ORL CORL C,,bit bit ;;CY←(CY)∨(bitCY←(CY)∨(bit) ) ORL CORL C,,/bit /bit ; ;CY←(CY)∨(/bit)CY←(CY)∨(/bit)取反:取反: CPL CCPL C ;;CY←(/C)CY←(/C) CPL bit CPL bit ; ;bit←(/bit)bit←(/bit) 符号 符号““/bit”/bit”表示位地址表示位地址bitbit中内容的取反,运算后中内容的取反,运算后bitbit中内容中内容并不取反。
并不取反3.3 80C513.3 80C51指令系统指令系统 例例3.38 3.38 CLR RS1 CLR RS1 ; ;RS1←0RS1←0 CLR 27H CLR 27H ; ;(24H).7←0(24H).7←0 SETB P1.7 SETB P1.7 ; ;P1.7←1P1.7←1 CPL P2.5 CPL P2.5 ;;P2.5←(/P2.5)P2.5←(/P2.5),进行,进行““读读- -改改- -写写””操作操作 利用位操作指令可以方便地用软件模拟组合模拟电 利用位操作指令可以方便地用软件模拟组合模拟电路,实现以软代硬路,实现以软代硬3.3 80C513.3 80C51指令系统指令系统 例例3.393.39 用程序模拟图用程序模拟图3-103-10中组合逻辑电路,其中中组合逻辑电路,其中X X、、Y Y、、Z Z、、Q Q、、R R、、S S为输入,为输入,F F为输出3.3 80C513.3 80C51指令系统指令系统 编程: 编程: Q BIT 00H Q BIT 00H ;用 ;用BITBIT伪指令定义位伪指令定义位 R BIT 01HR BIT 01H S BIT 02HS BIT 02H X BIT 03HX BIT 03H Y BIT 04HY BIT 04H Z BIT 05HZ BIT 05H F BIT 06HF BIT 06H LOGIC LOGIC::MOV CMOV C,,R R ORL CORL C,,S S ;或门输出;或门输出 ANL CANL C,,Q Q ;与门输出 ;与门输出 MOV F0MOV F0,,C C ;中间结果保存在;中间结果保存在PSWPSW中的中的F0F0位里位里 MOV CMOV C,,X X ANL CANL C,,/Y /Y ;与门输出;与门输出 ORL CORL C,,F0 F0 ;或操作;或操作 ORL CORL C,,/Z/Z MOV FMOV F,,C C ;函数输出 ;函数输出3.3 80C513.3 80C51指令系统指令系统 3 3、位控制转移指令、位控制转移指令 3.3 80C513.3 80C51指令系统指令系统 例例3.403.40 执行下列程序执行下列程序 ANL P1ANL P1,,#00H #00H ;( ;(P1P1))=00H=00H JBJB P1.6P1.6,,LOOPLOOP ;(;(P1.6P1.6))=0=0,顺序执行,顺序执行 JNB P1.0JNB P1.0,,LOOP2LOOP2 ;( ;(P1.0P1.0))=0=0,转,转LOOP2LOOP2处处 结果:转结果:转LOOP2LOOP2处执行。
处执行 例例3.413.41 执行下列程序执行下列程序 MOV AMOV A,,#0AAH#0AAH ;(;(A A))←←0AAH0AAH JBC ACC.0JBC ACC.0,,TL1 TL1 ;( ;(ACC.0ACC.0))=0=0,顺序执行,顺序执行 JBC ACC.1JBC ACC.1,,TL2TL2 ;(;(ACC.1ACC.1))=1=1,转,转TL2TL2处,处,且且(ACC.1)←0(ACC.1)←0 结果结果:(:(A)=0A8HA)=0A8H,且转,且转TL2TL2处执行第三章第三章 80C5180C51单片机指令系统单片机指令系统------ 3.3 80C513.3 80C51指令系统指令系统六、指令系统速解表六、指令系统速解表 5151系列单片机指令系统中有系列单片机指令系统中有111111条通用汇编指令,对应有条通用汇编指令,对应有255255条条机器指令代码机器指令代码( (见指令系统速查表见指令系统速查表3-73-7~表~表3-9)3-9)现将通用汇编指令、。
现将通用汇编指令、操作说明、代码字节分类制成速解表操作说明、代码字节分类制成速解表( (表表3-23-2~表~表3-6)3-6),以备查询以备查询 指令表中为通用符号,说明如下: 指令表中为通用符号,说明如下: A-- A-- 累加器累加器A A;; B-- BB-- B寄存器,只用于乘除指令中;寄存器,只用于乘除指令中; RnRn 当前工作寄存器,当前工作寄存器,n=0n=0~~7 7;; @ @RiRi-- -- 工作寄存器工作寄存器R0R0、、R1R1的间接地址单元,的间接地址单元,i=0i=0,,1 1寻址范围寻址范围00H00H~~FFHFFH,其中,其中00H00H~~7FH7FH为片内为片内RAMRAM,,80H80H~~FFHFFH为片内为片内RAMRAM或片外或片外RAMRAM;; direct-- direct-- 直接地址单元,直接地址单元,00H00H~~7FH7FH为片内为片内RAMRAM,,80H80H~~FFHFFH为为SFRSFR;;3.3 80C513.3 80C51指令系统指令系统#data-- 8#data-- 8位常数;位常数;#data16--16#data16--16位常数位常数addr16--16addr16--16位直接地址,长转移位直接地址,长转移(LJMP)(LJMP)及长调用及长调用(LCALL)(LCALL)指令中为程序转移地址,指令中为程序转移地址,64K64K范围内转移,指令中也可用范围内转移,指令中也可用标号代替;标号代替;addr11--11addr11--11位直接地址,短转移位直接地址,短转移(AJMP)(AJMP)及短调用及短调用(ACALL)(ACALL)指令中为程序转移地址,指令中为程序转移地址,2K2K范围内转移,指令中也可用范围内转移,指令中也可用标号代替;标号代替;relrel----相对转移地址,地址偏移量为相对转移地址,地址偏移量为-128-128~~+127+127,指令中,指令中也可用标号代替;也可用标号代替;C--C--进位位,布尔指令集中作位累加器;进位位,布尔指令集中作位累加器;bit--bit--可位寻址位,片内可位寻址位,片内RAM20HRAM20H~~2FH2FH中的中的128128位和位和SFRSFR中中的可位寻址位的可位寻址位。
3.4 3.4 本章小节本章小节3.4 3.4 本章小节本章小节 本章重点介绍本章重点介绍5151系列寻址方式和指令系统是软件系列寻址方式和指令系统是软件编程的基础,必须很好的掌握各条指令的功能和使用编程的基础,必须很好的掌握各条指令的功能和使用 主要内容及重点掌握: 主要内容及重点掌握: 1 1、、5151系列单片机共有系列单片机共有7 7种寻址方式:立即寻址、直种寻址方式:立即寻址、直接寻址、寄存器寻址、寄存器间接寻址、变址寻址、相接寻址、寄存器寻址、寄存器间接寻址、变址寻址、相对寻址、位寻址注意区分立即寻址和直接寻址;位寻对寻址、位寻址注意区分立即寻址和直接寻址;位寻址和直接寻址;变址寻址和相对寻址址和直接寻址;变址寻址和相对寻址 2 2、、5151系列单片机指令系统系列单片机指令系统 3.4 3.4 本章小节本章小节 5151系列单片机指令系统共有系列单片机指令系统共有111111条指令 按功能可划分为按功能可划分为5 5大类:数据传送指令大类:数据传送指令2929条;算术运条;算术运算指令算指令2424条;逻辑操作指令条;逻辑操作指令2424条;位操作指令条;位操作指令1717条;控条;控制转移指令制转移指令1717条。
条 ⑴⑴数据传送指令:包括:数据传送指令:包括:MOVMOV、、MOVXMOVX、、MOVCMOVC、、XCHXCH、、SWAPSWAP、、PUSHPUSH、、POPPOP等 片内数据的传送使用 片内数据的传送使用--MOV--MOV;片外数据的传送使用;片外数据的传送使用-----MOVX-MOVX;程序存储器的访问使用;程序存储器的访问使用--MOVC--MOVC;; ⑵⑵算术运算指令:包括四则运算:对加算术运算指令:包括四则运算:对加ADDADD、、ADDCADDC、、减减SUBBSUBB、乘、乘MULMUL、除、除DIVDIV、加、加1 INC1 INC、减、减1 DEC1 DEC第三章第三章 80C5180C51单片机指令系统单片机指令系统------ 3.4 3.4 本章小节本章小节 注意:区别注意:区别ADDADD、、ADDCADDC的使用;的使用; 十进制调整 十进制调整DADA在BCDBCD码运算时,常跟在码运算时,常跟在ADDADD或或ADDCADDC指令后对计算结果加以调整,避免错误指令后对计算结果加以调整,避免错误 这类指令大多数要影响 这类指令大多数要影响PSWPSW。
⑶⑶逻辑操作指令:包括与逻辑操作指令:包括与ANDAND、或、或OROR、异或、异或XRLXRL、求、求反反CPLCPL、左右移位、左右移位RLRL和和RRRR、清、清““0”CLR0”CLR等这类指令的执等这类指令的执行一般不影响行一般不影响PSWPSW ⑷⑷位操作指令:只能对可位寻址的位单元操作位操作指令:只能对可位寻址的位单元操作 ⑸⑸控制转移指令:包括无条件转移指令、条件转移控制转移指令:包括无条件转移指令、条件转移指令以及子程序调用和返回指令指令以及子程序调用和返回指令 注意: 注意:AJMPAJMP和和LJMPLJMP;;ACALLACALL和和LCALLLCALL的区别3.5 3.5 思考与练习题思考与练习题 3.5 3.5 思考与练习题思考与练习题 1 1.简述下列基本概念.简述下列基本概念:: 指令、指令系统、程序、汇编语言、机器语言、汇编指令、指令系统、程序、汇编语言、机器语言、汇编语言源程序、目标程序、汇编、汇编程序语言源程序、目标程序、汇编、汇编程序 指令:指计算机进行某种操作的运算代码形式的命令指令:指计算机进行某种操作的运算代码形式的命令。
指令系统:一台计算机所能识别的全部指令指令系统:一台计算机所能识别的全部指令 程序:一系列指令、数据、地址按一定顺序排列而成程序:一系列指令、数据、地址按一定顺序排列而成的一组指令的一组指令 汇编语言:用助记符汇编语言:用助记符( (操作码操作码) )、符号地址、符号地址( (操作数操作数) )、、标号等符号表示指令的功能和特征称为汇编语言标号等符号表示指令的功能和特征称为汇编语言 机器语言:以机器语言:以0 0和和1 1组成的二进制编码,这种编码称为组成的二进制编码,这种编码称为机器码,或称为机器语言机器码,或称为机器语言3.5 3.5 思考与练习题思考与练习题 汇编语言源程序:用汇编语言编写的程序汇编语言源程序:用汇编语言编写的程序 目标程序:将某种语言源程序 目标程序:将某种语言源程序““翻译翻译””成机器语言成机器语言后的程序后的程序 汇编:将汇编语言源程序 汇编:将汇编语言源程序““翻译翻译””成机器语言目标成机器语言目标程序的过程程序的过程 2 2..5151系列单片机有哪几种寻址方式?它们是如何寻系列单片机有哪几种寻址方式?它们是如何寻址的,其寻址空间如何?址的,其寻址空间如何? 5151系列单片机共有系列单片机共有7 7种寻址方式:立即寻址、直接寻种寻址方式:立即寻址、直接寻址、寄存器寻址、寄存器间接寻址、变址寻址、相对寻址、寄存器寻址、寄存器间接寻址、变址寻址、相对寻址、位寻址。
址、位寻址3.5 3.5 思考与练习题思考与练习题 ⑴⑴立即寻址立即寻址 指令操作码后的一个字节就是实际操作数本身该指令操作码后的一个字节就是实际操作数本身该操作数直接参与操作,用符号操作数直接参与操作,用符号““#”#”表示,由于立即寻址表示,由于立即寻址的操作数在指令中,指令存放在的操作数在指令中,指令存放在ROMROM中,因此中,因此5151系列单片系列单片机立即寻址方式只适用于机立即寻址方式只适用于ROMROM ⑵⑵直接寻址直接寻址 指令操作码后面的一个字节就是实际操作数地址指令操作码后面的一个字节就是实际操作数地址该地址指出了参与操作的数据所在的字节地址该地址指出了参与操作的数据所在的字节地址 可用于直接寻址的空间有两种:内部可用于直接寻址的空间有两种:内部RAMRAM低低128128字节字节单元和特殊功能寄存器单元和特殊功能寄存器3.5 3.5 思考与练习题思考与练习题 ⑶⑶寄存器寻址寄存器寻址 寄存器寻址时,指令中地址码给出的是某一通用寄存寄存器寻址时,指令中地址码给出的是某一通用寄存器编号,寄存器的内容为操作数。
器编号,寄存器的内容为操作数 可用于寄存器寻址的空间:可用于寄存器寻址的空间:R0R0~~R7R7,,ACCACC,,CyCy(位),(位),DPTRDPTR,,B B ⑷⑷寄存器间接寻址寄存器间接寻址 指令中给出的寄存器的内容为操作数的地址指令中给出的寄存器的内容为操作数的地址 可用来间接寻址的寄存器有:可用来间接寻址的寄存器有:R0R0、、R1R1和和DPTRDPTR 使用时前面加符号使用时前面加符号@ @表示间接寻址可用表示间接寻址可用R0R0或或R1R1间接寻间接寻址片内址片内RAMRAM低低128128字节或片外字节或片外RAMRAM的的256256个字节范围,指令用个字节范围,指令用操作码的最低位指明操作码的最低位指明R0R0或或R1R1;也可用;也可用DPTRDPTR间接寻址间接寻址64K64K字节字节外部外部RAMRAM3.5 3.5 思考与练习题思考与练习题 ⑸⑸变址寻址变址寻址( (基址寄存器基址寄存器+ +变址寄存器间接寻址变址寄存器间接寻址) ) 变址寻址时,指定的基址寄存器的内容与变址寄存变址寻址时,指定的基址寄存器的内容与变址寄存器的内容器的内容( (偏移量偏移量) )相加,所得的结果作为操作数的地址。
相加,所得的结果作为操作数的地址 变址寻址方式只适用于外部变址寻址方式只适用于外部ROMROM ⑹⑹相对寻址相对寻址 相对寻址时,由相对寻址时,由PCPC提供的基地址与指令中提供的偏提供的基地址与指令中提供的偏移量移量relrel相加,得到操作数的地址这时指出的地址是操相加,得到操作数的地址这时指出的地址是操作数与现行指令的相对位置作数与现行指令的相对位置 只适用于只适用于ROMROM空间 ⑺⑺位寻址位寻址 位寻址是对片内位寻址是对片内RAMRAM的位寻址区和某些可位寻址的位寻址区和某些可位寻址( (字字节地址能被节地址能被8 8整除整除) )的的SFRSFR进行位操作时的寻址方式进行位操作时的寻址方式 3.5 3.5 思考与练习题思考与练习题 3 3.若需访问.若需访问SFRSFR,应采用哪种寻址方式?,应采用哪种寻址方式? SFRSFR只能用于直接寻址只能用于直接寻址 4 4.若需访问片内.若需访问片内RAMRAM,有哪几种寻址方式?,有哪几种寻址方式? 直接寻址和寄存器间接寻址。
直接寻址和寄存器间接寻址 5 5.若需访问片外.若需访问片外RAMRAM,有哪几种寻址方式?,有哪几种寻址方式? 寄存器间接寻址寄存器间接寻址 6 6.若需访问.若需访问ROMROM,又有哪几种寻址方式?,又有哪几种寻址方式? 变址寻址和相对寻址变址寻址和相对寻址3.5 3.5 思考与练习题思考与练习题 7 7.请选用指令,分别达到下列操作.请选用指令,分别达到下列操作 (1)(1)将将A A内容送工作寄存器内容送工作寄存器R6R6 (2)(2)将将A A内容送片内内容送片内RAMRAM的的7BH7BH单元 (3)(3)将将A A内容送片外内容送片外RAMRAM的的7BH7BH单元 (4)(4)将将A A内容送片外内容送片外RAMRAM的的007BH007BH单元 (5)(5)将将ROM 007BHROM 007BH单元的内容送单元的内容送A A解:解:(1) MOV R6,A (1) MOV R6,A (2) MOV 7BH,A (2) MOV 7BH,A (3) MOV R0,#7BH(3) MOV R0,#7BH MOVX @R0,A MOVX @R0,A (4) MOV DPTR,#007BH(4) MOV DPTR,#007BH MOVX @DPTR,A MOVX @DPTR,A (5) MOV DPTR,#007BH(5) MOV DPTR,#007BH MOV A,#0MOV A,#0 MOVC A, @A+DPTR MOVC A, @A+DPTR 3.5 3.5 思考与练习题思考与练习题 8 8.试比较下列每一组中两条指令的区别。
.试比较下列每一组中两条指令的区别 (1)MOV A(1)MOV A,,#24H#24H MOV AMOV A,,24H24H (2)MOV A(2)MOV A,,R0R0 MOV AMOV A,,@R0@R0 (3)MOV A(3)MOV A,,@R0@R0 MOVX AMOVX A,,@R0@R0 (4)MOVX A(4)MOVX A,,@R0@R0 MOVX @R0MOVX @R0,,A A (5)MOVX @R0(5)MOVX @R0,, A A MOVX @DPTRMOVX @DPTR,,A A (6)MOVX A(6)MOVX A,,@R0@R0 MOVX AMOVX A,,@DPTR@DPTR3.5 3.5 思考与练习题思考与练习题3.5 3.5 思考与练习题思考与练习题 9 9.在.在80C5180C51片内片内RAMRAM中,已知中,已知(30H)=38H(30H)=38H,,(38H)=40H(38H)=40H,,(40H)=48H(40H)=48H,,(48H)=90H(48H)=90H,试分析下段程序中各条指令,试分析下段程序中各条指令的作用,说明原操作数的寻址方式、指出各指令的长度的作用,说明原操作数的寻址方式、指出各指令的长度及按顺序执行各条指令后的结果。
及按顺序执行各条指令后的结果 MOV AMOV A,,40H40H MOV R1MOV R1,,A A MOV P1MOV P1,,#0F0H#0F0H MOV @R1MOV @R1,,30H30H MOV DPTRMOV DPTR,,#1234H#1234H MOV 40HMOV 40H,,38H38H MOV R1MOV R1,,30H30H MOV 90HMOV 90H,,R1R1 MOV 48HMOV 48H,,#30H#30H MOV AMOV A,,@R1@R1 MOV P2MOV P2,,P1P13.5 3.5 思考与练习题思考与练习题3.5 3.5 思考与练习题思考与练习题1010..DA ADA A指令有什么作用,怎样使用?指令有什么作用,怎样使用? DA ADA A为十进制调整指令,这条指令是在进行为十进制调整指令,这条指令是在进行BCDBCD码运算时,跟在码运算时,跟在ADDADD和和ADDCADDC指令之后,将相加后存放在指令之后,将相加后存放在A A中结果进行调整。
中结果进行调整 调整的条件和方法:调整的条件和方法: 若 若(A)3(A)3~~0 0>>9 9或或AC=1AC=1,则,则(A)3(A)3~~0←(A)30←(A)3~~0 0++06H06H;; 若若(A)7(A)7~~4 4>>9 9或或CY=1CY=1,则,则(A)7(A)7~~4←(A)74←(A)7~~4 4++06H06H;; 若以上两条同时满足,或高 若以上两条同时满足,或高4 4位虽等于位虽等于9 9,但低,但低4 4位调整后有进位,位调整后有进位,则应加则应加66H66H1111.试编程将片外.试编程将片外RAMRAM中中80H80H单元的内容送到片内单元的内容送到片内RAMRAM的的2BH2BH单元 MOV R0, #80HMOV R0, #80H MOVX A, @R0MOVX A, @R0 MOV 2BH, A MOV 2BH, A 3.5 3.5 思考与练习题思考与练习题1212.试编程将片外.试编程将片外RAMRAM中中40H40H单元的内容与单元的内容与R1R1内容交换。
内容交换 MOV R0, #40H MOV R0, #40H MOVX A, @R0 MOVX A, @R0 XCH A,R1 XCH A,R1 MOV R0, #40H MOV R0, #40H MOVX @R0, AMOVX @R0, A1313.已知.已知A=0C9HA=0C9H,,B=8DHB=8DH,,CY=1CY=1执行指令执行指令ADDC AADDC A,,B B结结果如何,执行指令果如何,执行指令SUBB ASUBB A,,B B结果如何?结果如何? 执行指令执行指令ADDC AADDC A,,B B 结果 结果: A=57H, B=8DH,Cy=1 : A=57H, B=8DH,Cy=1 执行指令执行指令SUBB ASUBB A,,B B 结果 结果: A=3BH, B=8DH,Cy=0: A=3BH, B=8DH,Cy=0 3.5 3.5 思考与练习题思考与练习题1414.试分析以下两段程序中各条指令的作用,程序执行.试分析以下两段程序中各条指令的作用,程序执行后转向何处?后转向何处? (1) MOV P1(1) MOV P1,,#0CAH#0CAH MOV AMOV A,,#56H#56H JB P1.2JB P1.2,,L1L1 JNB ACC.3JNB ACC.3,,L2L2 L1L1:: ┆ ┆ L2L2:: ┆ ┆ (2) MOV A(2) MOV A,,#43H#43H JBC ACC.2JBC ACC.2,,L2L2 JBC ACC.6JBC ACC.6,,L2L2 L1L1:: ┆ ┆ L2L2:: ┆ ┆3.5 3.5 思考与练习题思考与练习题3.5 3.5 思考与练习题思考与练习题1515.试说明下段程序中每条指令的作用,当指令执行完.试说明下段程序中每条指令的作用,当指令执行完后,后,R0R0中的内容是什么?中的内容是什么? MOV R0MOV R0,,#0AFH#0AFH XCH AXCH A,,R0R0 SWAP ASWAP A XCH AXCH A,,R0R03.5 3.5 思考与练习题思考与练习题1616.试编程将片内.试编程将片内RAMRAM中中30H30H和和31H31H单元中内容相乘,结果单元中内容相乘,结果存放在片内存放在片内32H32H和和33H33H单元中,高位存放在单元中,高位存放在32H32H单元中。
单元中 MOV A, 30HMOV A, 30H MOV B,31H MOV B,31H MUL ABMUL AB MOV 32H,B MOV 32H,B MOV 33H,A MOV 33H,A 3.5 3.5 思考与练习题思考与练习题1717.试编程将.试编程将20H20H单元中的两个单元中的两个BCDBCD数拆开并变成相应的数拆开并变成相应的ASCⅡASCⅡ码存入码存入21H21H和和22H22H单元中 MOV A, 20H MOV A, 20H ANL A,#0FH ANL A,#0FH ORL A, 30H ORL A, 30H MOV 21H, A MOV 21H, A MOV A, 20H MOV A, 20H ANL A, #0F0H ANL A, #0F0H SWAP A SWAP A ORL A, 30H ORL A, 30H MOV 22H, A MOV 22H, A 3.5 3.5 思考与练习题思考与练习题1818.设在寄存器.设在寄存器R3R3的低的低4 4位中存有数码位中存有数码0 0~~F F中的一个数,中的一个数,试将其转换成试将其转换成ASCⅡASCⅡ码,并存入片外码,并存入片外RAMRAM的的2000H2000H单元。
单元 MOV A, #0FHMOV A, #0FH ANL A, R3ANL A, R3 ORL A,#30HORL A,#30H MOV DPTR, #2000HMOV DPTR, #2000H MOVX @DPTR, AMOVX @DPTR, A3.5 3.5 思考与练习题思考与练习题1919.试编程将片内.试编程将片内RAM 30HRAM 30H单元中单元中8 8位无符号二进制数转位无符号二进制数转换成换成3 3位位BCDBCD码,并存入片内码,并存入片内RAM 40H(RAM 40H(百位百位) )和和41H(41H(十位、十位、个位个位) )单元中 MOV A,30H MOV A,30H MOV B,#100 MOV B,#100 DIV AB DIV AB ORL A,#30H ORL A,#30H MOV 40H, A MOV 40H, A MOV A, B MOV A, B MOV B,#10 MOV B,#10 DIV AB DIV AB ORL A,#30H ORL A,#30H MOV 41H, A MOV 41H, A MOV A, B MOV A, B ORL A, #30H ORL A, #30H MOV 42H, A MOV 42H, A 3.5 3.5 思考与练习题思考与练习题2020.已知延时程序为.已知延时程序为 DELAYDELAY:: MOV R2MOV R2,,#0AH#0AH L1L1:: MOV R3MOV R3,,#0AH#0AH L2L2:: NOPNOP DJNZ R3DJNZ R3,,L2L2 DJNZ R2DJNZ R2,,L1L1 RETRET 若系统的晶振频率为 若系统的晶振频率为12MHz12MHz,求该延时子程序的延时,求该延时子程序的延时时间。
时间 一个机器周期 一个机器周期T=12/FOSC=1μsT=12/FOSC=1μs,则延时时间为:,则延时时间为: t=1+ [1+(1+2)*10+2]*10=331μS t=1+ [1+(1+2)*10+2]*10=331μS 3.5 3.5 思考与练习题思考与练习题 2121.判断下列指令是否正确,如有错误,说明原因.判断下列指令是否正确,如有错误,说明原因 (1)MOV A(1)MOV A,,R7R7 (2)MOV 34H(2)MOV 34H,,35H35H (3)XCHD A(3)XCHD A,,R3R3 (4)DEC DPTR(4)DEC DPTR (5)ORL C(5)ORL C,,/20H/20H (6)RL B(6)RL B (7)SETB 20H.7(7)SETB 20H.7 (8)CJNE A(8)CJNE A,,R1R1,,DONEDONE (9)MOV @R1(9)MOV @R1,,R7R73.5 3.5 思考与练习题思考与练习题 (10)ADDC B(10)ADDC B,,R0R0 (11)PUSH DPTR(11)PUSH DPTR (12)SUBB A(12)SUBB A,,@R4@R4 (13)ANL 45H(13)ANL 45H,,#50H#50H (14)CLR R0(14)CLR R0 (15)XRL C(15)XRL C,,ACC.0ACC.0 (16)MOVX A(16)MOVX A,,@A+PC@A+PC (17)DJNZ @R1(17)DJNZ @R1,,LABELLABEL (18)JMP LOOP (18)JMP LOOP 3.5 3.5 思考与练习题思考与练习题。












