




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第3章 AT89C51的指令系统,第3章 AT89C51指令系统,何为指令?,CPU按照人们的意图来完成某种操作的命令。,指令系统:一台计算机的CPU所能执行的全部指令的集合。,本章主要内容:,一、指令的基本概念及格式介绍,汇编语言指令的书写格式 标号:操作码 操作数1,操作数2,操作数3 ;注释 标号:用符号表示的该条指令的首地址,根据需要设置。位于一 条指令(语句)的开头,以冒号结束。它以英文字母开头,由字母、数字、下划线等组成。 操作码:操作码规定指令实现何种功能(传送、加)操作。是由助记符表示的字符串,是任一指令不可缺少的部分。 操作数:操作数可以是被传送的数(立即数),或数在内RAM
2、中的地址,寄存器, 转移的指令地址,。可以采用字母、字符和数字等多种表示形式。各操作数之间要用“,” 号分开。 注释:为便于阅读而对指令附加的说明语句。必须以分号“;”开始。可以采用字母、数字和汉字等多种表示形式。,汇编语言常用符号 指令系统中还使用了一些符号。这些符号的含义如下: Rn当前选中的工作寄存器组中的8个寄存器R0R7(n=07) Ri当前选中的工作寄存器组中的2个寄存器R0、R1(i=0,1). direct8位直接地址。 #data8包含在指令中的8位二进制数。 #data16包含在指令中的16位二进制数。 Addr1616位二进制地址,用于LCALL、LJMP中 Addr11
3、用于ACALL和AJMP指令中。 rel在相关的汇编语言指令中讲解它的意义。 DPTR数据指针,可用作16位二进制的地址寄存器。,汇编语言常用符号 bit位,内部RAM(包括特殊功能寄存器)中的可寻址位。 A累加器。 B特殊功能寄存器,常用于乘除法指令MUL和DIV中。 C进位标志或进位位,或位处理器中的累加器。也可用Cy表示。 间址寄存器或基址寄存器的前缀,如 Ri,DPTR 。 / 位操作的前缀,表示对该位操作数取反,如 / bit 。 () 中的内容。 ()中内容为地址的其中的内容。 用箭头右边的内容取代箭头左边的内容。 $ 指本条指令的首地址。,二、伪指令,伪指令:用来对汇编过程进行控
4、制,或者对符号、标号赋值的指令。这些指令不被翻译成机器代码。,汇编语言中的伪指令及其作用,三、指令寻址方式,寻址、寻址方式、寻址存储器范围,寻址就是单片机CPU寻找指令中参与操作的数据的地址 寻址方式是单片机CPU寻找指令中参与操作的数据地址的方法,寻址依据:,说明:在没有特别强调的情况下,提到的寻址方式是源操作数的寻址。,寻址方式种类(7种):,四、汇编语言的指令系统,按指令功能可把111种指令分为五类: 数据传送类(29种); 算术操作类(24种); 逻辑操作类(24种); 控制程序转移类(17种); 布尔变量操作类(17种),即位操作类指令。,1. 数据传送指令,)内部RAM数据传送指令
5、 (MOV)(16条) 表3-4列出了内部RAM数据传送指令、功能操作、机器代码和执行机器周期数。,(1)、16位传送,指令: MOV DPTR,#data16,例: MOV DPTR,#1234H ;(DPTR)=1234H,该指令也可以用两条8位数据传送指令实现: MOV DPH,#12H ;(DPH)=12H MOV DPL,#34H ;(DPL)=34H,(DPTR)=1234H,通用格式: MOV 目的字节, 源字节,(2)、8位传送,给出每条指令执行后的结果,MOV 23H,#30H MOV 12H,#34H MOV R0,#23H MOV R7,12H MOV R1,#12H M
6、OV A,R0 MOV 34H,R1 MOV 45H,34H MOV DPTR,#6712H MOV 12H,DPH MOV R0,DPL MOV A,R0,;(23H)=30H ;(12H)=34H ;(R0)=23H,;(R7)=34H ;(R1)=12H ;(A)=30H,;(34H)=34H ;(45H)=34H ;(DPTR)=6712H,;(12H)=67H ;(R0)=12H ;(A)=67H,内部RAM,小练习:,设片内RAM中(59H)=50H,执行下列程序段: MOV A,59H MOV R0,A MOV A,#0 MOV R0,A MOV A,#25H MOV 51H,A
7、 MOV 52H,#70H 问A=? (50H)=? (51H)= ? (52H)=?,(A)=50H,(R0)=50H,(A)=00H,(50H)=00H,(A)=25H,(51H)=25H,(52H)=70H,A=25H,(51H)=25H,(52H)=70H,(50H)=00H,2)外部RAM数据传送指令(MOVX)(4条) 表3-5列出了外部RAM数据传送指令、功能操作、机器代码和执行机器周期数,它们都是与外RAM有关的数据传送指令。 该类指令均涉及对外RAM 64K地址单元操作,而指令MOVX Ri,A MOVX A,Ri中Ri只提供外RAM地址的低8位地址,所以高8位应由P2提供。
8、, MOVX A,Ri ;(Ri)(A),i=0、1 MOVX A,DPTR ;(DPTR)(A) MOVX Ri,A ;(A)(Ri),i=0、1 MOVX DPTR,A ;(A)(DPTR),强调,1. 在89C51中,与外部存储器RAM之间进行数据传输时,必须通过A累加器。, MOVX A,Ri MOVX A,DPTR MOVX Ri,A MOVX DPTR,A,89C51内部RAM间直接可以进行数据的传递。,外部RAM数据的传递必须通过A累加器。,比如,要将外部RAM中某一单元(设为0100H单元的数据)送入另一个单元(设为0200H单元), 必须先将0100H单元中的内容读入A,然后
9、再送到0200H单元中去。,【例】:将外部RAM中100H单元中的内容送入外部RAM中200H单元中。,2.要读或写外部的RAM,必须要知道RAM的地址,地址是被直接放 在DPTR中的或者Ri中。 使用时: 应先将要读或写的地址送入DPTR或Ri中; 用读写命令。,MOV DPTR,#0100H MOVX A,DPTR MOV DPTR,#0200H MOVX DPTR,A,3)ROM数据传送指令(查表指令)(MOVC)(2条) 表3-5列出了ROM数据传送指令、功能操作、机器代码和执行机器周期数。均属变址寻址指令,涉及ROM的寻地址空间均为64K。它们在程序中多用于查数据表,故又称查表指令。
10、 一般,A中内容称变址,DPTR、PC中内容称基地址。, MOVC A,A+DPTR ;(A)+(DPTR)A MOVC A,A+PC ;(PC)+1(PC),(A)+(PC)A,【例】若(DPTR)=3000H,(A)=20H, 执行: MOVC A,A+DPTR; 结果: (A)=((DPTR)+(A)=(3000H+20H)= (3020H),【例】若(PC)=1000H,(A)=20H, 执行: MOVC A,A+PC; 结果: (A)=(PC)+1+(A)=(1001H+20H)= (1021H),内RAM(包括特殊功能寄存器)。 用MOV指令传送 外RAM。用MOVX指令传送 RO
11、M。用MOVC指令传送,三个不同的存储空间用三种不同的指令传送:,4)堆栈操作指令(PUSH/POP)(2条) 表3-6列出了堆栈操作指令、功能操作、机器代码和执行机器周期数。,堆栈是什么?,堆栈是在内部RAM中按“后进先出”的规则组织的一片存储区。,结构: 栈底/栈顶/栈指针,要求: 只能是直接寻址、 操作对象为字节,用途:子程序调用保护现场/数据交换,指令:, PUSH direct,(SP)+1(SP),(direct)(SP), POP direct,(SP)(direct),(SP)-1(SP),压入指令,就是将direct中的内容送入堆栈中,弹出指令,就是将堆栈中的内容送回到dir
12、ect中, PUSH指令使用,先将堆栈指针SP的内容 0FH 加1,指向堆栈顶的一个空单元,此时 SP=10H ;,【例】 : PUSH 30H;(30H)=2BH, (SP)=0FH 具体操作是:, 然后将指令指定的直接寻址单元30H中的数据(2BH)送到该空单元中。, POP指令使用,先将SP所指单元0FH(栈顶地址)中的数据(4CH)弹出,送到指定的内RAM单元40H,(40H)=4CH;,【例】 : POP 40H ; (SP)=0FH 具体操作是:, 然后SP-1SP,SP=0EH,SP仍指向栈顶地址 。,结果:(40H)=4CH, SP=0EH,5)数据交换指令(XCH/XCHD/
13、SWAP)(5条) 表3-7列出了数据交换指令、功能操作、机器代码和执行机器周期数。, XCH A,Rn ; (A)(Rn),n=07 XCH A,Ri ; (A)(Ri),i=0、1 XCH A,direct ; (A)(direct),SWAP A ; A74A30, 字节交换指令, 半字节交换指令,XCHD A,Ri ; A30(Ri)30 高4位不变。i=0、1, 累加器高低四位互换,小练习:,设(SP)=60H,片内RAM的(30H)=24H,(31H)=10H,请填出注释中的结果。 PUSH 30H ; (SP)= ,(SP)= . PUSH 31H ; (SP)= ,(SP)=
14、. POP DPL ; (SP)= ,(DPL)= . POP DPH ; (SP)= ,(DPH)= . MOV A,#00H MOVX DPTR,A 最后的执行结果是 。,61H,24H,62H,10H,61H,10H,60H,24H,将00H送入外RAM 2410H单元,(DPTR)=2410H,数据传送指令练习,1、对程序存储器的读操作只能使用( ) A、指令 B、指令 C、指令 D、指令 2、 若用传送指令访问片内RAM,它的操作码助记符是 ;若用传送指令访问片外RAM,它的操作码助记符是 。 3假设DPTR的内容为8100H,A的内容为40H,执行下类指令:MOVC A,A+DPT
15、R后,送入A的是ROM 单元的内容。 用简单的指令序列完成以下功能: 4、将内RAM 30H单元的内容传送到外RAM 3000H单元中。,D,MOV,MOVX,8140H,MOV A,30H MOV DPTR,#3000H MOVX DPTR,A,算术运算类指令有24种。包括加减乘除四种基本算术指令, 能对8位的无符号数进行直接的运算。表3-9列出了对进位标志位C(也可用Cy表示)、辅助进位标志位AC、溢出标志OV位有影响的所有指令,包括一些非算术类操作的指令。,:表示根据运行结果使该位置位或复位。,表3-9 影响标志位C、OV、AC的指令,2、算术运算类指令,程序状态字寄存器PSW各位的意义
16、:,CY,AC,F0,RS1,RS0,OV,P,奇偶位,进位位,半进位位,用户标志,工作寄存器 选择位,溢出位,算术运算?,高位进位标志位CY,反映:算术运算时,最高位D7向更高位有无进位或借位。,结论: 若有:(CY) = 1;若无:(CY) = 0 。,举例:,半进位标志AC,反映:算术运算时,低半字节向高半字节有无进位或借位 。,结论:若有(AC)= 1;若无(AC)= 0 。,举例:,溢出标志位OV,反映:运算的结果是否发生溢出。,结论:有溢出(OV) = 1;无溢出(OV )= 0。,8位有符号数表示的范围: 原码:-127+127 反码:-127+127 补码:-128+127 运
17、算的结果超过此范围则发生溢出。,现在大多数的计算机中,如果是无符号数,都可以用CY标志来判断其是否溢出; 而如果是有符号数,则需要用OV标志来判断其是否溢出。,举例:,假定:将D6向D7的进位称为C6,将D7向更高位的进位称为C7。,当进行有符号(signed)数加减法运算时,由硬件自动置位或清零。当OV=1时,表示一个数字已经超出了累加器以补码形式表示一个有符号数的范围,即超出了-128+127的范围。,溢出规律: (OV) = (C7 ) ( C6),CY主要用于无符号数的运算,OV主要用于有符号数的运算。,奇偶标志位P,反映:累加器A的内容中1的个数为偶数或奇数。,结论:偶数个1: (P
18、) = 0 奇数个1: (P) = 1, ADD A,Rn ; (A)+(Rn)(A)(n=07) 有进位,(Cy)=1;无进位,(Cy)=0 ADD A,Ri ;(A)+((Ri))(A)(i=0、1) 有进位,(Cy)=1;无进位,(Cy)=0 ADD A,direct ;(A)+(direct)(A) 有进位,(Cy)=1;无进位,(Cy)=0 ADD A,#data ; (A)+data(A) 有进位,(Cy)=1;无进位,(Cy)=0,1、不带Cy加法指令(4条),2、 带Cy加法指令(4条), ADDC A,Rn ;(A)+(Rn)+(Cy)A(n=07) 有进位,(Cy)=1;无
19、进位,(Cy)=0 ADDC A,Ri ;(A)+(Ri)+(Cy)A(i=0、1) 有进位,Cy=1;无进位,Cy=0 ADDC A,direct ;(A)+(direct)+(Cy)A 有进位,Cy=1;无进位,Cy=0 ADDC A,#data ;(A)+data+(Cy)A 有进位,Cy=1;无进位,Cy=0, INC A ;(A)+1A INC Rn ;(Rn)+1Rn,n=07 INC Ri ;(Ri)+1(Ri), i=0、1 INC direct ;(direct)+1(direct) INC DPTR ;(DPTR)+1DPTR,3、 加1指令(5条),4、带借位C减法指令(
20、4条), SUBB A,Rn ; (A)-(Rn)-(Cy)A,(n=07), 有借位,(Cy)=1;无借位,(Cy)=0 SUBB A,Ri ; (A)-((Ri))-(Cy)A,(n=01), 有借位,(Cy)=1;无借位,(Cy)=0 SUBB A,direct; (A)-(direct)-(Cy)A, 有借位,(Cy)=1;无借位,(Cy)=0 SUBB A,#data ; (A)-data-(Cy)A, 有借位,(Cy)=1;无借位,(Cy)=0,5、 减1指令(4条), DEC A ;A-1A DEC Rn ;Rn-1Rn, n=07 DEC Ri ;(Ri)-1(Ri), i=0
21、、1 DEC direct ;(direct)-1(direct),加1减1指令涉及A时,会影响P,但不影响其他标志位。,6、十进制(BCD码)调整指令(1条),DA A,功能:对加法运算结果进行BCD码调整。,十进制调整: (DA A 1条) 用于两个BCD码之间的相加,这条指令只能跟在 ADD 或 ADDC 之后,BCD码是什么?,用二进制表示的十进制数,4个二进制位就可以表示一位BCD码: 00001001 可表示十进制数(BCD数) 09; 8个二进制位就可以表示两位压缩的BCD码: 0000000010011001 表示 0099。,DIV AB ;(AB)商A,余数B (Cy)=0
22、,(OV)=0,7、 乘除法指令(1条 + 1条),MUL AB ; ABBA, ANL A,Rn ;ARnA ANL A,Ri ;A(Ri)A ANL A,#data ;AdataA ANL A,direct ;A(direct)A ANL direct,A ;(direct)Adirect ANL direct,#data;(direct)datadirect,1、逻辑“与”运算指令(6条),只有相“与”的两位都是1,结果才是1;否则,“与”的结果为0,3、逻辑运算指令,2、 逻辑“或”运算指令(6条), ORL A,Rn ;ARnA ORL A,Ri ;A(Ri)A ORL A,#dat
23、a ;AdataA ORL A,direct ;A(direct)A ORL direct,A ;(direct)Adirect ORL direct,#data;(direct)datadirect,只要相“或”的两位有一位是1,结果就是1;否则,结果为0, 逻辑“异或”运算指令(6条), XRL A,Rn ;A RnA XRL A,Ri ;A(Ri)A XRL A,#data ;A dataA XRL A,direct ;A(direct)A XRL direct,A ;(direct) Adirect XRL direct,#data;(direct) datadirect,只有相“异或
24、”的两位不相同,结果才是1;否则,结果为0, CLR A ;0A(将累加器A里的内容全部变为0) CPL A ;AA (将累加器A里的内容逐位取反), 清零和取反指令(2条),按位取反,原来是“0”的位变为“1”;原来是“1”的位变为“0”,若(A)=A5H,分别执行:(1)CLR A; (2) CPL A,5、 循环移位指令(4条), 循环左移:RL A, 带Cy循环左移:RLC A, 循环右移:RR A, 带Cy循环右移:RRC A,循环移位指令动画,4、控制转移指令,控制转移类指令: 1、无条件转移; 2、条件转移; 3、调用与返回; 4、空操作,1、 无条件转移指令(4条),1)、长转
25、移指令 LJMP addr16 ; addr150PC,例: LJMP AAAAH,(PC)=AAAAH,2)、绝对转移指令 AJMP addr11 ; (PC)+2PC PC指向AJMP的下一条指令, addr100PC100, PC1511不变,3)、 相对转移指令 SJMP rel ;(PC)+2PC, (PC)+relPC 目的地址=源地址+2+rel,说明:(1)相对偏移量 rel,rel 是一个带符号的偏移字节数(补码表示) (00H7FH对应表示0 127,80HFFH对应表示1281); 负数表示反向转移,正数表示正向转移。 (2) rel 可以是一个转移目标地址的标号,由汇编
26、程序在汇编过程中自 动计算偏移地址,并填入指令代码中。,4)、间接转移指令 JMP A+DPTR ;(A)+(DPTR)PC,转移地址由数据指针DPTR的16位数和累加器A的8位数进行无符号数相加形成,并直接装入PC。,LJMP、AJMP、SJMP三条无条件转移指令的区别:, 转移范围不一样。 LJMP转移范围是64KB; AJMP转移范围是与当前PC值同一2KB; SJMP转移范围是当前PC-128B+127B。 使用AJMP和SJMP指令应注意转移目标地址是否在转移范围内,若超出范围,程序将出错。, 指令字节不一样。 LJMP是3字节指令; AJMP、SJMP是2字节指令。,2、 条件转移
27、指令(13条),条件转移指令根据判断条件可分为: 1)、累加器A判零转移 2)、比较条件转移指令 3)、减1非0转移 满足条件,则转移; 不满足条件,则程序顺序执行。,1)、累加器A判零转移(2条),指令的功能: 对累加器A的内容为 0 和不为 0 进行检测并转移。,判定:当不满足各自的条件时,程序继续往下执行。 当各自的条件满足时,程序转向指定的目标地址。,jump if (not) zero,2)、 比较不相等转移指令(4条),功能:对指定的目的字节和源字节进行比较。,判定:若它们的值不相等则转移, 转移的目标地址=(当前的PC值)+3+(偏移量rel),Compare and Jump
28、if Not Equal,3)、减1非0转移指令(2条),功能:指令每执行一次,便将目的操作数的循环控制单元的内容减1,并判其是否为 0。,判定:若不为0,则转移到目标地址继续循环; 若为0,则结束循环,程序往下执行。,Decrement and Jump if Not Zero,例 有一段程序如下: MOV 23H,#0AH CLR A LOOPX:ADD A,23H DJNZ 23H,LOOPX SJMP $ 该程序执行后, (A)=?,(A)=10+9+8+7+6+5+4+3+2+1=37H,小结:条件转移:(JZ,JNZ,CJNE,DJNZ8条),JZ rel JNZ rel,DJNZ
29、 direct, rel DJNZ Rn, rel,根据Acc的内容是否为0决定是否跳转,将direct(或Rn)里的内容减 1, 结果不等于0就跳转; 等于0则不跳转继续执行程序,将A(或Ri,或Rn)与#data(或direct)相比较, 其值不相等就跳转; 相等则不跳转,继续执行程序,CJNE A, #data, rel CJNE A, direct, rel CJNE Ri, #data, rel CJNE Rn, #data, rel,3、调用和返回指令,判定:目标地址的形成方式与AJMP和LJMP相似。,功能:可以实现子程序的短调用和长调用。,1)、调用指令,返回指令有子程序返回和
30、中断返回两种。,2)、返回指令,RET指令的功能:从堆栈中弹出由调用指令压入堆栈保护的断点地址, 并送入指令计数器PC,从而结束子程序的执行。 程序返回到断点处继续执行。,RETI指令的功能:专用于中断服务程序返回的指令, 除正确返回中断断点处执行主程序以外, 并有清除内部相应的中断状态寄存器(以保证正确的中断逻辑)的功能。,小结:子程序调用及返回:(LCALL,ACALL,RET,RETI4条),LCALL addr16 子程序长调用指令,ACALL addr11 子程序绝对调用指令,RET 子程序返回指令,RETI 中断服务子程序返回指令,中断结束/返回被打断处的下一条指令,子程序结束并返回调用的下一条指令,可在指令所在的2K范围内调用子程序,可在64K范围内调用子程序,4、空操作指令(1条),NOP为单机器周期指令,在时间上占用一个机器周期,常用于时间“微调”。 该指令在执行时间上要消耗1个机器周期,在存储空间上可以占用一个字节。因此,常用来实现较短时间的延时。,NOP ;(PC)+1PC,四、位操作指令,位操作: 以位为单位进行的各种操作。,位操作指令中,位累加器用字符“C”表示 。,主要有: 位传送 位状态设置 位逻辑运算 位判跳(条件跳转), MOV C,bit ;(bit)Cy
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2030年中国工程招标代理行业市场发展分析及前景趋势预测究报告
- 安职院水利工程管理技术课件01土石坝的监测与维护-7土石坝监测资料整编与分析
- 鼻饲患者的护理措施及宣教
- 焦虑障碍护理查房
- 药物疗效评估研究方案
- 放射健康职业管理办法
- 政务大厅烟花管理办法
- 新沂物业收费管理办法
- 新闻传播危机管理办法
- 步完善科技项目管理办法
- 叉车技能大赛方案
- 森林法应知应会知识考试题库及答案
- 国开大学2023年01月22503《学前儿童健康教育活动指导》期末考试答案
- 建筑工地九牌一图内容仅供参考模板
- 2023年江西九江市湖口县司法局招聘司法行政辅助人员笔试备考试题及答案解析
- 仪器校准报告
- 四川电大媒体辅助英语教学媒体形考任务02标准答案
- 工程项目周转材料管理办法充分发挥周转材料使用价值
- 发热性疾病处理思路
- 12J4-1 《常用门窗》标准图集
- YY/T 0664-2020医疗器械软件软件生存周期过程
评论
0/150
提交评论