




已阅读5页,还剩147页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2 MCS-51指令系统 及汇编语言程序设计,指令格式 寻址方式 指令系统 程序设计,概述,由构成计算机的电子器件的特性所决定, 计算机只能识别二进制代码。这种以二进制代码来描述指令功能的语言, 称之为机器语言, 用机器语言组成的程序, 称为目标程序。 计算机就是按照机器语言的指令来完成各种功能操作的, 它具有程序简捷、 占用存储空间小、 执行速度快、 控制功能强等特点。 一个单片机所需执行指令的集合即为单片机的指令系统。,使用易于阅读和辨认的指令符号来代替机器码,称为助记符,用助记符的形式表示的单片机指令就是汇编语言,为便于记忆和阅读,助记符号通常都使用易于理解的英文单词和拼音字母来表示。 单片机使用的机器语言、汇编语言及高级语言,但不管使用是何种语言,最终还是要“翻译”成为机器码,单片机才能执行之。 每种单片机都有自己独特的指令系统,那么指令系统是开发和生产厂商定义的,如要使用其单片机,用户就必须理解和遵循这些指令标准,要掌握某种(类)单片机,指令系统的学习是必须的。,MCS-51单片机汇编语言指令的格式,标号: 操作码 目的操作数, 源操作数 ; 注释 例如: LOOP: ADD A, 10H ; (A)(A)+10H (1)方括号 表示该项是可选项, 可有可无。 (2)标号是用户设定的符号, 它实际代表该指令所在的地址。 标号必须以字母开头, 其后跟18个字母或数字, 并以“:”结尾。 (3)操作码是用英文缩写的指令功能助记符。 它确定了本条指令完成的操作功能。任何一条指令都必须有该助记符项, 不得省略。 (4)目的操作数提供操作的对象, 并指出一个目标地址, 表示操作结果存放单元的地址, 它与操作码之间必须以一个或几个空格分隔。 (5)源操作数指出的是一个源地址(或立即数), 表示操作的对象或操作数来自何处。 它与目的操作数之间要用“,”号隔开。 (6)注释部分是在编写程序时, 为了增加程序的可读性, 用户写的对该条指令或该段程序功能的说明。 它以分号“;”开头, 可以用中文、 英文或某些符号来表示, 它不存入单片机, 只出现在源程序中。,无标号: MOV A , B 无目的操作数: PUSH A 无源操作数: CLR A 既无目的操作数也无源操作数:RET,标号的作用: 如软件延时程序: MOV R1, 0AH; 给R1赋循环初值 DELAY: DJNZ R1, DELAY; (R1) (R1)-1, 若(R1)0则循环,一些特殊符号的意义,在介绍指令系统前,先了解一些特殊符号的意义,这对今后程序的编写都是相当有用的。 Rn当前选中的寄存器区的8个工作寄存器R0R7(n=07)。 Ri(i=0,1)当前选中的寄存器区中可作为地址寄存器的两个寄存器R0和R1 direct内部数据存储单元的8位地址。包含0127(255)内部存储单元地址和特殊功能寄存地址。 #data指令中的8位常数。 #data16指令中的16位常数。 addr16用于LCALL和LJMP指令中的16位目的地址,目的地址的空间为64KB程序存储器地址。 addr11用于ACALL和AJMP指令中的11位目的地址,目的地址必须放在与下条指令第一个字节同一个2KB程序存储器空间之中。 rel8位带符号的偏移字节,用于所有的条件转移和SJMP等指令中,偏移字节对于下条指令的第一个字节开始的-128+127范围内。, 间接寄存器寻址或基址寄存器的前缀。 / 为操作的前缀,声明对该位操作数取反。 DPTR 数据指针。 bit 内部RAM和特殊功能寄存器的直接寻址位。 A 累加器。 B 寄存器B。用于乘法和除法指令中。 C 进位标志位。 (x) 某地址单元中的内容。 (x) 由X寻址单元中的内容。,微型计算机的基本工作原理,微型计算机解题过程 举例: 计算a+b-c=?,计算a+b-c=?,微型计算机的工作过程,微型计算机的工作过程就是执行程序的过程,而程序由指令序列组成,因此,执行程序的过程,就是执行指令序列的过程,即逐条地从存储器中取出指令并完成指令所指定的操作。 由于执行每一条指令,都包括取指、译码和执行三个基本步骤,所以,微型计算机的工作过程,也就是不断地取指令、译码和执行的过程,直到遇到停机指令时才结束机器的运行。,微型计算机工作流程,1.取指令 2.取源操作数 3.取目的操作数 4.执行指令,汇编语言程序 对应的机器指令 对应的操作 MOV A, #1 10110000 将立即数1传送到寄存器A中 00000001 ADD A, #2 00000100 计算两个数的和,结果存放到A中 00000010 MOV 08H, A 10100010 将A中的数传送到地址单元08H 00001000 00000000 HLT 11110100 停机,举例:计算1+2=?,MCS-51的寻址方式,寻址的“地址”即为操作数所在单元的地址,绝大部分指令执行时都需要用到操作数,那么到哪里去取得操作数呢?最易想到的就是告诉CPU操作数所在的地址单元,从那里可取得相应的操作数,这便是“寻址”之意。 MCS-51的寻址方式有7种寻址方式: 1.立即寻址 2.直接寻址 3.寄存器寻址 4.寄存器间接寻址 5.基址寄存器加变址寄存器间接寻址 6.相对寻址 7.位寻址,1.立即寻址,立即寻址就是把操作数直接在指令中给出,即操作数包含在指令中,指令操作码的后面紧跟着操作数,一般把指令中的操作数称为立即数,因此而得名。 立即数可以是8位或16位, 用十六进制数表示。 为了与直接寻址方式相区别,在立即数前加上“#”符号 例如: MOV A, #0EH ; (A)0EH 这条指令的意义是将0EH这个操作数送到累加器A中。,2.直接寻址,指令中直接给出操作数所在的存储器地址, 以供寻址取数或存数的寻址方式称为直接寻址。 例如: MOV A, 68H ; (A) (68H) 这条指令的意义是把内部RAM中的68H单元中的数据内容传送到累加器A中。 值得注意的是直接寻址方式只能使用8位二进制地址,因此这种寻址方式仅限于内部RAM进行寻址。 低128位单元在指令中直接以单元地址的形式给出。 对于特殊功能寄存器SFR只能用直接寻址方式访问,而无其它方法。,3.寄存器寻址,寄存器寻址对选定的8个工作寄存器R0R7以及A、B和DPTR进行操作,也就是操作数在寄存器中,因此指定了寄存器就得到了操作数,寄存器寻址的指令中以寄存器的符号来表示寄存器。 例如: MOV A , R0 ; (A)(R0) 这条指令的意义是把所用的工作寄存器组中的R0的内容送到累加器A中。 值得一提的是工作状态寄存器的选择是通过程序状态寄存器来控制的,在这条指令前,应通过PSW设定当前工作寄存器组。,4.寄存器间接寻址,寄存器中存放的是操作数的地址,也即操作数是通过寄存器指向的地址单元得到的,这便是寄存器间接寻址名称的由来。 例如指令: MOV A , R0 ; (A)(R0) 这条指令的意义是R0寄存器指向地址单元中的内容送到累加器A中。 假如R0=#56H,那么是将56H单元中的数据送到累加器A中。 这里要强调的是: 寄存器的内容不是操作数本身, 而是操作数的地址。 寄存器间接寻址使用所选定寄存器区中的R0和R1作为地址指针, 来寻址片内数据存储器RAM(00FFH)的256个单元, 但它不能访问特殊功能寄存器SFR。 寄存器间接寻址也适用于访问外部数据存储器, 此时, 用R0、 R1或DPTR作为地址指针。 寄存器间接寻址用符号“”指明。,例如: MOV R1, #80H ; (R1)80H MOV A, R1 ; (A)(80H),5.基址加变址寄存器间接寻址,基址加变址寄存器间接寻址是以DPTR或PC作为基址寄存器,以累加器A作为变址寄存器,将两寄存器的内容相加形成操作数的16位的实际地址。 例如: MOV A,A+DPTR MOVX A,A+PC JMP A+DPTR 在这三条指令中,A作为偏移量寄存器,DPTR或PC作为变址寄存器,A作为无符号数与DPTR或PC的内容相加,得到访问的实际地址。其中前两条是程序存储器读指令,后一条是无条件转移指令。,6.相对寻址,相对寻址是以当前程序计数器PC值加上指令规定的偏移量rel , 而构成实际操作数地址的寻址方法。 它用于访问程序存储器, 常出现在相对转移指令中。 转移的目的地址可参见如下表达式: 目的地址=转移指令地址+转移指令字节数+偏移量rel 值得注意的是,偏移量是有正负号之分的,偏移量的取值范围是当前PC值的-128 +127之间。,若PC=2050H,JZ为双字节指令,则: JZ 08H 程序转移的目标地址为: PC+2+rel=2050H+2+08H补=205AH JZ F4H 程序转移的目标地址为: PC+2+rel=2050H+2+F4H补=2046H,7.位寻址,在MCS-51单片机中,RAM中的20H2FH字节单元对应的位地址为00H7FH,特殊功能寄存器中的某些位也可进行为寻址,这些单元既可以采用字节方式访问它们,也可采用位寻址的方式访问它们。 例如: SETB PSW.3 ; (PSW.3)1,综上所述, 在MCS-51系列单片机的存储空间中, 指令究竟对哪个存储器空间进行操作是由指令操作码和寻址方式确定的。 7种寻址方式如表所示。,MCS-51的指令系统,MCS-51共有111条指令,可分为5类: 1.数据传送类指令 2.算数运算类指令 3.逻辑运算及移位类指令 4.控制转移类指令 5.布尔变量操作类指令,1.数据传送指令,在MCS-51单片机的数据传送指令总共有28条,分为: 内部数据传送指令 外部数据传送指令 程序存储器向累加器A传送数据指令 数据交换指令 堆栈操作指令,内部数据传送指令,这类指令的源操作数和目的操作数地址都在单片机的内部,可以是片内RAM的地址,也可以是特殊功能寄存器SFR的地址。 其指令通式为: MOV , 其中,为源操作数,为目的操作数。 该指令的功能是把源操作数送到目的操作数单元,源操作数单元中的源操作数不变。 按照寻址方式,内部数据传送指令又可以分为立即寻址型、直接寻址型、寄存器寻址型和寄存器间接寻址型等四类。,立即寻址型传送指令,这类指令的特点是源操作数字节是立即数 总共有5条指令: MOV A, #data ; (A) data MOV Rn, #data ; (Rn) data MOV Ri, #data ; (Ri) data MOV direct, #data ;(direct) data MOV DPTR, #data16 ; (DPTR) data16 这组指令表明, 8位立即数可以直接传送到内部数据区RAM的各个位置, 并且可把16位立即数直接装入数据指针DPTR。,直接寻址型传送指令,直接传送型指令的特点是指令码中至少含有一个源操作数和目的操作数的直接地址。 这类指令共有如下5条: MOV A ,direct ;A (direct) MOV Rn , direct ;Rn (direct) MOV Ri , direct ; (Ri) (direct) MOV direct2 ,direct1 ;direct2 (direct1),这组指令将直接地址所规定的内部RAM单元(片内RAM的00H7FH, SFR的80HFFH单元)内容传送到累加器A , 寄存器Rn, 并能实现内部数据寄存器RAM之间、 特殊功能寄存器SFR之间或SFR与内部RAM之间的直接数据传递。 直接传递不需要通过累加器A或者工作寄存器来间接传送, 从而提高了数据传送的效率 例如: MOV P2 , P1 ; (P2) (P1) 该指令的功能是不通过其它寄存器, 直接把P1口(口地址90H)的内容传送到P2口(口地址A0H)输出, 提高了效率。,寄存器寻址数据传送指令,这类指令总共有如下5条: MOV A ,Rn ;A Rn MOV Rn , A ; Rn A MOV direct , Rn ; direct Rn MOV direct , A ; direct A 这组指令的功能是把累加器A的内容传送到内部数据区RAM的各个单元, 或者把指定工作寄存器R0R7中的内容传送到累加器A或direct所指定的片内RAM的00H7FH单元或特殊功能寄存器SFR中去。 但不能用这类指令在内部工作寄存器之间直接传送。 例如: 不存在MOV R1, R2 这样的指令。,寄存器间接寻址型数据传送指令,这一类指令可以分为如下三条: MOV A ,Rn ; A(Ri) MOV direct , Ri ; (Ri)direct 这三条指令的共同点是Ri存放的不是操作数本身,而是操作数所在存储单元的地址。 第一条指令的功能是把中的内容为地址的操作数传送到累加器A中; 第二条指令的功能是把累加器A中的操作数传送到以Ri中内容为地址的存储单元; 第三条指令的作用是把以Ri中的内容地址的源操作数传送到direct存储单元。,内部RAM间数据传递关系,外部数据传送指令,MCS-51单片机CPU对片外扩展的数据存储器RAM或I/O口进行数据传送, 必须采用寄存器间接寻址的方法, 通过累加器A来完成。 一般数据的传送是通过P0口和P2口完成的, 即片外RAM地址总线低8位由P0口送出, 高8位由P2口送出, 数据总线(8位)也由P0口传送(双向), 但与低8位地址总线是分时传送的。,这类数据传送指令共有以下4条单字节指令, 指令操作码助记符标志为MOVX。 MOVX A, DPTR ; (A) (DPTR) MOVX A, Ri ; (A) (Ri) MOVX DPTR, A ; (DPTR) (A) MOVX Ri, A ; (Ri) (A),例如: 设外部RAM(0203H)=FFH, 分析以下指令执行后的结果。 MOV DPTR, 0203H ; (DPTR) 0203H MOVX A, DPTR ; (A) (DPTR) MOV 30H, A ; (30H) (A) MOV A, 0FH ; (A) 0FH MOVX DPTR, A ; (DPTR) (A) 执行结果为: (DPTR)=0203H, (30H)=FFH, (0203H)=(A)=0FH。,程序存储器向累加器A传送数据指令,程序存储器向累加器A传送数据指令, 又称查表指令。 它采用变址寻址方式, 把程序存储器(ROM或EPROM)中存放的表格数据读出, 传送到累加器A。 它共有如下两条单字节指令, 指令操作码助记符为MOVC。 MOVC A, A+DPTR; (A) (A)+(DPTR) MOVC A, A+PC; (PC) (PC)+1, (A) (A)+(PC),例: 在外部ROM/EPROM中, 从2000H单元开始依次存放09的平方值: 0、 1、 4、 9、 、 81, 要求依据累加器A中的值(09)来查找所对应的平方值, 分析下述程序的结果。 MOV DPTR, 2000H ; (DPTR) 2000H MOV A, 09H ; (A) 09H MOVC A, A+DPTR ; (A) (A)+(DPTR) 执行结果: (DPTR)=2000H, (A)=51H(81的十六进制数)。,例:仍以外部ROM/EPROM 2000H单元开始存放09的平方值,以PC作为基址寄存器进行查表。 解: 设MOVC指令所在地址(PC)=1FF0H,则偏移量 =2000H-(1FF0H+1)=0FH,相应的程序如下: MOV A, 09H ; (A) 09H ADD A, 0FH ; 地址调整 MOVC A, A+PC ; (A) (A)+(PC)+1) 执行结果为: (PC)=1FF1H, (A)=51H。,数据交换指令,数据传送类指令一般都用来将操作数自源地址传送到目的地址, 指令执行后, 源地址的操作数不变, 目的地址的操作数则修改为源地址的操作数。 而数据交换指令其数据作双向传送, 涉及传送的双方互为源地址、目的地址, 指令执行后各方的操作数都修改为另一方的操作数。 因此, 两操作数均未冲掉、 丢失。,数据交换类指令共有如下5条指令: XCH A, direct ; (A) (direct) XCH A, Ri ; (A) (Ri) XCH A, Rn ; (A) (Rn) XCHD A, Ri ; (A30) (Ri)30) SWAP A ; (A74) (A30),例: 设(R0)=30H, (30H)=4AH, (A)=28H, 则: 执行 XCH A, R0 结果为 : (A)=4AH, (30H)=28H 执行 XCHD A, R0 结果为 : (A)=2AH, (30H)=48H 执行 SWAP A 结果为 : (A)=82H,堆栈操作类指令,堆栈操作有进栈和出栈操作, 即压入和弹出数据, 常用于保存或恢复现场。 该类指令共有如下两条指令: (SP)(SP)+1 (SP)(direct) (direct)(SP) (SP)(SP)-1,PUSH direct,POP direct,例: 若在外部ROM/EPROM中2000H单元开始依次存放09的平方值, 数据指针(DPTR)=3A00H, 用查表指令取出2003H单元的数据后, 要求保持DPTR中的内容不变。 完成以上功能的程序如下: MOV A, 03H ; (A) 03H PUSH DPH ; 保护DPTR高8位入栈 PUSH DPL ; 保护DPTR低8位入栈 MOV DPTR , 2000H ; (DPTR) 2000H MOVC A, A+DPTR ; (A) (2000H+03H) POP DPL ; 弹出DPTR低8位 POP DPH ; 弹出DPTR高8位, (先进后出),数据传送指令 总结,以累加器A为目的操作数的数据传送指令 1)MOV A,#data ;dataA 2)MOV A,Rn ;(Rn)A 3)MOV A,Ri ;(Ri)A 4)MOV A,direct ;(direct)A 以寄存器Rn为目的操作数的数据传送指令 1)MOV Rn,#data ;dataRn 2)MOV Rn,direct ;(direct)Rn 3)MOV Rn,A ;(A)Rn,以Ri间址单元为目的操作数的数据传送指令 1)MOV Ri,#data ;data(Ri), 2)MOV Ri,direct ;(direct)(Ri) 3)MOV Ri,A ;(A)(Ri) 以直接地址direct为目的操作数的数据传送指令 1)MOV direct,#data ;datadirect, 2)MOV direct2,direct1 ;(direct1)direct2 3)MOV direct,Rn ;(Rn)direct 4)MOV direct,Ri ;(Ri)direct 5)MOV direct,A ;(A)direct,16位立即数传送指令 MOV DPTR,#data16 ;data16DPTR 外RAM数据传送指令 MOVX DPTR,A ;(A)(DPTR) MOVX A,DPTR ;(DPTR)A MOVX Ri,A ;(A)(Ri ) MOVX A,Ri ;(Ri)A ROM数据传送指令 MOVC A,A+DPTR ;(A)+(DPTR)A MOVC A,A+PC ;(A)+(PC)A,数据交换指令 XCH A,Rn ;(A)(Rn) XCH A,direct ;(A)(direct) XCH A,Ri ;(A)(Ri) XCHD A,Ri ;(A)30(Ri)30 SWAP A ;(A)74(A)30 堆栈操作指令 PUSH direct ;SP(SP)+1,(SP)(direct) POP direct ;(SP)direct,SP(SP)-1,数据传送类指令助记符与操作,利用传送类指令并用多种方法将内部RAM中50H单元的内容与40H单元的内容互换。,方法1: MOV A,50H MOV 50H,40H MOV 40H,A,方法2: MOV A,50H XCH 40H,A MOV 50H,A,方法3: PUSH 50H PUSH 40H POP 50H POP 40H,用按键控制灯管发光,如图,编程实现:当按键Ki被按下时对应的发光管Li就发光。,GND,按键Ki被按下时,相应端口线P2.i为低电平0 若要发光管Li亮,对应的端口线P1.i应为低电平0 按键控制发光管,只需将端口线P2.i的数据送给端口线P1.I输出即可。 参考程序: ORG 0000H LJMP MAIN MAIN:MOV P1,P2 AJMP MAIN,2.算术运算指令,算术运算指令共有24条,算术运算主要是执行加、减、乘、除法四则运算,还有加1、减1操作以及BCD码的运算和调整。 虽然MCS-51单片机的算术逻辑单元ALU仅能对8位无符号整数进行运算,但利用进位标志C,则可进行多字节无符号整数的运算。 同时利用溢出标志,还可以对带符号数进行补码运算。 需要指出的是,除加、减1指令外,这类指令大多数都会对PSW有影响,这在使用中应特别注意。,不带进位位的加法指令ADD ADD A,#data ; 例:ADD A,#10H ADD A,direct ; 例:ADD A,10H ADD A,Rn ; 例:ADD A,R7 ADD A,Ri ; 例:ADD A,R0 用途:将A中的值与其后面的值相加,最终结果否是回到A中。,带进位位的加法指令ADDC ADDC A,#data ADDC A,direct ADDC A,Rn ADDC A,Ri 用途:将A中的值和其后面的值相加,并且加上进位位C中的值。,说明:由于MCS-51单片机是一种8位机,所以只能做8位的数学运算,但8位运算的范围只有0255,这在实际工作中是不够的,因此就要进行扩展,一般是将2个8位的数学运算合起来,成为一个16位的运算,这样,可以表达的数的范围就可以达到0-65535。 如何合并呢?,例:1067H+10A0H 先做低8位加法 67H+A0H=107H, 而107H显然超过了0FFH,因此最终保存在A中的是7,而1则到了PSW中的CY位了。 然后再做高8位加法,并加上低8位的进位 10H+10H+CY, 结果是21H,所以最终的结果是2107H。 所以在进行多字节的加法运算或多次的加法运算中应使用ADDC,将低字节的进位考虑进来。,例: 双字节无符号数加法(R0 R1)+(R2 R3)(R4 R5) 。 假设其和不超过16位, 其编程如下: MOV A, R1 ; 取被加数低字节 ADD A, R3 ; 低字节相加 MOV R5, A ; 保存和低字节 MOV A, R0 ; 取高字节被加数 ADDC A, R2 ; 两高字节之和加低位进位 MOV R4, A ; 保存和高字节,带借位的减法指令SUBB SUBB A,#data SUBB A,direct SUBB A,Rn SUBB A,Ri 说明:没有不带借位的减法指令,如果需要做不带位的减法指令(在做第一次相减时),只要将Cy清零即可。,乘法指令 MUL AB 此指令的功能是将A和B中的两个8位无符号数相乘,两数相乘结果一般比较大,因此最终结果用1个16位数来表达,其中高8位放在B中,低8位放在A中。 在乘积大于FFFFH时,OV置1(溢出),否则OV为0,而CY总是0。 例:(A)=4EH,(B)=5DH,执行指令MUL AB后,乘积是1C56H,所以在B中放的是1CH,而A中放的则是56H。,除法指令 DIV AB 此指令的功能是将A中的8位无符号数除以B中的8位无符号数(A/B)。 结果,商放在A中,余数放在B中,CY和OV都是0。 如果在做除法前B中的值是00H,也就是除数为0,那么OV=1。,加1指令 INC A INC Rn INC direct INC Ri INC DPTR 用途很简单,就是将后面目标中的值加1。,说明:从结果上看INC A和ADD A,#1差不多,但 INC A是单字节,单周期指令, ADD A,#1则是双字节,双周期指令, 而且 INC A不会影响PSW位 ADD A ,#1,不会影响CY 因此加1指令并不适合做加法,事实上它主要是用来做计数、地址增加等用途。 另外,加法类指令都是以A为核心操作数,其中一个数必须放在A中,而运算结果也必须放在A中,而加1类指令的对象则广泛得多,可以是寄存器、内存地址、间址寻址的地址等等。,减1指令 DEC A DEC Rn DEC direct DEC Ri 与加1指令类似。,十进制调整指令 DA A 在进行BCD码运算时,这条指令总是跟在ADD或ADDC指令之后,其功能是将执行加法运算后存于累加器A中的结果进行调整和修正。 十进制调整指令是一条对二十进制的加法进行调整的指令。 两个压缩BCD码按二进制相加, 必须经过本条指令调整后才能得到正确的压缩BCD码和数, 实现十进制的加法运算。 由于指令要利用AC、 CY等标志才能起到正确的调整作用, 因此它必须跟在加法ADD、 ADDC指令后面方可使用。,例: 双字节压缩BCD码加法。 解: 设R5(高)、R4(低)为被加数; R3(高)、R2(低)为加数, 相加和的结果存入: R6(万)、R5(千、百)、R4(十、个)。 参考程序如下: MOV A, R4 ; 被加数十位、 个位送入A ADD A, R2 ; 十位、 个位相加 DA A ; 和的十位、 个位调整 MOV R4, A ; 和的十位、 个位存入R4 MOV A , R5 ; 被加数千位、 百位送入A ADDC A, R3 ; 千位、 百位的和加低位进位 DA A ; 和的千位、 百位调整 MOV R5, A ; 和的千位、 百位存入R5 MOV A, 00H ; A清零 ADDC A, 00H ; 求和的万位值 MOV R6, A ; 和的万位存入R6,3.逻辑运算和移位指令,逻辑运算和移位指令共有25条,有与、或、异或、求反、左右移位、清0等逻辑操作,有直接、寄存器和寄存器间址等寻址方式。 这类指令一般不影响程序状态字(PSW)标志。,循环移位指令 RL A ;累加器A中的内容循环左移一位,不影响进位标志 RR A ;累加器A中的内容循环右移一位,不影响进位标志 RLC A ;累加器A中的内容连同进位CY左移一位 RRC A ;累加器A中的内容连同进位CY右移一位,累加器半字节交换指令 SWAP A; 这条指令是将累加器中的内容高低半字节互换。 求反指令 CPL A ; 这条指令将累加器中的内容按位取反。 清零指令 CLR A ; 这条指令将累加器中的内容清0。,逻辑与操作指令 这组指令的作用是将两个单元中的内容按位执行逻辑与并将结果存入累加器或直接地址中。 ANL A,direct ; ANL A,#data ; ANL A,Rn ; ANL A,Ri ; ANL direct,#data ; ANL direct,A ;,逻辑或操作指令 这组指令的作用是将两个单元中的内容按位执行逻辑或并将结果存入累加器或直接地址中。 ORL A,#data ; ORL A,direct ; ORL A,Rn ; ORL A,Ri ; ORL direct ,#data ; ORL direct ,A ;,逻辑异或操作指令 这组指令的作用是将两个单元中的内容按位执行逻辑异或操作并将结果存入累加器或直接地址中。 XRL A,#data ; XRL A,direct ; XRL A,Rn ; XRL A,Ri ; XRL direct ,#data ; XRL direct ,A ;,用P1口实现亮点流动,ORG 0000H LJMP START ORG 30H START:MOV SP, #5FH MOV A, #80H LOOP: MOV P1, A RL A LCALL DELAY LJMP LOOP DELAY:MOV R7,#255 D1: MOV R6,#255 D2: NOP,NOP NOP NOP DJNZ R6,D2 DJNZ R7,D1 RET END,点亮了哪一个灯?,4.控制转移指令,控制转移指令用于控制程序的流向,所控制的范围即为程序存储器区间。 MCS-51系列单片机的控制转移指令相对丰富,有可对64kB程序空间地址单元进行访问的长调用、长转移指令,也有可对2kB字节进行访问的绝对调用和绝对转移指令,还有在一页范围内短相对转移及其它无条件转移指令。 这些指令的执行一般都不会对标志位有影响。,无条件转移指令,JMP/SJMP/AJMP/LJMP 这组指令执行完后,程序就会无条件转移到指令所指向的地址上去。 长转移指令访问的程序存储器空间为16位地址64KB,绝对转移指令访问的程序存储器空间为11位地址2KB空间。,LJMP addr16 ;长转移指令,addr16(PC),给程序计数器赋予新值(16位地址) AJMP addr11 ;短转移指令,(PC)+2(PC),addr11(PC100) ,程序计数器赋予新值(11位地址),(PC1511)不改变 SJMP rel ;相对转移指令,(PC)+2+rel(PC)当前程序计数器先加上2再加上8位偏移量给程序计数器赋予新值 JMP A+DPTR ;间接转移指令,(A)+(DPTR)(PC),累加器所指向地址单元的值加上数据指针的值给程序计数器赋予新值,条件转移指令,程序可利用这组丰富的指令根据当前的条件进行判断,看是否满足某种特定的条件,从而控制程序的转向。 JZ rel ; (A)=0,(PC)+2+rel(PC),累加器中的内容为0,则转移到偏移量所指向的地址,否则程序往下执行 JNZ rel ; (A)0,(PC)+2+rel(PC),累加器中的内容不为0,则转移到偏移量所指向的地址,否则程序往下执行,DJNZ Rn, rel ; (Rn)-1(Rn),(Rn)0, (PC)+2+rel(PC) ,工作寄存器Rn减1不等于0,则转移到偏移量所指向的地址,否则程序往下执行 DJNZ data, rel ; (Rn)-1(Rn),(Rn)0, (PC)+2+rel(PC)直接地址单元中的内容减1不等于0,则转移到偏移量所指向的地址,否则程序往下执行,CJNE A, direct, rel ; (A)(direct), (PC)+3+rel(PC),累加器中的内容不等于直接地址单元的内容,则转移到偏移量所指向的地址,否则程序往下执行 CJNE A, #data, rel ; (A)#data, (PC)+3+rel(PC),累加器中的内容不等于立即数,则转移到偏移量所指向的地址,否则程序往下执行,CJNE Rn, #data, rel ; (Rn)#data, (PC)+3+rel(PC),工作寄存器Rn中的内容不等于立即数,则转移到偏移量所指向的地址,否则程序往下执行 CJNE Ri, #data, rel ; (Ri)#data, (PC)+3+rel(PC),工作寄存器Ri指向地址单元中的内容不等于立即数,则转移到偏移量所指向的地址,否则程序往下执行,子程序调用指令,子程序是为了便于程序编写,减少那些需反复执行的程序占用多余的地址空间而引入的程序分支,从而有了主程序和子程序的概念,需要反复执行的一些程序,我们在编程时一般都把它们编写成子程序,当需要用它们时,就用一个调用命令使程序按调用的地址去执行,这就需要子程序的调用指令和返回指令。,子程序调用指令,LCALL addr16 ; 长调用指令,可在64KB空间调用子程序。 此时(PC)+ 3(PC),(SP)+ 1(SP),(PC7-0)(SP),(SP)+ 1(SP),(PC15-8)(SP),addr16(PC),即分别从堆栈中弹出调用子程序时压入的返回地址 ACALL addr11 ; 绝对调用指令,可在2KB空间调用子程序。 此时(PC)+ 2(PC),(SP)+ 1(SP),(PC7-0)(SP),(SP)+ 1(SP),(PC15-8)(SP),addr11(PC10-0),LCALL和ACALL指令类似于转移指令LJMP和AJMP, 不同之处在于它们在转移前要把执行完该指令的PC内容自动压入堆栈后, 才将addr16(或addr11)送往PC, 即把子程序的入口地址装入PC。 执行这两条指令不影响标志位。,返回指令,RET ; 子程序返回指令。 此时(SP)(PC15-8),(SP)- 1(SP),(SP)(PC7-0),(SP)- 1(SP) RETI ; 中断返回指令,除具有RET功能外,还具有恢复中断逻辑的功能 需注意的是:RETI指令不能用RET代替,空操作指令,NOP ; (PC) (PC)+1 空操作指令是一条单字节单周期指令。 它控制CPU不做任何操作, 仅仅是消耗这条指令执行所需要的一个机器周期的时间, 不影响任何标志, 故称为空操作指令。 但由于执行一次该指令需要一个机器周期, 所以常在程序中加上几条NOP指令用于设计延时程序, 拼凑精确延时时间或产生程序等待等。,5.布尔变量操作类指令,布尔处理功能是MCS-51系列单片机的一个重要特征,这是出于实际应用需要而设置的。 布尔变量也即开关变量,它是以位(bit)为单位进行操作的。 在物理结构上,MCS-51单片机有一个布尔处理机,它以进位标志做为累加位,以内部RAM可寻址的128个为存储位。 既然有布尔处理机功能,所以也就有相应的布尔操作指令集。,位传送指令,位传送指令就是可寻址位与位累加器CY之间的传送,指令有两条。 MOV C,bit ;bitCY,某位数据送CY MOV bit,C ;CYbit,CY数据送某位 不影响其他寄存器的内容或标志,由于两个寻址位之间没有直接的传送指令, 常用上述两条指令并通过C作为中间媒介来进行寻址位间的传送。 例如: 将内部RAM中20H 单元的第7位(位地址为07H)的内容, 送入P1口的P1.0中的程序如下: MOV C, 07H ; (CY) (07H) MOV P1.0, C ; (P1.0) (CY) 当(20H)=A3H, (P1)=11111110B时, 执行上述指令后修改了P1 口第 0 位, 即(CY)=1, (P1)=11111111B。,位置位、复位指令,这些指令对CY及可寻址位进行置位或复位操作,共有四条指令。 CLR C ; 0CY,清CY CLR bit ; 0bit,清某一位 SETB C ; 1CY,置位CY SETB bit ; 1bit,置位某一位,例如: 将P1 口的P1.7 置位, 并清进位位的程序如下: SETB P1.7 ; (P1.7) 1 CLR C ; (CY) 0 当(P1)=00001111B时, 执行完上述指令后, (P1)=10001111B, (CY)=0。,位运算指令,位运算都是逻辑运算,有与、或、非三种指令,共六条。 ANL C,bit ;(CY)(bit)CY ANL C, /bit ;(CY)(bit )CY ORL C,bit ;(CY)(bit)CY ORL C, /bit ;(CY)(bit )CY CPL C ;(CY)CY CPL bit ;(bit)bit,CALL PR2 JMP $ PR2: MOV C, P1.1 ; (CY) (P1.1) ORL C, P1.2 ; (CY) (P1.1)(P1.2) = A ANL C, P1.0 ; (CY) (P1.0)A CPL C ; (CY) MOV F0H, C ; F0H内暂存B MOV C, P1.3 ; (CY) (P1.3) ANL C, /P1.4 ; (CY) (P1.3) ORL C , F0H ; (CY) BD MOV P1.5, C ; 运算结果送入P1.5 RET,例 2: 利用位逻辑指令, 模拟图 3 7 所示硬件逻辑电路功能。 参考子程序如下:,位控制转移指令,位控制转移指令是以位的状态作为实现程序转移的判断条件: JC rel ; (CY)=1转移,(PC)+2+relPC,否则程序往下执行,(PC)+2PC。 JNC rel ; (CY)=0转移,(PC)+2+relPC,否则程序往下执行,(PC)+2PC。 JB bit, rel ; 位状态为1转移。 JNB bit, rel ; 位状态为0转移。 JBC bit, rel ; 位状态为1转移,并使该位清“0”。 后三条指令都是三字节指令,如果条件满足,(PC)+3+relPC,否则程序往下执行,(PC)+3PC。,JC/JNC这两条指令常和比较条件转移指令CJNE一起使用, 先由CJNE指令判别两个操作数是否相等, 若相等就顺序执行; 若不相等则依据两个操作数的大小置位或清零CY, 再由JC 或JNC指令根据CY的值决定如何进一步分支, 从而形成三分支的控制模式, 如图所示。,有符号数的表示,对于有符号数,机器数常用的表示方法有原码、反码和补码三种。 原码:最高有效位为符号位,0表示正数,1表示负数。 反码:正数的反码与原码相同;负数的反码由原码除符号位外按位取反获得。 补码:正数的补码与原码相同;负数的补码由反码加1获得。 数X的原码记作X原,反码记作X反,补码记作X补 计算机内部默认采用补码表示有符号数。,设数x的原码记作x原,如机器字长为n,则原码定义如下: 在原码表示法中,最高位为符号位(正数为0,负数为1),其余数字位表示数的绝对值。 n位原码表示数值的范围是 ,对应的原码是11110111。 0的原码有两种形式。,原码,例如,当机器字长n=8时, +0原 =00000000B -0原=27+0=10000000B +8原 =00001000B -8原=27+8=10001000B +127原 =01111111B -127原=27+127=11111111B 当机器字长n=16时, +0原 =0000000000000000B -0原=215+0=1000000000000000B +8原 =0000000000001000B -8原=215+8=1000000000001000B,原码表示法简单直观,且与真值的转换很方便,但不便于在计算机中进行加减运算。 如进行两数相加,必须先判断两个数的符号是否相同。 如果相同,则进行加法运算,否则进行减法运算。 如进行两数相减,必须比较两数的绝对值大小,再由大数减小数,结果的符号要和绝对值大的数的符号一致。 按上述运算方法设计的算术运算电路很复杂。因此,计算机中通常使用补码进行加减运算,这样就引入了反码表示法和补码表示法。,设数x的反码记作x反,如机器字长为n,则反码定义如下: n位反码表示数值的范围是 ,对应的反码是10000111。 0的反码有两种形式。,反码,正数的反码与其原码相同: 例如,当机器字长n=8时: +0反=+0原=00000000B +127反=+127原=01111111B 当机器字长n=16时: +8反=+8原=0000000000001000B +127反=+127原=0000000001111111B 负数的反码是在原码基础上,符号位不变(仍为1),数值位按位取反。 例如,当机器字长n=8时: -0反=(28-1)-0=11111111B -127反=(28-1)-127=10000000B,设数x的补码记作x补,如机器字长为n,则补码定义如下: n位补码表示数值的范围是 ,对应的补码是10000111。 0的补码只有一种形式。,补码,正数的补码与其原码、反码相同。 例如,当机器字长n=8时: +8补=+8反=+8原=00001000B +127补=+127反=+127原=01111111B 当机器字长n=16时: +8补=+8反=+8原=0000000000001000B +127补=+127反=+127原=0000000001111111B,负
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年数字内容创作者考试试卷及答案
- 2025年小学数学期末考试题及答案
- 2025年物业管理与服务行业能力考试卷及答案
- 2025年数据分析与处理技能测试题及答案
- 2025年兽医学专业核心知识考试题及答案
- 2025年汽车工程技术专业考试题及答案
- 2025年跨文化交际能力评估试卷及答案
- 2025年跨境电商业务管理考试试卷及答案
- 2025年健康管理师考试试卷及答案指导
- 2025年环境工程技术人员考试题及答案
- 香港证券及期货从业资格考试温习手册版HK
- 2025年中考物理知识点归纳(挖空版)
- 2024年安徽省初中学业水平考试生物试题含答案
- 2024年浙江省中考英语试题卷(含答案解析)
- 2024年演出经纪人考试必背1000题及完整答案(各地真题)
- 团员组织关系转接介绍信(样表)
- GB/T 18926-2008包装容器木构件
- 通道县生物多样性调查
- 汉语拼音音节表带声调
- 假发行业英语术语整理
- 中国银行营业网点基础服务礼仪规范
评论
0/150
提交评论