【第三章】MCS-51指令系统
知识树
- 0. 零碎知识点
- 1. 寻址方式
- 2. 数据传送类指令
- 2.1 MOV——访问片内RAM
- 2.2 MOVC——查表指令
- 2.3 MOVX——访问片外RAM
- 2.4 PUSH、POP——堆栈操作
- 2.5 XCH、XCHD、SWAP——数据交换指令
- 3. 算术运算类指令
- 3.1 算术运算影响PSW标志位
- 3.2 加法
- 3.3 十进制调整DA
- 3.4 减法
- 3.5 乘法
- 3.6 除法
- 4. 逻辑运算与循环类指令
- 4.1 逻辑与
- 4.2 逻辑或
- 4.3 逻辑异或
- 4.4 逻辑清零和取反
- 4.5 累加器循环移位
- 5. 控制转移类指令
- 5.1 无条件转移
- 5.2 条件转移
- 5.3 调用与返回:
- 5.4 位操作指令
0. 零碎知识点
(1)指令长度和执行时间记忆
(2)无符号数相加,需要考虑进位位Cy;有符号数相加,只需要考虑溢出位OV。
1. 寻址方式
寻址方式 | 举例 |
---|---|
寄存器寻址 | MOV A, R0 |
直接寻址 | MOV A, 50H |
寄存器间接寻址 | MOV A, @R0 |
立即数寻址 | MOV A, #50H |
变址寻址 | MOVC A, @A+DPTR |
位寻址 | MOV 40H, A |
相对寻址 | 一些转移指令 |
2. 数据传送类指令
2.1 MOV——访问片内RAM
记MOV系列指令的字节数时有个规律:有direct的字节数+1,有#data的字节数+1
记执行时间也有规律:【待补充】
注意:
2.2 MOVC——查表指令
只有两条:
MOVC A, @A+DPTR
MOVC A, @A+PC
字节数都为1,执行时间都为2个机器周期
2.3 MOVX——访问片外RAM
只有四条:
MOVX A, @DPTR
MOVX A, @Ri
MOVX @DPTR, A
MOVX @Ri, A
字节数都为1,执行时间都为2个机器周期
2.4 PUSH、POP——堆栈操作
注意,需要了解执行过程:
(1)PUSH:
先SP+1,再将数据送入堆栈
(2)POP:
先将堆栈数据弹出,再SP-1
2.5 XCH、XCHD、SWAP——数据交换指令
指令执行时间均为1个机器周期,指令中都包含A
(1)XCH:字节交换
(2)XCHD:半字节交换
只有一条:XCHD A, @Ri
(3)SWAP:A高低半字节交换
只有一条:SWAP A
3. 算术运算类指令
3.1 算术运算影响PSW标志位
如何判断OV位是否为1:
D6位向D7位的进位/借位与D7位向D8位的进位/借位相异或。
3.2 加法
(1)不带进位ADD
(2)带进位ADDC
(3)加1 INC
3.3 十进制调整DA
(1)两个压缩的BCD码按二进制相加后,必须经过调整方能得到正确的和。
(2)调整方法:
(3)注意:
执行DA指令后,PSW中的Cy位存的是结果的百位。
(4)例子:
3.4 减法
(1)带借位的减法SUBB
注意:
如果要完成不带借位的减法,只需要先将Cy位清零即可。
例子:
(2)减1:DEC
3.5 乘法
只有一条:MUL AB
注意:
(1)结果:B中为积的高8位,A中为积的低8位。
(2)CY总是被清0;OV=1表示积大于FFH
3.6 除法
只有一条:DIV AB
注意:
(1)结果:A中为商的整数部分,B中为余数
(2)CY总是被清0;OV=1表示除数为0
4. 逻辑运算与循环类指令
4.1 逻辑与
作用:对某些位清零
4.2 逻辑或
作用:对某些位置1.
4.3 逻辑异或
作用:某些位取反(与1异或),某些位不变(与0异或)。
4.4 逻辑清零和取反
操作数都只能是A
4.5 累加器循环移位
注意:
字节数都为1,执行时间也都为1
5. 控制转移类指令
5.1 无条件转移
(1)短跳转AJMP
-跳转范围:2KB
-执行过程:
(2)长跳转LJMP
跳转范围:64KB
执行过程:
(3)相对转移:SJMP
跳转范围:-128——+127
执行过程:
(4)散转移:JMP
执行过程:
5.2 条件转移
(1)累加器判0转移:【注意执行过程】
(2)比较不等转移:【注意执行过程】
(3)减一不为零转移:【注意执行过程】
注意:是先PC+2或PC+3,然后再执行-1,最后再判断。
典型例题:算循环时间
5.3 调用与返回:
(1)调用:【注意执行过程】
注意:先压入低8位,再压入高8位!
(2)返回
指令 | 执行过程 |
---|---|
RET | 取出栈顶单元内容放入PC高八位,SP-1,取出栈顶单元内容放入PC低8位,SP-1 |
RETI | 除了执行RET相同功能外,还清除中断响应时IP寄存器中被置1的PX0、PT0、PX1、PT1、PS |
5.4 位操作指令
(1)位传送:
只有两条:
MOV bit, C
MOV C, bit
(2)位状态:
注意:操作数只能是C或bit
(3)位逻辑运算
(4)位判跳:【注意执行过程】
shuaibif: 好好好
m0_73734303: 这些符号,英文字母都表示什么,该去哪里学呢
好耶是胡桃: 我觉得不是,应该要左移,低位补0,变成1.000 0000
jiaotshidi: wget显示无法建立连接
hhoi: 讲的太好了,一下子就看懂了