单片机指令系统.ppt_第1页
单片机指令系统.ppt_第2页
单片机指令系统.ppt_第3页
单片机指令系统.ppt_第4页
单片机指令系统.ppt_第5页
已阅读5页,还剩108页未读 继续免费阅读

VIP免费下载

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

文档简介

,第3章 MCS - 51单片机指令系统,3.1 汇编语言 3.2 寻址方式 3.3 指令系统,3.1 汇编语言,3.1.1 指令、指令系统、程序设计语言 指令:是CPU根据人的意图来执行某种操作的命令。 指令系统:一台计算机所能执行的全部指令的集合。 要使计算机按照人的思维完成一项工作,就必须让CPU按顺序执行各种操作,即一步步地执行一条条的指令。这种按人的要求编排的指令操作序列称为程序。编写程序的过程叫做程序设计。 程序设计语言是实现人机交换信息的最基本工具,可以分为机器语言、汇编语言、高级语言。,机器语言:是以二进制代码来描述指令功能的语言,计算机只能识别二进制代码。 汇编语言:是用助记符、符号和数字等来表示指令的程序语言。汇编语言是便于人们识别、记忆、理解和使用的一种指令形式,它和机器语言指令一一对应,也是由计算机的硬件特性所决定的。 例如:“10+20”的例子可写成: 汇编语言程序 机器语言程序 MOV A,#0AH 74 0AH ADD A,#14H 24 14H,现在描述计算机指令系统及实际应用中主要采用汇编语言形式。采用机器语言编写的程序称之为目标程序。采用汇编语言编写的程序称之为源程序。计算机能够直接识别并执行的只有机器语言。汇编语言程序不能被计算机直接识别并执行,必须经过一个中间环节把它翻译成机器语言程序,这个中间过程叫做汇编。汇编有两种方式:机器汇编和手工汇编。机器汇编是用专门的汇编程序,在计算机上进行翻译;手工汇编是编程员把汇编语言指令逐条翻译成机器语言指令。现在主要使用机器汇编,但有时也用到手工汇编。,3.1.2 指令格式 MCS-51单片机指令系统具有功能强、指令短、执行快等特点,共有111条指令。从功能上可划分成数据传送、算术操作、逻辑操作、控制程序转移、位操作等五大类;从空间属性上分为单字节指令(49条)、双字节指令(46条)和最长的三字节指令(只有16条)。从时间属性上可分成单机器周期指令(64条)、双机器周期指令(45条)和只有乘、除法两条4个机器周期的指令。,指令系统中的指令描述了不同的操作,不同操作对应不同的指令。在结构上,每条指令通常由操作码和操作数两部分组成。操作码表示计算机执行该指令将进行何种操作,操作数表示参加操作的数的本身或操作数所在的地址。MCS-51单片机的指令有无操作数、单操作数、双操作数三种情况。一条汇编语言指令中最多包含 4 个区段, 其格式如下所示: 标号: 操作码 操作数 ;注释 4 个区段之间要用分隔符分开: 标号与操作码之间用“: ”隔开, 操作码与操作数之间用空格隔开, 操作数与注释之间用“;”隔开, 如果操作数有两个以上, 则在操作数之间要用逗号“,”隔开 (乘法指令和除法指令除外 )。,1. 单字节指令(49条) 单字节指令中的8位二进制代码既包含了操作码信息,也包含了操作数的信息。 a.指令码中隐含着对某个寄存器的操作,例如: CLR AE4H b.指令码中rrr三位指定了某个寄存器,例如: MOV A,Rn 2. 双字节指令(46条) (11101rrr) 双字节指令由两个字节组成, 一个字节表示操作码,另一个字节表示操作数或操作数所在的地址, 其指令格式: 操作码助记符 立即数或地址 例如: MOV A, 10H74H 10H 3. 三字节指令(16条) 三字节指令中, 第一个字节为操作码, 后两个字节为操作数或操作数所在的地址, 其指令格式: 操作码助记符 目的操作数源操作数 例如: MOV 40H, 30H75H 40H 30H,3.2 寻址方式,所谓寻址方式, 就是寻找操作数地址的方式, 在用汇编语言编程时, 数据的存放、传送、 运算都要通过指令来完成。 编程者必须自始至终都要十分清楚操作数的位置, 以及如何将它们传送到适当的寄存器去参与运算。每一种计算机都具有多种寻址方式。,3.2.1寻址方式中常用的符号注释 Rn当前选定的工作寄存器组R0R7, 即n=07。 Ri当前选定的寄存器区中可作为地址指针的 2 个寄存器R0、 R1, i=0、1。 data8位立即数,即包含在指令中的 8 位常数。 data1616位立即数,即包含在指令中的 16 位常数。 direct 8 位内部RAM单元的地址, 它可以是一个内部数据区 RAM单元(00H7FH)或特殊功能寄存器地址(I / O端口、 控制寄存器、 状态寄存器 80H0FFH)。 addr1616 位的目的地址, 用于LJMP, LCALL指令, 可指向 64 KB程序存储器地址空间。,addr1111位的目的地址, 用于AJMP, ACALL指令。目的地址必须与下一条指令的第一个字节在同一个 2 KB程序存储器地址空间之内。 rel 8 位带符号的偏移量字节, 用于SJMP和所有条件转移指令中。 偏移量相对于下一条指令的第一个字节计算, 在128+127 范围内取值。 bit内部数据RAM或特殊功能寄存器中的可直接寻址位。 rrr 工作寄存器地址,rrr=000111对应R0R7。 DPTR数据指针, 可用作 16 位的地址寄存器。,A累加器。 B寄存器, 用于 MUL和 DIV指令中。 C进位标志或进位位。 间接寻址寄存器或基址寄存器的前缀, 如Ri, DPTR。 /位操作数的前缀, 表示对该位取反后再参与操作,但不影响该位原值。 (X) X中的内容。 (X) 由 X寻址的单元中的内容。 指令操作流程,箭头右边的内容被箭头左边的内容所代替。,3.2.3 7种寻址方式 在 MCS -51单片机指令系统中, 有以下 7种寻址方式: (1)寄存器寻址; (2) 直接寻址; (3)立即寻址; (4) 寄存器间接寻址; (5) 基址寄存器加变址寄存器间接寻址; (6) 相对寻址; (7) 位寻址。,1. 寄存器寻址 在该寻址方式中, 参加操作的数存放在寄存器里。寄存器包括8个工作寄存器R0R7, 累加器A, 寄存器B、数据指针DPTR和布尔处理器的位累加器C。例如: MOV A,R0 ;(R0) A “INC Rn”指令机器码格式为00001rrr。若rrr=010B,则Rn=R2,即 INC R2 ; (R2)+1 R2,表 3 1低3位操作码与寄存器Rn的对应关系,指令功能:将R2工作寄存器的内容加1后送回R2。如果(R2)=24H,且选定的工作寄存器组为第1组(RS1RS0=01B)。这该指令的执行过程为:,图 3 1寄存器寻址方式,2. 直接寻址 在指令中直接给出操作数的地址(片内RAM单元的地址), 这种寻址方式就属于直接寻址方式。在这种方式中, 指令的操作数部分直接是操作数的地址。 例如:MOV A,40H;(40H)A (E5H 40H),图 3 2直接寻址方式,在MCS -51 单片机指令系统中, 直接寻址方式中可以访问 2 种存储器空间: (1) 内部数据存储器的低 128 个字节单元(00H7FH)。 (2) 特殊功能寄存器既可以使用它们的地址,也可以使用它们的名字。例如: MOV A,P1 MOV A, 90H;(P1口)A :累加器A、Acc和E0H等三种形式,分属于两种不同的寻址方式,但指令的执行效果是完全相同的。例如: INC A(机器码04H,属于寄存器寻址)、INC Acc和INC 0EH (机器码05E0H,属于直接寻址)。 直接寻址的地址占一个字节,所以,一条直接寻址方式的指令至少占内存两个单元。,3. 立即寻址 立即寻址方式是指操作数包含在指令字节中。 跟在指令操作码后面的数就是参加运算的数, 该操作数称为立即数。 用“#”号表示。立即数有一字节和二字节两种可能, 例如指令: MOV A, 3AH ;3AH A(74H 30H) MOV DPTR, 0DFFFH (90H DFH FFH) 上述两条指令均为立即寻址方式, 第一条指令的功能是将立即数 3AH送累加器A中, 第二条指令的功能是将立即数 0DFFFH送数据指针DPTR中(0DFHDPH, 0FFHDPL)。,4. 寄存器间接寻址 在这种寻址方式中, 寄存器的内容为操作数的地址。 寄存器间接寻址只能使用寄存器R0、R1 作为地址指针,寻址内部RAM区的数据; 当访问外部RAM时, 可使用R0、 R1及DPTR作为地址指针。寄存器间接寻址符号为“”。 :(1)Ri可用于寻址片内RAM007FH和片外RAM00FFH的空间; DPTR可寻址片外64KB区域。 (2)寄存器间址指令Ri不能寻址SFR,下面指令不能访问SP: MOV R0,81H MOV A, R0,例如: 将片内RAM65H单元的内容47H送入A中,指令为: MOV A,R0 ;(R0) A (E6H) 其中R0中的内容为65H。,图 3 3寄存器间接寻址方式,5.变址寻址(基址寄存器变址寄存器间接寻址) 变址寻址是以基址寄存器DPTR或PC的内容为基本地址,加上变址寄存器A的内容作为操作数的地址。其中A的内容为8位无符号数。这种寻址方式只能访问程序存储器,多用于查表操作,但不能改写数据表格的内容。例如: MOVC A, A+DPTR;(A)+(DPTR)A,图 3 4变址寻址方式,6. 相对寻址 相对寻址是指以当前程序计数器的PC值加上指令中给出的偏移量rel,构成实际的转移地址。它用于访问程序存储器,只出现在相对转移指令中。一般将相对转移指令操作码所在的地址称为源地址,转移后的地址称为目的地址。 在使用相对寻址时要注意以下两点: (1) 当前PC值是指相对转移指令操作码所在的地址(源地址)加上该指令的字节数。例如:JZ rel (60 rel)是一条累加器A为零就转移的双字节指令。若该指令的存储地址为2050H,则执行该指令时的当前PC值即为2052H。即当前PC值是指该相对转移指令取指结束时的值。,(2) 偏移量rel是有符号的单字节数。以补码表示,其值的范围是-128+127(00HFFH),负数表示目的地址小于源地址,正数表示目的地址大于源地址。所以,相对转移指令满足条件后,转移的地址(目的地址)为: 目的地址=当前PC值+rel = 源地址+指令字节数+rel 相对寻址的寻址空间为:程序存储器相对转移指令的PC当前值的256B范围内。,例如:执行指令“JC rel”,设rel=75H,CY=1。 指令的机器码为4075H,存储单元地址为1000H和1001H。,图 3 5变址寻址方式,7. 位寻址 位寻址是在位操作指令中直接给出位操作数的地址。 位地址在指令中用bit表示,如“CLR bit”。 寻址空间:片内RAM中202FH的16个单元的128位;字节地址能被8整除的特殊功能寄存器SFR,共93位进行寻址。 位地址的两种表示方式 : a.直接使用位地址,如“CLR D3H”; b.对于SFR,可以直接用寄存器名字加位数表示,如“CLR PSW.3”等。,3.2.3 寻址空间 表概括了每种寻址方式可涉及的存储器空间。,表 3 2操作数寻址方式和有关空间,3.3 指令系统,3.2.1 指令分类,按指令的功能, MCS -51 指令系统可分为下列 5 类: (1) 数据传送类指令; (2) 算术运算类指令; (3) 逻辑运算类指令; (4) 控制转移类指令; (5) 位操作指令。,3.3.1 数据传送类指令 所谓“传送”,是把源地址单元的内容传送到目的地址单元中去,而源地址单元内容不变;或者源、目的单元内容互换。 其格式如下: MOV ,;源操作数(或单元) 目的操作数单元 操作码助记符是“MOV“,目的操作数和源操作数不同寻址方式的组合就派生出该类的全部指令。,1. 以累加器A为目的操作数的指令(4条) 汇编指令格式 机器码格式 操作 MOV A, Rn ;11101rrr (Rn) A MOV A, direct ;E5 direct (direct) A MOV A, Ri ;1110011i (Ri) A MOV A, data ;74 data #data A 这组指令的功能是:把源操作数的内容送入累加器A。例如: MOV A, 10H, 该指令执行时将立即数 10H送入累加器A中。 :此类指令操作只会影响PSW的P位。,2. 以工作寄存器Rn为目的操作数的指令(3条) 汇编指令格式 机器码格式 操作 MOV Rn, A ;11111rrr (A) Rn MOV Rn, direct ;10101rrr direct (direct) Rn MOV Rn, data ;01111rrrdata data Rn 这组指令的功能是: 把源操作数的内容送入当前工作寄存器区的R0R7中的某一个寄存器。指令中Rn在内部数据存储器中的地址由当前的工作寄存器区选择位RS1、RS0 确定, 可以是 00H07H、08H0FH、10H17H、18H1FH。 例如: MOV R0, A, 若当前RS1、RS0 设置为 00 (即工作寄存器 0 区), 执行该指令时,将累加器A中的数据传送至工作寄存器R0(内部RAM 00H)单元中。,3. 以直接地址为目的操作数的指令(5条) 汇编指令格式 机器码格式 操作 MOV direct, A ;F5 direct (A) direct MOV direct, Rn ;10001rrrdirect (Rn) direct MOV direct, direct1 ; 85 direct1 direct (direct1) direct MOV direct, Ri ;1000011idirect (Ri) direct MOV direct, data ;75 direct1 #data #data direct 这组指令的功能是把源操作数所指定的内容送入由直接地址direct所指出的片内存储单元中。 : “MOV direct, direct1”指令在译成机器码时,源地址在前,目标地址在后。,4. 以间接地址为目的操作数的指令(3条) 汇编指令格式 机器码格式 操作 MOV Ri, A ;1111011i (A) (Ri) MOV Ri, direct ;1010011idirect (direct) (Ri) MOV Ri, data ;0111011i data #data (Ri) : (Ri)表示Ri中的内容为指定的片内RAM低128字节单元,不能指定高128字节的SFR。,5. 16位数据传送指令(1条) 汇编指令格式 机器码格式 操作 MOV DPTR, data16 ;90dataHdataL #dataDPTR 这是唯一的16位立即数传送指令,其功能是把16位常数送人DPTR。DPTR由DPH和DPL组成。这条指令执行的结果是,将高8位立即数dataH送人DPH,低8位立即数dataL送人DPL。在译成机器码时,也是高位字节在前,低位字节在后。如“MOV DPTR,#1234H”的机器码是901234H“,执行结果为:,6.查表指令(2条) 汇编指令格式 机器码格式 操作 MOVC A, A+PC ;83H 先(PC)+1PC,后(A)+(PC) A MOVC A, A+DPTR ;93H 先(PC)+1PC,后(A)+(DPTR) A 这是两条很有用的查表指令, 可用来查找存放在程序存储器中的常数表格。第一条指令是以PC作为基址寄存器, A内的8位无符号数和 PC的内容 ( 下一条指令的起始地址)相加后得到一个 16 位地址, 并将该地址指出的程序存储器单元的内容送到累加器A。 这条指令的优点是不改变特殊功能寄存器和PC的状态, 只要根据A的内容就可以取出表格中的常数。缺点是表格只能放在该条查表指令后面的 256 个单元之中, 表格的大小受到限制, 而且表格只能被一段程序所利用。称近程查表。,执行程序: 1000H:MOV A,#0DH ;(740DH) 0DH A,查表的偏移量 1002H:MOVC A, A+PC ;(83H) (0DH+1003H) A 1003H:MOV R0,A ; (F8H) (A) R0 结果为(A) =02H, (R0) =02H, (PC) =1004H。,例如:在程序存储器中,数据表格为:,第二条指令是以DPTR作为基址寄存器, 累加器A的内容作为无符号数与DPTR内容相加, 得到一个 16 位的地址, 并把该地址指出的程序存储器单元的内容送到累加器A。这条指令的执行结果只与指针DPTR及累加器A的内容有关, 与该指令存放的地址无关, 因此, 表格的大小和位置可以在 64 KB程序存储器中任意安排, 并且一个表格可以为各个程序块所共用,称为远程查表。 若DPTR已赋值待用,装入新值前必须保存其原值,可用栈操作指令保存。,执行程序: 1000H:MOV A,#10H ;10H A,查表的偏移量 1002H:PUSH DPH ;DPH 入栈 1004H:PUSH DPL ; DPL 入栈 1006H:MOV DPTR,#7000H ;7000H DPTR 1009H:MOVC A, A+DPTR ;(10H+7000H) A 100AH:POP DPL ;DPL 出栈 100CH:POP DPH ; DPH 出栈 结果为(A) =02H, (PC) =100EH , (DPTR) =原值。,例如:在程序存储器中,数据表格为:,7. 累加器A与外部数据存储器RAM之间的传送指令(4条) 汇编指令格式 机器码格式 操作 MOVX A, Ri ;1110001i (Ri) A,且使RD=0 MOVX A, DPTR ;E0 H (DPTR) A,且使RD=0 MOVX Ri, A ;1111001i (A) (Ri) ,且使WR=0 MOVX DPTR, A ;F0H (A) (DPTR) ,且使WR=0 这组指令是:在累加器A与外部数据存储器RAM单元或I/O口之间进行数据传送, 前两条指令执行时, P3.7 引脚上输出RD有效信号, 用作外部数据存储器的读选通信号; 后两条指令执行时, P3.6 引脚上输出WR有效信号, 用作外部数据存储器的写选通信号。,DPTR为16位地址指针,所包含的16位地址信息由 P0 (低 8 位)和P2(高 8 位)输出, 而数据信息由P0 口传送, P0 口作分时复用的总线。寻址范围达64KB。 由Ri作为间接寻址寄存器时, P0 口分时输出Ri指定的 8 位地址信息及传输 8 位数据。此时,P2口可作为通用I/O。寻址范围达256B。 MCS-51单片机没有专门的输入/输出指令,它只能用这种方式与外部设备打交道。,8. 栈操作指令(2条) 汇编指令格式 机器码格式 操作 1)PUSH direct ; E0direct 先(SP)+1SP,后(direct) (SP) 2)POP direct ;D0direct 先(SP) direct,后(SP)-1 (SP) 在特殊功能寄存器中有一个堆栈指针SP, 它指出栈顶的位置。 压栈指令的功能是: 首先将堆栈指针SP的内容加1, 然后将直接地址所指出的内容送入SP指出的内部RAM单元; 出栈指令的功能是: 将SP所指出的内部RAM单元的内容送入由直接地址所指出的字节单元, 接着将堆栈指针SP的内容减 1。 :这两条指令不影响标志位。栈操作指令是直接寻址指令,注意指令的书写格式。,例如: 进入中断服务子程序时, 把程序状态寄存器PSW、 累加器A、 数据指针DPTR进栈保护。设当前SP为 60H。则程序段 PUSH PSW PUSH ACC PUSH DPL PUSH DPH 执行后, SP内容修改为 64H, 而61H、62H、63H、64H单元中依次栈入PSW、A、DPL、DPH的内容。当中断服务程序结束之前, 如下程序段(SP保持 64H不变),POP DPH POP DPL POP ACC POP PSW 执行之后, SP内容修改为 60H, 而64H、 63H、 62H、 61H单元中的内容依次弹出到DPH、DPL、A、PSW中。 MCS -51 提供一个向上升的堆栈, 因此SP设置初值时要充分考虑堆栈的深度, 要留出适当的单元空间, 满足堆栈的使用。,9. 交换指令(4条) 1)字节交换指令 汇编指令格式 机器码格式 操作 XCH A, Rn ;11001rrr (A) (Rn) XCH A, direct ;11000101direct (direct) (A) XCH A, Ri ;1100011i (A) (Ri) 这三条指令是将累加器A的内容与所指定的工作寄存器Rn内容、直接寻址或间接寻址的单元内容相互交换。,图 3 7 字节交换操作,2)半字节交换指令 汇编指令格式 机器码格式 操作 XCHD A, Ri ;1101011i (A03) (Ri) 03) 这条指令是半字节交换指令, 是将累加器 A内容的低 4 位和Ri间接寻址所指出的内部RAM单元内容的低 4 位相互交换。高4位内容不变。该操作只影响标志位P。,图 3 8 字节交换操作,表 3.3 数据传送类指令一览表,表 3.3 数据传送类指令一览表,3.3.2 算术运算类指令 算术运算类指令共有24条, 可分为加法、 带进位加法、 带借位减法、乘法、除法、加1、减1及十进制调整指令共8组。 它主要完成加、 减、 乘、 除四则运算, 以及增量、 减量和二十进制调整操作, 对8位无符号数可进行直接运算; 借助溢出标志, 可对带符号数进行2的补码运算; 借助进位标志, 可进行多字节加减运算, 也可以对压缩BCD码(即单字节中存放两位BCD码)进行运算。 算术运算结果将使进位CY、半进位AC、溢出位OV三个标志位置1或清0,只有加1和减1指令不影响这些标志位。,1. 加法类指令(4条) 汇编指令格式 机器码格式 操作 ADD A, Rn ;00101rrr (A) + (Rn) A ADD A, direct ;25direct (A) + (direct) A ADD A, Ri ;0010011i (A) + (Ri) A ADD A, data ;24 data (A) + #data A 上述指令的执行结果将影响标志位CY、AC、OV、P。当“和”的第7位和第3位有进位时,分别将CY和AC标志位置1,否则清0。OV=C7C6。,这4条指令使得累加器A可以和内部RAM的任何一个单元的内容进行相加, 也可以和一个8位立即数相加, 相加结果存放在A中。 无论是哪一条加法指令, 参加运算的都是两个8位二进制数。 对用户来说, 这些8位数可当作无符号数(0255), 也可以当作带符号数(-128+127), 即补码数。 例如: 对于二进制数11010011, 用户可认为它是无符号数, 即为十进制数211, 也可以认为它是带符号数, 即为十进制负数-45。若是带符号运算,要考虑溢出标志位OV。 但计算机在作加法运算时, 总按以下规定进行:,例如: 120 和 100 之和为 220, 显然大于 127, 相加时,0 1 1 1 1 0 0 0 120 0 1 1 0 0 1 0 0 100 1 1 0 1 1 1 0 0 220,+,符号位(最高位)由 0 变 1, 两个正数相加结果变负, 实际上它是和数的最高位, 符号位移入了进位标志, 此时位 6 有进位而位 7 无进位, 置位溢出标志OV, 结果溢出。,同样, 120和100 相加, 结果应为220, 显然小于128, 相加时,1 0 0 0 1 0 0 0 -120 1 0 0 1 1 1 0 0 -100,+,1 0 0 1 0 0 1 0 0 -220,符号位由1变为0, 两个负数相加结果变为正数, 这是因为符号位移入进位标志, 位 6 无进位而位 7 有进位, 置位溢出标志OV, 由此可判断结果溢出。,2. 带进位加法指令(4条) 汇编指令格式 机器码格式 操作 ADDC A, Rn ;00111rrr (A) +CY+ (Rn) A ADDC A, direct ;35direct (A) +CY + (direct) A ADDC A, Ri ;0011011i (A) +CY + (Ri) A ADDC A, data ;34 data (A) +CY + #data A 这组指令的功能与普通加法指令类似, 唯一的不同之处是, 在执行加法时, 还要将上一次进位标志CY的内容也一起加进去, 对于标志位的影响也与普通加法指令相同。 本指令常用于多字节加法。,3. 带借位减法指令(4条) 汇编指令格式 机器码格式 操作 SUBB A, Rn ;10011rrr (A) CY(Rn) A SUBB A, direct ;95direct (A) CY (direct) A SUBB A, Ri ;1001011i (A) CY (Ri) A SUBB A, data ;94 data (A) CY #data A 这组指令的功能是: 将累加器A的内容与源操作数及进位位CY的值相减, 结果送回到累加器A中。 在执行减法过程中,如果位7(D7)有借位, 则进位标志CY置“1”, 否则清“0”; 如果位 3(D3)有借位, 则辅助进位标志AC置“1”, 否则清“0”; 如位 6 有借位而位 7 没有借位, 或位 7 有借位而位 6 没有借位, 则溢出标志OV置“1”, 否则清“0”。 若要进行不带借位的减法操作, 则必须先将CY清“0”。,4. 乘法指令(1条) 乘法指令完成单字节的乘法, 只有一条指令: 汇编指令格式 机器码格式 操作 MUL AB ;A4H (A) *(B) (B)158 (A) 70 这条指令的功能是: 将累加器A的内容与寄存器B的内容相乘, 乘积的低 8 位存放在累加器A中, 高 8 位存放于寄存器B中。如果乘积超过0FFH, 则溢出标志OV置“1”, 否则清“0”。 进位标志CY总是被清“0”。,5.除法指令(1条) 除法指令完成单字节的除法, 只有一条指令: 汇编指令格式 机器码格式 操作 DIV AB ;84H (A)/(B) 商放A,余数放B 这条指令的功能是: 将累加器 A中的内容除以寄存器B中的8位无符号整数, 所得商的整数部分存放在累加器A中, 余数部分存放在寄存器 B中, 清“0”进位标志CY和溢出标志OV。 若原来B中的内容为 0, 则执行该指令后A与B中的内容不定, 并将溢出标志OV置“1”。在任何情况下, 进位标志CY总是被清“0”。,6. 加1指令(5条) 汇编指令格式 机器码格式 操作 INC A ;04H (A) + 1 A INC Rn ;00001rrr (Rn) +1 Rn INC direct ;05direct (direct) +1 direct INC Ri ;0000011i (Ri) +1 (Ri) INC DPTR ;A3H (DPTR) +1DPTR 这组指令的功能是:将指令中操作数所指出的单元内容加1。若原来的内容为0FFH, 则加 1 后将产生溢出, 使操作数的内容变成00H, 但不影响任何标志。最后一条指令是对16 位的数据指针寄存器DPTR执行加 1 操作, 指令执行时, 先对低 8 位指针 DPL的内容加 1, 当产生溢出时就对高 8 位指针DPH加 1, 但不影响任何标志。,7. 减1指令(4条) 汇编指令格式 机器码格式 操作 DEC A ;14H (A) - 1 A DEC Rn ;00011rrr (Rn) -1 Rn DEC direct ;15direct (direct) -1 direct DEC Ri ;0001011i (Ri) -1 (Ri) 这组指令的功能是:将指令中操作数所指出的单元内容减1。若原来的内容为00H, 则减 1 后将产生溢出, 使操作数的内容变成0FFH, 但不影响任何标志。,8. 十进制调整指令(1条) 汇编指令格式 机器码格式 操作 DA A ;D4H 将累加器的内容调整为BCD数 这条指令跟在ADD、 ADDC指令之后,将相加后存放在累加器A中的结果进行十进制调整, 实现十进制加法运算功能。且只能用于压缩BCD数相加结果的调整。 本指令是对累加器A中的BCD数的加法结果进行调整。两个压缩型BCD数按二进制相加后,必须经本指令调整才能得到压缩型BCD数的和的正确值。 :它只能跟在加法指令之后, 不能对直接减法指令的结果进行调整。若两BCD数相减,则应将减数先化为100的补数,两数相加,再用“DA A”调整。且其结果不影响溢出标志位。,执行该指令时:判断 A中的低 4 位是否大于 9 和辅助进位标志 AC是否为“1”, 若两者有一个条件满足, 则低 4 位内容加 6 ,以得到低 4 位正确的BCD数值。 同样, A中的高4位大于9或进位标志CY为“1”两者有一个条件满足时, 高4位加6。如果加6调整后,高4位产生进位,则置位CY;反之,不清除CY。如果CY为1,表示和的BCD数100。这对多字节十进制加法有用,不影响OV标志。 若AC=1,CY=1同时发生(8999188),或者高4位虽等于9但低4位修正后有进位,则A应加66H修正(4359102)。 由此可见,执行“DA A”后,CPU根据累加器A的原始值和PSW的状态,由硬件自动对累加器A进行加06H、60H或66H的操作。,例如:设累加器A内容为01010110B(56的BCD数),寄存器R3内容为01100111B(67的BCD数),CY内容为1。程序如下: ADDC A, R3 DA A 第一条指令执行带进位的纯二进制加法,相加后累加器A的内容为0BEH; 结果不是BCD数124,且CY=0,AC=0;然后执行“DA A”, 因为高4位值为11,大于9,低4位值为14,也大于 9, 因此内部要进行加66操作, 结果为124的BCD数。即,0 1 0 1 0 1 1 0 56 0 1 1 0 0 1 1 1 67 0 0 0 0 0 0 0 1 01,1 0 1 1 1 1 1 0 BE 0 1 1 0 0 1 1 0 66,+,+,1 0 0 1 0 0 1 0 0 124,表 3.4 算术运算指令,表 3.4 算术运算指令,表 3.5 影响标志位的指令,表 3.6 影响标志位的指令,3.3.3 逻辑操作类指令 逻辑操作指令可以对两个8位二进制数进行与、或、非和异或等逻辑运算、常用来对数据进行逻辑处理,使之适合于传送、存储和输出打印等。在这类指令中,除了以累加器A为目标寄存器指令外,其余指令均不会改变PSW中的任何标志位。,1. 简单操作指令 1)累加器A清0指令 汇编指令格式 机器码格式 操作 CLR A ;E4H 0 A 对累加器A清“0”,只影响标志位P。 2)累加器A取反指令 汇编指令格式 机器码格式 操作 CPL A ; F4H (A) A 对累加器A按位取反,不影响标志位。,2. 移位指令 1)累加器A循环左移指令 汇编指令格式 机器码格式 操作 RL A ;23H 2)累加器A循环右移指令 汇编指令格式 机器码格式 操作 RR A ; 03H 3)累加器A连同进位位循环左移指令 汇编指令格式 机器码格式 操作 RLC A ;33H 4)累加器A连同进位位循环右移指令 汇编指令格式 机器码格式 操作 RRC A ; 13H 通常用“RLC A”指令将累加器A的内容作乘2运算。,3. 累加器半字节交换指令 汇编指令格式 机器码格式 操作 SWAP A ;C4H (A03) (A47) 这条指令的功能是将累加器A的高低两个半字节交换。 例如(A)=FAH。 执行指令“SWAP A”的结果为(A)=AFH。,4. 逻辑”与”指令 汇编指令格式 机器码格式 操作 ANL A, Rn ; 01011rrr (A) (Rn) A ANL A, direct ; 55direct (A) (direct) A ANL A, Ri ; 0101011i (A) (Rn) A ANL A, data ; 54#data (A) #data A ANL direct, A ; 52direct (direct) (A) direct ANL direct, data ; 53direct #data (direct)#datadirect 这组指令的功能是: 将两个操作数的内容按位进行逻辑“与”操作, 并将结果送回目的操作数的单元中。 后两条指令中,若直接地址是I/O端口,则为“读修改写”操作。,5. 逻辑”或”指令 汇编指令格式 机器码格式 操作 ORL A, Rn ; 01001rrr (A) (Rn) A ORL A, direct ; 45direct (A) (direct) A ORL A, Ri ; 0100011i (A) (Rn) A ORL A, data ; 44#data (A) #data A ORL direct, A ; 42direct (direct) (A) direct ORL direct, data ; 43direct #data (direct)#datadirect 这组指令的功能是: 将两个操作数的内容按位进行逻辑“或”操作, 并将结果送回目的操作数的单元中。 后两条指令中,若直接地址是I/O端口,则为“读修改写”操作。,6. 逻辑”异或”指令 汇编指令格式 机器码格式 操作 XRL A, Rn ; 01101rrr (A) (Rn) A XRL A, direct ; 65direct (A) (direct) A XRL A, Ri ; 0110011i (A) (Rn) A XRL A, data ; 64#data (A) #data A XRL direct, A ; 62direct (direct) (A) direct XRL direct, data ; 63direct #data (direct)#datadirect 这组指令的功能是: 将两个操作数的内容按位进行逻辑“异或”操作, 并将结果送回目的操作数的单元中。 后两条指令中,若直接地址是I/O端口,则为“读修改写”操作。,表3.7 逻辑操作指令表,表3.7 逻辑操作指令表,3.3.4 控制程序转移类指令 控制转移指令共有 17 条, 不包括按布尔变量控制程序转移指令(见表 3.5)。其中有 64 KB范围内的长调用、 长转移指令; 有 2 KB范围内的绝对调用和绝对转移指令; 有全空间的长相对转移及一页范围内的短相对转移指令; 还有多种条件转移指令。由于MCS -51 提供了较丰富的控制转移指令, 因此在编程上相当灵活方便。这类指令用到的助记符共有 10 种: AJMP、LJMP、SJMP、JMP、ACALL、LCALL、JZ、JNZ、CJNE、DJNZ。,1. 无条件转移指令 无条件转移指令是指,当程序执行到该指令时,程序必须无条件转移到指令所提供的地址处继续执行。无条件转移指令有短转移、长转移、相对转移和间接转移(散转)指令。,1) 短转移指令 汇编指令格式 机器码格式 操作 AJMP addr11 ;a10a9a800001a7a0 先(PC)+2 PC, addr11 PC100 , (PC1511)不变 该指令执行后,程序转移的目的地址是由AJMP指令所在位置的地址PC值加上该指令字节数2,构成当前PC值。取当前PC值的高5位与指令中提供的11位直接地址形成转移的目的地址,即,PC15 PC14 PC13 PC12 PC11a10 a9 a8 a7 a6 a5 a4 a3 a2 a1 a0,转移目的地址(PC),由于11位地址的范围是0000000000011111111111,即2 KB范围,而目的地址的高5位是由PC当前值,所以程序可转移的位置只能是和PC当前值在同一2 KB范围内。本指令转移可以向前也可以向后,指令执行后不影响状态标志位。 例如:若AJMP指令地址(PC)=2300H。执行指令AJMP 0FFH后,结果为:转移目的地址(PC)=20FFH,程序向前转到20FFH单元开始执行。 又如:若AJMP指令地址(PC)=2FFFH。执行指令AJMP 0FFH后,结果为:转移目的地址(PC)=30FFH,程序向后转到30FFH单元开始执行。 由上可见:若addr11相同,则AJMP指令的机器码相同,但转移的目的地址却可能不同,这是因为转移的目的地址是由PC当前值的高5位与addr11共同决定的。,图 3.9 AJMP转换示意图,图 3.10 LJMP转换示意图,2) 长转移指令 汇编指令格式 机器码格式 操作 LJMP addr16 ; 02 a158 a70 addr16 PC LJMP指令执行后,程序无条件地转向16位目标地址(addr16)处执行,不影响任何标志位。由于指令中提供16位目标地址,所以执行这条指令可以使程序从当前地址转移到64 KB程序存储器地址空间的任意地址,故得名为“长转移“。该指令的缺点是执行时间长,字节多。,3) 相对转移(相对短转移)指令 汇编指令格式 机器码格式 操作 SJMP rel ; 80 rel 先(PC)+2 PC,后(PC)+rel PC 指令的操作数rel用8位带符号数补码表示,占指令的一个字节。因为8位补码的取值范围为-128+127,所以该指令的转移范围是:相对PC当前值向前转128字节,向后转127字节。即 转移目的地址= SJMP指令所在地址+2+rel 如在2100H单元有SJMP指令,若rel = 5AH(正数),则转移目的地址为215CH(向后转);若rel = F0H(负数),则转移目的地址为20F2H(向前转)。,用汇编语言编程时,指令中的相对地址rel往往用欲转移至的地址的标号(符号地址)表示。机器汇编时,能自动算出相对地址值;但手工汇编时,需自己计算相对地址值rel。rel的计算公式如下: 向前转移:rel = FEH - (SJMP指令地址与目的地址差的绝对值) 向后转移:rel = (SJMP指令地址与目的地址差的绝对值) -2 若rel = FEH,即目的地址就是SJMP指令的地址,在汇编指令中的偏移地址可用 $ 符号表示。若在程序的末尾加上SJMP $(机器码为80 FEH),则程序就不会再向后执行,造成单指令的无限循环,进

温馨提示

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

评论

0/150

提交评论