51汇编学习第三章小结
本章重点
MCS-51的寻址方式和寻址空间
MCS-51的指令分类
MCS-51指令系统中各指令的执行过程
MCS-51指领的应用特点
一、MCS-51单片机指令系统概述
1、 指令格式
指令操作码用8位二进制数编码,共有255种,指令不同操作码和操作数也不同,有些两者加起来只有一个字节称为单字节指令,有些是操作码和操作数各占一个字节称为双字节指令,有的操作码战一个字节,操作数占两个字节称为3字节指令
A、 单字节指令有的没有指定操作数的指令,如INC DPTR,有的有操作数指令,如MOV A,Rn
B、 双字节指令在程序存储器中占两个字节单元,操作码字节在前,操作数在后,如ADD A,#08H
C、 三字节指令第一个字节为操作码,第二和第三为操作数或者操作数地址如 MOV DPTR,#1234
2、 指令分类
A、 数据传送指令:可用于在单片机CPU内部寄存器、内部RAM、特殊功能寄存器、外部RAM及I/O口、程序存储器之间传送数据
B、 算术运算指令:用于两个操作数进行加减乘除等,绝大多数指令要求一个操作数必须存放在累加器A内,而且运算结果仍存回A中
C、 逻辑运算和循环移位指令:用于对两个操作希特勒按位进行与、或、异或、取反等操作,大多数也要求把一个操作数和结果放入累加器A中
D、位操作指令:可实现位的传送、修改、运算和位控制转移
E、 流程控制类指令:实现无条件转移、条件转移、子程序调用和返回等具体方法就是修改程序计数器PC的值
3、指令系统中使用的符号Rn,A,B……..
二、寻址方式
找出操作数来源的方式就是操作数的寻址方式
1、 立即数寻址:指令中自带常数操作数,CPU取指后能直接得到操作数
2、 直接寻址:指令中直接给出操作数的地址,MCS-51可以直接寻址的操作数存储空间为内部RAM的低128字节(00H-7FH)和特殊功能寄存器(80H-FFH),对于52子系列其内部RAM空间的80H-FFH不能直接寻址
3、 寄存器寻址:操作数在寄存器中的寻址方式 INC R1
4、 寄存器间接寻址:指令中给出含有操作数地址的寄存器号,寄存器号前加@,如INC @R1
5、 变址寻址:可称为索引寻址,目的是在一个连续存放的字节数组中,从数组起始地址(该起始地址存储在一个16位寄存器中)开始,找到以寄存器A内容为字节位移量的一项
6、 位寻址:只访问布尔处理器的累加器C时使用
7、 相对寻址:用于相对转移指令,CPU在执行相对转移指令时,将当前的16位PC值与指令中的8位位移量相加,得到一个16位地址,以此作为新的PC值,于是程序的流程就发生了变化
8、 总结
寻址方式 表示形式 寻址空间
立即数寻址 #data(8位)、#data(16位) 程序存储器
直接寻址 direct(8位地址) 内部RAM低128字节
特殊功能寄存器名 特殊功能寄存器名
特殊功能寄存器字节地址 特殊功能寄存器
Addr11(11位)、Addr11(16位) 程序存储器
寄存器寻址 A、B、R0-R7、DPTR CPU内部寄存器
寄存器间接寻址 @R0、@R1 内部RAM
@R0、@R1、@DPTR 外部RAM及外部I/O空间
变址寻址 @A+DPTR、@A+PC 程序存储器
位寻址 C 位累加器
bit(8位位地址) 位空间
相对寻址 rel(8位有符号数) 程序存储器
三、数据传送指令
以实现把源操作数复制到目的地址的操作,如果要保留目的地址中操作数(目的操作数),可以使用数据交换指令
1、 内部数据传送指令:实现内部寄存器、RAM、特殊功能寄存器之间的数据传送,用MOV
A、 以A为目的操作数的8位传送指令
MOV A,#data
MOV A,direct
MOV A,Rn
MOV A,@Ri
B、 以direct为目的操作数的8位传送指令
MOV direct,A
MOV direct, #data
MOV direct1 direct2
MOV direct,Rn
MOV direct,Ri
C、 以Rn为目的操作数的8位传送指令,不能从一个寄存器传到另一个寄存器
MOV Rn,A
MOV Rn, #data
MOV Rn, direct
D、以@Ri的操作数的8位传送指令
MOV @RiA
MOV @Ri,#data
MOV @Ri,direct
E、16位数据传送指令作用把16位立即数装入数据指针DPTR,高8位(指令的第二
个字节)送入DPTR的高8位PDH,低8位送入DPTR的低8位PDL,
MOV DPTR,#data16
2、 外部数据传送指令:在CPU与外部数据存储器或外部I/O口之间传送数据,每次传送一个字节,该操作只能使用累加器A来实现,
A、将外部数据送到累加器
MOVX A,@Ri
MOVX A,@DPTR
B、将累加器内容送入外部
MOVX @Ri,A
MOVX @DPTR ,A
C、查表指令用于读取程序存储器的内容,或者在程序存储器中存储的固定表格中查找
一项
MOVC A,@A+DPTR
MOVC A,@A+PC
D、堆栈操作指令:当通过子程序调用、返回等指令使程序的执行流程发生改变时,通
常使用堆栈保存返回地址
PUSH direct
POP direct
F、 数据交换指令用以完成累加器与工作寄存器、内部RAM单元、特殊功能寄存器内容全部或部分互换
字节交换:将累加器A内容与源操作数互换
XCH A,direct
XCH A,Rn
XCH A,@Ri
半字节交换将累加器A的低4位与由Ri内容指定的内部RAM单元的低4位互换,高4位不变
XCHD A,@Ri
练习:假设在内部RAM地址20H处存放着一个BCD数25,编写程序将它转换ASCII码表示,存储在内部RAM地址30H开始的两个单元中
BCD数25H其实表示十进制数25,用ASCII表示时,应转换成字符“2”、“5”的ASCII值32H和35H
MOV R0,#20H ; R0内容为25H存放位置
MOV R1#30H ;R1内容为转换后ASCII码存放位置
MOV @R1,#30H ;ASCII存放外,先初始化为30H
MOV A,@R0 ;A为25H
XCHD A,@R1 ;A与30H互换低4位内容,A为20H,30H内容为35H
SWAP A ;A高低4位互换,为02H
INC R1 ;R1为31H
MOV @R1,#30H ;初始化为30H
XHCD A,@R1 ;A与31H互换低4位内容,A为00H,30H内容为32H
问题1、指令的范围,
2、操作数和地址的区分