




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第第3 3章章 MCS - 51MCS - 51单片机指令系统单片机指令系统 3.1 寻址方式寻址方式 3.2 指令系统指令系统 一条汇编语言指令中最多包含一条汇编语言指令中最多包含 4 个区段个区段, 如下如下所示所示: 标号标号: 操作码操作码 操作数操作数 ;注释注释 4 个区段之间要用分隔符分开个区段之间要用分隔符分开: 如果操作数有如果操作数有两个以上两个以上, 则在操作数之间要用逗号则在操作数之间要用逗号“,”隔开隔开 (乘法乘法指令和除法指令除外指令和除法指令除外 )。 标号代表该指令所存放的第一个字节存储单标号代表该指令所存放的第一个字节存储单元的地址,故标号又称为元的地址,故
2、标号又称为“符号地址符号地址”。 操作码也称操作码也称“助记符助记符”。 1. 单字节指令单字节指令 (49条)条) 单字节指令格式由单字节指令格式由8位二进制编码表示位二进制编码表示, 例如例如: CLR AE4H 2. 双字节指令双字节指令 (45条)条) 双字节指令格式由两个字节组成双字节指令格式由两个字节组成, 操作码和操作数操作码和操作数, 例如例如: MOV A, 10H74H 10H 3. 三字节指令三字节指令 (17条)条) 三字节指令格式中三字节指令格式中, 第一个字节为操作码第一个字节为操作码, 后两个字节为后两个字节为操作数操作数, 例如例如: MOV 40H, 30H7
3、5H 40H 30H 从执行时间看:单周期从执行时间看:单周期64条,双周期条,双周期45条,四周期条,四周期2条。条。3.1 3.1 寻址方式寻址方式 所谓寻址方式所谓寻址方式, 就是寻找操作数地址的方就是寻找操作数地址的方式式, 在用汇编语言编程时在用汇编语言编程时, 数据的存放、传送、数据的存放、传送、 运算都要通过指令来完成。运算都要通过指令来完成。 编程者必须自始编程者必须自始至终都要十分清楚操作数的位置至终都要十分清楚操作数的位置, 以及如何将以及如何将它们传送到适当的寄存器去参与运算。每一它们传送到适当的寄存器去参与运算。每一种计算机都具有多种寻址方式。寻址方式的种计算机都具有多
4、种寻址方式。寻址方式的多少是反映指令系统优劣的主要指标之一。多少是反映指令系统优劣的主要指标之一。 在在 MCS -51单片机指令系统中单片机指令系统中, 有以下有以下 7种寻址方式种寻址方式: (1) 立即寻址立即寻址; (2) 直接寻址直接寻址; (3) 寄存器寻址寄存器寻址; (4) 寄存器间接寻址寄存器间接寻址; (5) 基址寄存器加变址寄存器间接寻址基址寄存器加变址寄存器间接寻址; (6) 相对寻址相对寻址; (7) 位寻址。位寻址。 1. 立即寻址立即寻址 立即寻址方式是指操作数包含在指令字节中。立即寻址方式是指操作数包含在指令字节中。 跟在指令跟在指令操作码后面的数就是参加运算的
5、数操作码后面的数就是参加运算的数, 该操作数称为立即数。该操作数称为立即数。 立即数有一字节和二字节两种可能立即数有一字节和二字节两种可能, 例如指令例如指令: MOV A, 3AH MOV DPTR, 0DFFFH 上述两条指令均为立即寻址方式上述两条指令均为立即寻址方式, 第一条指令的功能是将第一条指令的功能是将立即数立即数 3AH送累加器送累加器A中中, 第二条指令的功能是将立即数第二条指令的功能是将立即数 0DFFFH送数据指针送数据指针DPTR中(中(0DFHDPH, 0FFHDPL)。)。 2. 直接寻址直接寻址 在指令中直接给出操作数的地址在指令中直接给出操作数的地址, 这种寻址
6、方式就属于直这种寻址方式就属于直接寻址方式。在这种方式中接寻址方式。在这种方式中, 指令的操作数部分直接是操作数指令的操作数部分直接是操作数的地址。的地址。 在在MCS -51 单片机指令系统中单片机指令系统中, 直接寻址方式中可以访问直接寻址方式中可以访问 3 种存储器空间种存储器空间: (1) 内部数据存储器的低内部数据存储器的低 128 个字节单元(个字节单元(00H7FH)。)。 (2) 特殊功能寄存器。特殊功能寄存器。 特殊功能寄存器只能用特殊功能寄存器只能用直接寻址直接寻址方方式进行访问。式进行访问。 (3) 位地址空间。位地址空间。MOV A,30H MOV C,00H MOV
7、A,SBUF 3. 寄存器寻址寄存器寻址 在该寻址方式中在该寻址方式中, 参加操作的数存放在寄存器里。寄参加操作的数存放在寄存器里。寄存器包括存器包括8个工作寄存器个工作寄存器R0R7, 累加器累加器A, 寄存器寄存器B、数据、数据指针指针DPTR和布尔处理器的位累加器和布尔处理器的位累加器Cy。 例如例如: MOV A,R1 MOV B,R2 MOV DPTR,#8000H 4. 寄存器间接寻址寄存器间接寻址 指令中给出间接寻址寄存器,其内容为操作数的地址。寻址指令中给出间接寻址寄存器,其内容为操作数的地址。寻址内部内部RAM区的数据时,可使用寄存器区的数据时,可使用寄存器R0、R1作为地址
8、指针作为地址指针; 当访当访问外部问外部RAM时时, 可使用可使用R0、 R1及及DPTR作为地址指针。寄存器间作为地址指针。寄存器间接寻址符号为接寻址符号为“”, 例如例如: 5. 基址寄存器加变址寄存器间接寻址基址寄存器加变址寄存器间接寻址 这种寻址方式用于访问程序存储器中的数据表这种寻址方式用于访问程序存储器中的数据表格格, 它以基址寄存器它以基址寄存器DPTR或或PC的内容为基本地址的内容为基本地址, 加上变址寄存器加上变址寄存器A的内容作为操作数的地址的内容作为操作数的地址, 例如例如: MOVC A, ADPTR MOVC A, APC JMP ADPTR;散转指令;散转指令 6.
9、 相对寻址相对寻址 在在MCS -51 指令系统中设有转移指令指令系统中设有转移指令, 分为直接转移分为直接转移和相对转移指令和相对转移指令, 在相对转移指令中采用相对寻址方式。在相对转移指令中采用相对寻址方式。这种寻址方式是以这种寻址方式是以PC的内容为基本地址的内容为基本地址, 加上指令中给定加上指令中给定的偏移量作为转移地址。指令中给出的偏移量是一个的偏移量作为转移地址。指令中给出的偏移量是一个 8 位位带符号的常数带符号的常数, 可正可负可正可负, 其范围为其范围为128+127。 JC 06H 7. 位寻址位寻址 该种寻址方式中该种寻址方式中, 操作数是内部操作数是内部RAM单元中某
10、一位的单元中某一位的信息。信息。 MOV C,30H3.2 3.2 指令系统指令系统3.2.1 指令分类指令分类 按指令的功能按指令的功能, MCS -51 指令系统可分为下列指令系统可分为下列 5 类类: (1) 数据传送数据传送;(2) 算术运算算术运算;(3) 逻辑运算逻辑运算;(4) 位操作位操作;(5) 控制转移。控制转移。 描述指令的一些符号的意义:描述指令的一些符号的意义: Rn当前选定的寄存器区中的当前选定的寄存器区中的 8 个工作寄存器个工作寄存器R0R7, 即即n=07。 Ri当前选定的寄存器区中的当前选定的寄存器区中的 2 个寄存器个寄存器R0、 R1, i=0、1。 d
11、irect 8 位内部位内部RAM单元的地址单元的地址, 它可以是一个内部数据它可以是一个内部数据区区 RAM单元单元(00H7FH)或特殊功能寄存器地址或特殊功能寄存器地址(I / O端口、端口、 控制寄存器、控制寄存器、 状态寄存器状态寄存器 80H0FFH)。 data指令中的指令中的 8 位常数。位常数。 data16指令中的指令中的 16 位常数。位常数。 addr1616 位的目的地址位的目的地址, 用于用于LJMP, LCALL指令指令, 可指可指向向 64 KB程序存储器地址空间。程序存储器地址空间。 addr1111位的目的地址位的目的地址, 用于用于AJMP, ACALL指
12、令。目指令。目的地址必须与下一条指令的第一个字节在同一个的地址必须与下一条指令的第一个字节在同一个 2 KB程序程序存储器地址空间之内。存储器地址空间之内。 rel 8 位带符号的偏移量字节位带符号的偏移量字节, 用于用于SJMP和所有条件和所有条件转移指令中。转移指令中。 偏移量相对于下一条指令的第一个字节计算偏移量相对于下一条指令的第一个字节计算, 在在128+127 范围内取值。范围内取值。 bit内部数据内部数据RAM或特殊功能寄存器中的可直接寻址或特殊功能寄存器中的可直接寻址位。位。 DPTR数据指针数据指针, 可用作可用作 16 位的地址寄存器。位的地址寄存器。 A 累加器。累加器
13、。 B 寄存器寄存器, 用于用于 MUL和和 DIV指令中。指令中。 C 进位标志或进位位。进位标志或进位位。 间接寻址寄存器或基址寄存器的前缀间接寻址寄存器或基址寄存器的前缀, 如如Ri, DPTR。 / 位操作数的前缀位操作数的前缀, 表示对该位取反。表示对该位取反。 (X) X中的内容。中的内容。 (X)由由 X寻址的单元中的内容。寻址的单元中的内容。 箭头左边的内容被箭头右边的内容所代替。箭头左边的内容被箭头右边的内容所代替。 3.2.2 数据传送类指令数据传送类指令 图图 3 1 MCS -51传送指令示意图传送指令示意图 1. 数据传送到累加器数据传送到累加器A的指令的指令 MOV
14、 A, Rn MOV A, direct MOV A, Ri MOV A, data 这组指令的功能是:把源操作数的内容送入累加器这组指令的功能是:把源操作数的内容送入累加器A。例如例如: MOV A, 10H, 该指令执行时将立即数该指令执行时将立即数 10H送入累送入累加器加器A中。中。 2. 数据传送到工作寄存器数据传送到工作寄存器Rn的指令的指令 MOV Rn, A MOV Rn, direct MOV Rn, data 这组指令的功能是这组指令的功能是: 把源操作数的内容送入当前工作寄把源操作数的内容送入当前工作寄存器区的存器区的R0R7中的某一个寄存器。指令中中的某一个寄存器。指令
15、中Rn在内部数据在内部数据存储器中的地址由当前的工作寄存器区选择位存储器中的地址由当前的工作寄存器区选择位RS1、RS0 确确定定, 可以是可以是 00H07H、08H0FH、10H17H、18H1FH。 例如例如: MOV R0, A, 若当前若当前RS1、RS0 设置为设置为 00 (即即工作寄存器工作寄存器 0 区区), 执行该指令时,将累加器执行该指令时,将累加器A中的数据传送中的数据传送至工作寄存器至工作寄存器R0(内部内部RAM 00H)单元中。单元中。 3. 数据传送到内部数据传送到内部RAM单元或特殊功能寄存器单元或特殊功能寄存器SFR的指令的指令 MOV direct, A
16、MOV direct, Rn MOV direct1, direct2 MOV direct, Ri MOV direct, data MOV Ri, A MOV Ri, direct MOV Ri, data MOV DPTR, data16 这组指令的功能是:把源操作数的内容送入内部这组指令的功能是:把源操作数的内容送入内部RAM单元或特殊功能寄存器。其中第三条指令和最后一条指令单元或特殊功能寄存器。其中第三条指令和最后一条指令都是三字节指令。第三条指令的功能很强都是三字节指令。第三条指令的功能很强, 能实现内部能实现内部RAM之间、特殊功能寄存器之间或特殊功能寄存器与内部之间、特殊功能寄
17、存器之间或特殊功能寄存器与内部RAM之间的直接数据传送。最后一条指令是将之间的直接数据传送。最后一条指令是将16位的立即位的立即数送入数据指针寄存器数送入数据指针寄存器DPTR。 4. 累加器累加器A与外部数据存储器之间的传送指令与外部数据存储器之间的传送指令 MOVX A, DPTR MOVX A, Ri MOVX DPTR, A MOVX Ri, A 这组指令是:在累加器这组指令是:在累加器A与外部数据存储器与外部数据存储器RAM单元或单元或I/O口之间口之间进行数据传送进行数据传送, 前两条指令执行时前两条指令执行时, P3.7 引脚上输出引脚上输出RD有效信号有效信号, 用作外部数据存
18、储器的读选通信号用作外部数据存储器的读选通信号; 后两条指令后两条指令执行时执行时, P3.6 引脚上输出引脚上输出WR有效信号有效信号, 用作外部数据存储器用作外部数据存储器的写选通信号。的写选通信号。DPTR所包含的所包含的 16 位地址信息由位地址信息由 P0 (低低 8 位位)和和P2(高高 8 位位)输出输出, 而数据信息由而数据信息由P0 口传送口传送, P0 口作分时口作分时复用的总线。由复用的总线。由Ri作为间接寻址寄存器时作为间接寻址寄存器时, P0 口上分时输出口上分时输出Ri指定的指定的 8 位地址信息及传输位地址信息及传输 8 位数据。位数据。 5. 堆栈操作指令堆栈操
19、作指令 PUSH direct POP direct 在在MCS -51 单片机的内部单片机的内部RAM中中, 可以设定一个先进后可以设定一个先进后出的区域出的区域, 称其为堆栈。在特殊功能寄存器中有一个堆栈指针称其为堆栈。在特殊功能寄存器中有一个堆栈指针SP, 它指出栈顶的位置。它指出栈顶的位置。 进栈指令的功能是进栈指令的功能是: 首先将堆栈指针首先将堆栈指针SP的内容加的内容加1, 然后将直接地址所指出的内容送入然后将直接地址所指出的内容送入SP指出的内指出的内部部RAM单元单元; 出栈指令的功能是出栈指令的功能是: 将将SP所指出的内部所指出的内部RAM单单元的内容送入由直接地址所指出
20、的字节单元元的内容送入由直接地址所指出的字节单元, 接着将堆栈指针接着将堆栈指针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的内容。当中断服务程序结的内容。当中断服务程序结束之前束之前, 如下程序
21、段如下程序段(SP保持保持 64H不变不变) POP DPH POP DPL POP ACC POP PSW执行之后执行之后, SP内容修改为内容修改为 60H, 而而64H、 63H、 62H、 61H单元中的内容依次弹出到单元中的内容依次弹出到DPH、DPL、A、PSW中。中。 MCS -51 提供一个向上升的堆栈提供一个向上升的堆栈, 因此因此SP设置初值时设置初值时要充分考虑堆栈的深度要充分考虑堆栈的深度, 要留出适当的单元空间要留出适当的单元空间, 满足堆栈满足堆栈的使用。的使用。 6.程序存储器程序存储器内容送累加器内容送累加器 MOVC A, A+PC MOVC A, A+DPT
22、R 这是两条很有用的查表指令这是两条很有用的查表指令, 可用来查找存放在程序存储可用来查找存放在程序存储器中的常数表格。第一条指令是以器中的常数表格。第一条指令是以PC作为基址寄存器作为基址寄存器, A的内的内容作为无符号数和容作为无符号数和 PC的内容的内容 ( 下一条指令的起始地址)相加下一条指令的起始地址)相加后得到一个后得到一个 16 位的地址位的地址, 并将该地址指出的程序存储器单元的并将该地址指出的程序存储器单元的内容送到累加器内容送到累加器A。 这条指令的优点是不改变特殊功能寄存器这条指令的优点是不改变特殊功能寄存器和和PC的状态的状态, 只要根据只要根据A的内容就可以取出表格中
23、的常数。的内容就可以取出表格中的常数。缺缺点是表格只能放在该条查表指令后面的点是表格只能放在该条查表指令后面的 256 个单元之中个单元之中, 表格表格的大小受到限制的大小受到限制, 而且表格只能被一段程序所利用。而且表格只能被一段程序所利用。 第二条指令是以第二条指令是以DPTR作为基址寄存器作为基址寄存器, 累加器累加器A的内容的内容作为无符号数与作为无符号数与DPTR内容相加内容相加, 得到一个得到一个 16 位的地址位的地址, 并并把该地址指出的程序存储器单元的内容送到累加器把该地址指出的程序存储器单元的内容送到累加器A。这条。这条指令的执行结果只与指针指令的执行结果只与指针DPTR及
24、累加器及累加器A的内容有关的内容有关, 与与该指令存放的地址无关该指令存放的地址无关, 因此因此, 表格的大小和位置可以在表格的大小和位置可以在 64 KB程序存储器中任意安排程序存储器中任意安排, 并且一个表格可以为各个程序并且一个表格可以为各个程序块所共用。块所共用。 7. 字节交换指令字节交换指令 XCH A, Rn XCH A, Ri XCH A, direct XCHD A, Ri SWAP A 前三条指令是将累加器前三条指令是将累加器A的内容和源操作数内容相互交的内容和源操作数内容相互交换换; 后两条指令是半字节交换指令后两条指令是半字节交换指令, 最后一条指令是将累加器最后一条指
25、令是将累加器A的高的高 4 位与低位与低 4 位之间进行交换位之间进行交换, 而另外一条指令是将累加而另外一条指令是将累加器器 A 的低的低 4 位内容和(位内容和(Ri)所指出的内部)所指出的内部RAM单元的低单元的低 4 位内容相互交换。位内容相互交换。 传送类指令举例:传送类指令举例:1、将立即数、将立即数01H送入内部送入内部RAM 30H中中MOV 30H,#01H 或或 MOV A,#01H MOV 30H,A2、将立即数、将立即数01H送外部送外部RAM2000H单元中单元中方案方案1:MOVX 2000H,#01H ;?方案方案2;MOV A,#01H MOVX 2000H,A
26、 ;?方案方案3:MOV B,#01H ;? MOV DPTR,#2000H MOVX DPTR,B 正确的方案:MOV A,#01H MOV DPTR,#2000H MOVX DPTR,A3、编程实现内部RAM 30H和31H单元的内容交换方案1、XCH 31H,30H ;?方案2、MOV A,30H ;暂存 MOV 30H,31H MOV 31H,A方案3、XCH A,30H XCH A,31H XCH A,30H方案4、PUSH 30H PUSH 31H POP 30H POP 31H4、将程序存储器1000H单元的内容送外部RAM30H MOV ,#00H MOV DPTR,#1000
27、H MOVC A,A+DPTR MOV R0, #30H MOVX R0, A作业:P55 2,8一、一、 加法指令加法指令 1. 普通加法指令普通加法指令 ADD A, Rn ADD A, direct ADD A, Ri ADD A, data 3.2.3 算术运算类指令算术运算类指令 例如例如: 120 和和 100 之和为之和为 220, 显然大于显然大于 127, 相加时相加时 0 1 1 1 1 0 0 0 1200 1 1 0 0 1 0 0 1001 1 0 1 1 1 0 0 220+1、看成有符号数时:、看成有符号数时: 此时位此时位 6 有进位而位有进位而位 7 无进位无
28、进位, 置位置位溢出标志溢出标志OV, 结果溢出。结果溢出。 2、看成无符号数时:、看成无符号数时: 此时最高位无进位,无溢出。此时最高位无进位,无溢出。 同样同样, 120和和100 相加相加, 结果应为结果应为220, 显然小于显然小于128, 相加时相加时 1 0 0 0 1 0 0 0 -1201 0 0 1 1 1 0 0 -100+1 0 0 1 0 0 1 0 0 -220 符号位由符号位由1变为变为0, 两个负数相加结果变为正数两个负数相加结果变为正数, 这是这是因为符号位移入进位标志因为符号位移入进位标志, 位位 6 无进位而位无进位而位 7 有进位有进位, 置置位溢出标志位
29、溢出标志OV, 由此可判断结果溢出。由此可判断结果溢出。 2. 带进位加法指令带进位加法指令 ADDC A, Rn ADDC A, direct ADDC A, Ri ADDC A, data 这组指令的功能与普通加法指令类似这组指令的功能与普通加法指令类似, 唯一的不同之处唯一的不同之处是是, 在执行加法时在执行加法时, 还要将上一次进位标志还要将上一次进位标志Cy的内容也一起的内容也一起加进去加进去, 对于标志位的影响也与普通加法指令相同。对于标志位的影响也与普通加法指令相同。 3. 增量指令增量指令 INC A INC Rn INC direct INC Ri INC DPTR 这组指令
30、的功能是:将指令中所指出操作数的内容加这组指令的功能是:将指令中所指出操作数的内容加1。 若若原来的内容为原来的内容为 0FFH, 则加则加 1 后将产生溢出后将产生溢出, 使操作数的内容变使操作数的内容变成成00H, 但不影响任何标志。最后一条指令是对但不影响任何标志。最后一条指令是对16 位的数据指针位的数据指针寄存器寄存器DPTR执行加执行加 1 操作操作, 指令执行时指令执行时, 先对低先对低 8 位指针位指针 DPL的内容加的内容加 1, 当产生溢出时就对高当产生溢出时就对高 8 位指针位指针DPH加加 1, 但但不影响不影响任何标志。任何标志。 4. 十进制调整指令十进制调整指令
31、DA A 这条指令对累加器这条指令对累加器A参与的参与的BCD码加法运算所获得的码加法运算所获得的 8 位结果进行十进制调整位结果进行十进制调整, 使累加器使累加器A中的内容调整为二位压缩中的内容调整为二位压缩型型 BCD码的数。使用时必须注意码的数。使用时必须注意, 它只能跟在加法指令之后它只能跟在加法指令之后, 不能对减法指令的结果进行调整不能对减法指令的结果进行调整, 且其结果不影响溢出标志位。且其结果不影响溢出标志位。 执行该指令时执行该指令时, 判断判断 A中的低中的低 4 位是否大于位是否大于 9 和辅助进和辅助进位标志位标志 AC是否为是否为“1”, 若两者有一个条件满足若两者有
32、一个条件满足, 则低则低 4 位加位加 6 操作操作; 同样同样, A中的高中的高 4 位大于位大于 9 或进位标志或进位标志 Cy为为“1”两者两者有一个条件满足时有一个条件满足时, 高高 4 位加位加 6 操作。例如操作。例如: 有两个有两个 BCD数数 36 与与 45 相加相加, 结果应为结果应为 BCD码码 81, 程序如下程序如下: MOV A, 36HADD A, 45HDA A 这段程序中这段程序中, 第一条指令将立即数第一条指令将立即数36H(BCD码码36)送入累送入累加器加器A; 第二条指令进行如下加法第二条指令进行如下加法: 0 0 1 1 0 1 1 0 360 1
33、0 0 0 1 0 1 450 1 1 1 1 0 1 1 7B0 0 0 0 0 1 1 0 06+1 0 0 0 0 0 0 1 81得结果得结果 7BH; 第三条指令对累加器第三条指令对累加器 A进行十进制调整进行十进制调整, 低低 4 位位(为为 0BH)大于大于 9, 因此要加因此要加 6, 得调整的得调整的 BCD码码 81。 二、二、 减法指令减法指令 1. 带进位减法指令带进位减法指令 SUBB A, Rn SUBB A, direct SUBB A, Ri SUBB A, data 这组指令的功能是这组指令的功能是: 将累加器将累加器A的内容与第二操作数及进位标的内容与第二操
34、作数及进位标志相减志相减, 结果送回到累加器结果送回到累加器A中。在执行减法过程中,如果位中。在执行减法过程中,如果位7(D7)有借位)有借位, 则进位标志则进位标志Cy置置“1”, 否则清否则清“0”; 如果位如果位 3(D3)有借位有借位, 则辅助进位标志则辅助进位标志AC置置“1”, 否则清否则清“0”; 如位如位 6 有借位而有借位而位位 7 没有借位没有借位, 或位或位 7 有借位而位有借位而位 6 没有借位没有借位, 则溢出标志则溢出标志OV置置“1”, 否则清否则清“0”。 若要进行不带借位的减法操作若要进行不带借位的减法操作, 则必须先将则必须先将Cy清清“0”。 2. 减减1
35、指令指令 DEC A DEC Rn DEC direct DEC Ri 这组指令的功能是这组指令的功能是: 将指出的操作数内容减将指出的操作数内容减 1。 如果如果原来的操作数为原来的操作数为 00H, 则减则减 1 后将产生下溢出后将产生下溢出, 使操作数变使操作数变成成 0FFH, 但但不影响任何标志不影响任何标志。 三、三、 乘法指令乘法指令 乘法指令完成单字节的乘法乘法指令完成单字节的乘法, 只有一条指令只有一条指令: MUL AB 这条指令的功能是这条指令的功能是: 将累加器将累加器A的内容与寄存器的内容与寄存器B的内的内容相乘容相乘, 乘积的低乘积的低 8 位存放在累加器位存放在累
36、加器A中中, 高高 8 位存放于寄存位存放于寄存器器B中。如果乘积超过中。如果乘积超过0FFH, 则溢出标志则溢出标志OV置置“1”, 否则清否则清“0”。 进位标志进位标志Cy总是被清总是被清“0”。 四、四、 除法指令除法指令 除法指令完成单字节的除法除法指令完成单字节的除法, 只有一条指令只有一条指令: DIV AB 这条指令的功能是这条指令的功能是: 将累加器将累加器 A中的内容除以寄存器中的内容除以寄存器 B中的中的8位无符号整数位无符号整数, 所得商的整数部分存放在累加器所得商的整数部分存放在累加器A中中, 余余数部分存放在寄存器数部分存放在寄存器 B中中, 清清“0”进位标志进位
37、标志Cy和溢出标志和溢出标志OV。 若原来若原来 B 中的内容为中的内容为 0, 则执行该指令后则执行该指令后 A与与B中的内容不定中的内容不定, 并将溢出标志并将溢出标志OV置置“1”, 在任何情况下在任何情况下, 进位标志进位标志Cy总是被总是被清清“0”。 表 3.3 影响标志位的指令 表 3.3 影响标志位的指令算术运算类指令举例例1:双字节加法:将内部RAM 30H(低位),31H的16位数与40H(低位),41H的16位数相加,和存放在50H,51H,52H中。 MOV A,30H ADD A,40H MOV 50H,A MOV A,31H ADDC A,41H MOV 51H,A
38、 MOV A,#00H ADDC A,#00H MOV 52H,A作业:P57 11题 一、一、 简单逻辑操作指令简单逻辑操作指令 CLR A ; 对累加器对累加器A清清“0” CPL A; 对累加器对累加器A按位取反按位取反 RL A; 累加器累加器A的内容向左环移的内容向左环移 1 位位 RLC A; 累加器累加器A的内容带进位标志位向左环移的内容带进位标志位向左环移 1 位位 RR A; 累加器累加器A的内容向右环移的内容向右环移 1 位位 RRC A; 累加器累加器A的内容带进位标志位向右环移的内容带进位标志位向右环移 1 位位 这组指令的功能是这组指令的功能是: 对累加器对累加器A的
39、内容进行简单的逻辑操的内容进行简单的逻辑操作。除了带进位标志位的移位指令外作。除了带进位标志位的移位指令外,其它都不影响其它都不影响Cy, AC, OV等标志。等标志。 3.2.4 逻辑运算类指令逻辑运算类指令 二、二、 逻辑与指令逻辑与指令 ANL A, Rn ANL A, direct ANL A, Ri ANL A, data ANL direct, A ANL direct, data 这组指令的功能是这组指令的功能是: 将两个操作数的内容按位进行逻将两个操作数的内容按位进行逻辑与操作辑与操作, 并将结果送回目的操作数的单元中。并将结果送回目的操作数的单元中。 三、三、 逻辑或指令逻辑
40、或指令ORL A, RnORL A, directORL A, RiORL A, dataORL direct, AORL direct, data 这组指令的功能是这组指令的功能是: 将两个操作数的内容按位进行逻辑将两个操作数的内容按位进行逻辑或操作或操作, 并将结果送回目的操作数的单元中。并将结果送回目的操作数的单元中。 四、四、 逻辑异或指令逻辑异或指令 XRL A, Rn XRL A, direct XRL A, Ri XRL A, data XRL direct, A XRL direct, data 这组指令的功能是这组指令的功能是: 将两个操作数的内容按位进行逻辑将两个操作数的内
41、容按位进行逻辑异或操作异或操作, 并将结果送回到目的操作数的单元中。并将结果送回到目的操作数的单元中。 逻辑运算指令举例逻辑运算指令举例CLR A ;MOV A, #0E0HADD A, #33HRL ARLC A(A)= Cy=例1:利用左移指令实现对累加器A中内容乘8操作(A)=01H RL A RL A RL A例例2:(1)将内部将内部RAM 30H单元的低四位变反,其余位不变单元的低四位变反,其余位不变 XRL 30H,#0FH (2)将内部将内部RAM 30H单元的低六位置单元的低六位置1 ,其余位不变,其余位不变 ORL 30H,#3FH (3)将内部将内部RAM 30H单元的最
42、高位置单元的最高位置0 ,其余位不变,其余位不变 ANL 30H,#7FH 控制转移指令共有控制转移指令共有 17 条条, 不包括按布尔变量控制程序不包括按布尔变量控制程序转移指令(见表转移指令(见表 3.5)。其中有)。其中有 64 KB范围内的长调用、范围内的长调用、 长长转移指令转移指令; 有有 2 KB范围内的绝对调用和绝对转移指令范围内的绝对调用和绝对转移指令; 有全有全空间的长相对转移及一页范围内的短相对转移指令空间的长相对转移及一页范围内的短相对转移指令; 还有多还有多种条件转移指令。由于种条件转移指令。由于MCS -51 提供了较丰富的控制转移指提供了较丰富的控制转移指令令,
43、因此在编程上相当灵活方便。这类指令用到的助记符共有因此在编程上相当灵活方便。这类指令用到的助记符共有 10 种种: AJMP、LJMP、SJMP、JMP、ACALL、LCALL、JZ、JNZ、CJNE、DJNZ。 3.2.5 控制转移指令控制转移指令一、一、 无条件转移指令无条件转移指令 1. 绝对转移指令绝对转移指令 AJMP addr11 这是这是2KB范围内的无条件跳转指令范围内的无条件跳转指令, 执行该指令时执行该指令时, 先先将将PC+2, 然后将然后将addr11送入送入PC10PC0, 而而PC15PC11保持保持不变。不变。 这样得到跳转的目的地址。需要注意的是这样得到跳转的目
44、的地址。需要注意的是, 目标地目标地址与址与AJMP后面一条指令的第一个字节必须在同一个后面一条指令的第一个字节必须在同一个 2 KB区域的存储器区内。区域的存储器区内。 2. 短转移指令短转移指令 SJMP rel 执行该指令时执行该指令时, 先将先将 PC+2, 再把指令中带符号的偏移再把指令中带符号的偏移量加到量加到PC上上, 得到跳转的目标地址送入得到跳转的目标地址送入PC。 3. 长跳转指令长跳转指令 LJMP addr16 执行该指令时执行该指令时, 将将 16 位目标地址位目标地址addr16 装入装入PC, 程序无程序无条件转向指定的目标地址。转移的目标地址可以在条件转向指定的
45、目标地址。转移的目标地址可以在 64 KB程序存储器地址空间的任何地方程序存储器地址空间的任何地方, 不影响任何标志。不影响任何标志。 4. 散转指令散转指令 JMP A+DPTR 执行该指令时执行该指令时, 把累加器把累加器 A中的中的 8 位无符号数与数据位无符号数与数据指针中的指针中的 16 位数相加位数相加, 结果作为下条指令的地址送入结果作为下条指令的地址送入PC, 不改变累加器不改变累加器 A和数据指针和数据指针DPTR的内容的内容, 也不影响标志。也不影响标志。 利用这条指令能实现程序的散转。利用这条指令能实现程序的散转。 二、二、 条件转移指令条件转移指令 JZ rel; (A
46、)= 0 转移转移 JNZ rel; (A)0 转移转移 这类指令是依据累加器这类指令是依据累加器A的内容是否为的内容是否为 0 的条件转移指的条件转移指令。条件满足时转移(相当于一条相对转移指令)令。条件满足时转移(相当于一条相对转移指令), 条件不条件不满足时则顺序执行下面一条指令。转移的目标地址在以下满足时则顺序执行下面一条指令。转移的目标地址在以下一条指令的起始地址为中心的一条指令的起始地址为中心的 256 个字节范围之内(个字节范围之内(128 +127)。当条件满足时)。当条件满足时, PC(PC)+N+rel, 其中其中(PC)为该条件转移指令的第一个字节的地址为该条件转移指令的
47、第一个字节的地址, N为该转移指令的为该转移指令的字节数(长度)字节数(长度), 本转移指令本转移指令N=2。 三、三、 比较转移指令比较转移指令 在在MCS - 51 中没有专门的比较指令中没有专门的比较指令, 但提供了下面但提供了下面 4 条条比较不相等转移指令比较不相等转移指令: CJNE A, direct, relCJNE A, data, relCJNE Rn, data, relCJNE Ri, data, rel 这组指令的功能是这组指令的功能是: 比较前面两个操作数的大小比较前面两个操作数的大小, 如果它如果它们的值不相等则转移。转移地址的计算方法与上述两条指令们的值不相等则
48、转移。转移地址的计算方法与上述两条指令相同。如果第一个操作数(无符号整数)小于第二个操作数相同。如果第一个操作数(无符号整数)小于第二个操作数, 则进位标志则进位标志Cy置置“1”, 否则清否则清“0”, 但不影响任何操作数的内但不影响任何操作数的内容。容。该指令要影响标志位该指令要影响标志位Cy。 四、四、 减减 1不为不为0转移指令转移指令DJNZ Rn, relDJNZ direct, rel 这两条指令把源操作数减这两条指令把源操作数减 1, 结果回送到源操作数中结果回送到源操作数中去去, 如果结果不为如果结果不为 0 则转移(转移地址的计算方法同前)。则转移(转移地址的计算方法同前)
49、。 该指令不影响标志位该指令不影响标志位。 五、五、 调用及返回指令调用及返回指令 在程序设计中在程序设计中, 通常把具有一定功能的公用程序段编制成通常把具有一定功能的公用程序段编制成子程序子程序, 当主程序需要使用子程序时用调用指令当主程序需要使用子程序时用调用指令, 而在子程序而在子程序的最后安排一条子程序返回指令的最后安排一条子程序返回指令,以便执行完子程序后能返回以便执行完子程序后能返回主程序继续执行。主程序继续执行。 1. 绝对调用指令绝对调用指令 ACALL addr11 这是一条这是一条 2 KB范围内的子程序调用指令。执行该指令范围内的子程序调用指令。执行该指令时,先将时,先将
50、 PC+2 以获得下一条指令的地址以获得下一条指令的地址, 然后将然后将 16 位地位地址压入堆栈(址压入堆栈(PCL内容先进栈内容先进栈, PCH内容后进栈)内容后进栈), SP内容内容加加 2, 最后把最后把 PC的高的高 5 位位PC15PC11与指令中提供的与指令中提供的 11 位位地址地址addr11相连接(相连接(PC15PC11, 100), 形成子程序的形成子程序的入口地址送入入口地址送入PC, 使程序转向子程序执行。所用的子程序使程序转向子程序执行。所用的子程序的入口地址必须与的入口地址必须与 ACALL下面一条指令的第一个字节在下面一条指令的第一个字节在同一个同一个 2 K
51、B区域的存储器区内。区域的存储器区内。 2. 长调用指令长调用指令 LCALL addr16 这条指令无条件调用位于这条指令无条件调用位于 16 位地址位地址addr16的子程序。的子程序。执行该指令时,先将执行该指令时,先将PC+3以获得下一条指令的首地址以获得下一条指令的首地址, 并把并把它压入堆栈(先低字节后高字节)它压入堆栈(先低字节后高字节), SP内容加内容加 2, 然后将然后将 16 位地址放入位地址放入 PC中中, 转去执行以该地址为入口的程序。转去执行以该地址为入口的程序。 LCALL指令可以调用指令可以调用 64 KB范围内任何地方的子程序。指范围内任何地方的子程序。指令执
52、行后不影响任何标志。令执行后不影响任何标志。 3. 子程序返回指令子程序返回指令 RET 这条指令的功能是这条指令的功能是: 恢复断点恢复断点, 将调用子程序时压入堆将调用子程序时压入堆栈的下一条指令的首地址取出送入栈的下一条指令的首地址取出送入PC, 使程序返回主程序使程序返回主程序继续执行。继续执行。 4. 中断返回指令中断返回指令 RETI 这条指令的功能与这条指令的功能与RET指令相似指令相似, 不同的是它还要清除不同的是它还要清除MCS -51 单片机内部的中断状态标志。单片机内部的中断状态标志。 控制转移指令举例控制转移指令举例例1:读下列程序: ORG 0000H MOV SP,#40H ;3个字节 MOV A,#30H ;2个字节 LCALL 0500H ;3个字节 ADD A,#10H ; ; 2个字节 MOV B,A ; 2个字节 SJMP $ ORG 0500H MOV DPTR,#000AH PHSH DPL PUSH DPH RET问程序运行后,SP,A,B中的数据各为多少?(SP)= 4
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 莱阳团建活动方案
- 食堂一周年活动方案
- 麦当劳新品试吃活动方案
- 餐厅媒体活动方案
- 部门组织做饭活动方案
- 光模块考试题及答案
- 古诗格子考试题及答案
- 各地联考试题及答案
- 分选培训考试题及答案
- 防灾知识考试题及答案
- 2025年工地安全员培训考试试题及答案
- 文明有礼+课件-2025-2026学年统编版道德与法治八年级上册
- 供水设备运行维护与保养技术方案
- 木雕工艺课件
- 2025年2个清单28个问题查摆整改措施
- 摩擦力影响因素实验报告范本
- 教育系统应急知识培训课件
- 基坑防护课件
- 2025年黑龙江省龙东地区中考英语真题含答案
- 医疗器械生产质量管理规范2025版
- 2025年医护人员法律法规知识考试题库及答案(一)
评论
0/150
提交评论