1. 单字节指令
单字节指令格式由8位二进制编码表示, 例如:
CLR A→E4H
2. 双字节指令
双字节指令格式由两个字节组成, 操作码和操作数, 例如:
MOV A, #10H→74H 10H
3. 三字节指令
三字节指令格式中, 第一个字节为操作码, 后两个字节为操作数, 例如:
MOV 40H, #30H→75H 40H 30H
一条汇编语言指令中最多包含 4 个区段, 如下所示:
[标号:] 操作码 [操作数] [;注释]
4 .个区段之间要用分隔符分开: 标号与操作码之间用“: ”隔开, 操作码与操作数之间用空格隔开, 操作数与注释之间用“;”隔开, 如果操作数有两个以上, 则在操作数之间要用逗号“,”隔开 (乘法指令和除法指令除外 )。
寻址方式
所谓寻址方式, 就是寻操作数地址的方式, 在用汇编语言编程时, 数据的存放、传送、 运算都要通过指令来完成。 编程者必须自始至终都要十分清楚操作数的位置, 以及如何将它们传送到适当的寄存器去参与运算。每一种计算机都具有多种寻址方式。寻址方式的多少是反映指令系统优劣的主要指标之一。
在 MCS -51单片机指令系统中, 有以下 7种寻址方式:
(1) 立即寻址;
(2) 直接寻址;
(3) 寄存器寻址;
(4) 寄存器间接寻址;
(5) 基址寄存器加变址寄存器间接寻址;
(6) 相对寻址;
(7) 位寻址。
1. 立即寻址
立即寻址方式是指操作数包含在指令字节中。 跟在指令操作码后面的数就是参加运算的数, 该操作数称为立即数。 立即数有一字节和二字节两种可能, 例如指令:
MOV A, # 3AH
MOV DPTR, # 0DFFFH
上述两条指令均为立即寻址方式, 第一条指令的功能是将立即数 3AH送累加器A中, 第二条指令的功能是将立即数 0DFFFH送数据指针DPTR中(0DFH→DPH, 0FFH→DPL)。
2. 直接寻址
在指令中直接给出操作数的地址, 这种寻址方式就属于直接寻址方式。在这种方式中, 指令的操作数部分直接是操作数的地址。
在MCS -51 单片机指令系统中, 直接寻址方式中可以访问 3 种存储器空间:
(1) 内部数据存储器的低 128 个字节单元(00H~7FH)。
(2) 特殊功能寄存器。 特殊功能寄存器只能用直接寻址方式进行访问。
(3) 位地址空间。
3. 寄存器寻址
在该寻址方式中, 参加操作的数存放在寄存器里。寄存器包括8个工作寄存器R0~R7, 累加器A, 寄存器B、数据指针DPTR和布尔处理器的位累加器C。
4. 寄存器间接寻址
在这种寻址方式中, 寄存器的内容为操作数的地址。 寄存器间接寻址只能使用寄存器R0、R1 作为地址指针,寻址内部RAM区的数据; 当访问外部RAM时, 可使用R0、 R1及DPTR作为地址指针。寄存器间接寻址符号为“@”, 例如:
5. 基址寄存器加变址寄存器间接寻址
这种寻址方式用于访问程序存储器中的数据表格, 它以基址寄存器DPTR或PC的内容为基本地址, 加上变址寄存器A的内容作为操作数的地址, 例如:
MOVC A, @DPTR+A
JMP @A+DPTR
MOVC A, @ PC+A
6. 相对寻址
在MCS -51 指令系统中设有转移指令, 分为直接转移和相对转移指令, 在相对转移指令中采用相对寻址方式。这种寻址方式是以PC的内容为基本地址, 加上指令中给定的偏移量作为转移地址。指令中给出的偏移量是一个 8 位带符号的常数, 可正可负, 其范围为-128~+127。
7. 位寻址
该种寻址方式中, 操作数是内部RAM单元中某一位的信息。
按指令的功能, MCS -51 指令系统可分为下列 5 类:
(1) 数据传送;
(2) 算术运算;
(3) 逻辑运算;
(4) 位操作;
(5) 控制转移。
指令分类
按指令的功能, MCS -51 指令系统可分为下列 5 类:
(1) 数据传送;
(2) 算术运算;
(3) 逻辑运算;
(4) 位操作;
(5) 控制转移。
Rn——当前选定的寄存器区中的 8 个工作寄存器R0~R7, 即n=0~7。
Ri——当前选定的寄存器区中的 2 个寄存器R0、 R1, i=0、1。
direct—— 8 位内部RAM单元的地址, 它可以是一个内部数据区 RAM单元(00H~7FH)或特殊功能寄存器地址(I / O端口、 控制寄存器、 状态寄存器 80H~0FFH)。
#data——指令中的 8 位常数。
#data16——指令中的 16 位常数。
addr16——16 位的目的地址, 用于LJMP#, LCALL指令, 可指向 64 KB程序存储器地址空间。
addr11——11位的目的地址, 用于AJMP, ACALL指令。目的地址必须与下一条指令的第一个字节在同一个 2 KB程序存储器地址空间之内。
rel—— 8 位带符号的偏移量字节, 用于SJMP和所有条件转移指令中。 偏移量相对于下一条指令的第一个字节计算, 在-128~+127 范围内取值。
bit——内部数据RAM或特殊功能寄存器中的可直接寻址位。
DPTR——数据指针, 可用作 16 位的地址寄存器。
A——累加器。
B——寄存器, 用于 MUL和 DIV指令中。
C——进位标志或进位位。
@——间接寻址寄存器或基址寄存器的前缀, 如@Ri,@DPTR。
/——位操作数的前缀, 表示对该位取反。
(X)—— X中的内容。
((X))——由 X寻址的单元中的内容。
←——箭头左边的内容被箭头右边的内容所代替。
数据传送类指令
表 3.1 数据传送类指令一览表
表 3.1 数据传送类指令一览表
1. 数据传送到累加器A的指令
MOV A, R0
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
这组指令的功能是: 把源操作数的内容送入当前工作寄存器区的R0~R7中的某一个寄存器。指令中Rn在内部数据存储器中的地址由当前的工作寄存器区选择位RS1、RS0 确定, 可以是 00H~07H、08H~0FH、10H~17H、18H~1FH。 例如: MOV R0, A, 若当前RS1、RS0 设置为 00 (即工作寄存器 0 区), 执行该指令时,将累加器A中的数据传送至工作寄存器R0(内部RAM 00H)单元中。
3. 数据传送到内部RAM单元或特殊功能寄存器SFR的指令
MOV direct, A
MOV direct, Rn
MOV direct, direct
MOV direct, @Ri
MOV direct, #data
汇编语言结束指令 MOV @Ri, A
MOV @Ri, direct
MOV @Ri, #data
MOV DPTR, #data16
这组指令的功能是:把源操作数的内容送入内部RAM单元或特殊功能寄存器。其中第三条指令和最后一条指令都是三字节指令。第三条指令的功能很强, 能实现内部RAM之间、特殊功能寄存器之间或特殊功能寄存器与内部RAM之间的直接数据传送。最后一条指令是将16位的立即数送入数据指针寄存器DPTR。
4. 累加器A与外部数据存储器之间的传送指令
MOVX A, @DPTR
MOVX A, @Ri
MOVX @DPTR, A
MOVX @Ri, A
这组指令是:在累加器A与外部数据存储器RAM单元或I/O口之间进行数据传送, 前两条指令执行时, P3.7 引脚上输出RD有效信号, 用作外部数据存储器的读选通信号; 后两条指令执行时, P3.6 引脚上输出WR有效信号, 用作外部数据存储器的写选通信号。DPTR所包含的 16 位地址信息由 P0 (低 8 位)和P2(高 8 位)输出, 而数据信息由P0 口传送, P0 口作分时复用的总线。由Ri作为间接寻址寄存器时, P0 口上分时输出Ri指定的 8 位地址信息及传输 8 位数据。
5. 堆栈操作指令
PUSH direct
POP direct
在MCS -51 单片机的内部RAM中, 可以设定一个先进后出的区域, 称其为堆栈。在特殊功
能寄存器中有一个堆栈指针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
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论