单片机学习笔记系列:汇编语言数据传送类指令详解与入门指南
数据传送类指令包括:数据传送,数据交换,栈操作
数据传送指令
1.MOV指令
作用区间:内部数据存储器RAM和特殊功能寄存器(直接寻址)SFR
对于双操作数的指令允许工作寄存器,内部数据RAM,累加器A(8位寄存器),和特殊功能寄存器SFR任意传送1个字节的数据
1.立即数送累加器A,Rn(工作区的工作寄存器),内部RAM,SFR:
MOV A,#data8 ;A<-#data8
MOV addr8,#data8 ;(addr8)<-#data8
MOV @Ri,#data8 ;(Ri)<-#data8
MOV Rn,#data8 ;Rn<-#data8
2.Rn,内部RAM,SFR与累加器A传送数据:
MOV A,addr8 ;A<-(addr8)
MOV A,@Ri ;A<-(Ri)
MOV A,Rn ;A<-Rn Ri是8位寄存器
MOV addr8,A ;(addr8) <-A
MOV @Ri ,A ;(Ri) <-A
MOV Rn,A ;Rn<-A
3.Rn,SFR,和内部数据RAM之间的数据传送:
MOV addr8,addr8 ;( addr8)<-( addr8)
MOV addr8,@Ri ; ( addr8)<-(Ri)
MOV addr8,Rn ; (addr8)<-Rn
MOV @Ri,addr8 ;(Ri)<-(addr8)
MOV Rn,addr8 ;Rn<-(addr8)
4.目标地址的传送:
MOV DPTR,#addr16 DPTR是16位的寄存器
eg. MOV DPTR,#0150H
表示把16位常数装入数据指针,其中DPH=01H,DPL=50H
2.MOVX指令(只能间接寻址)
外部数据寄存器(16位)(或扩展并行IO口)与累加器A(8位)传送指令
1.用R1或R0进行寄存器间接寻址
可以访问256个字节中的1个字节,如果要访问更大的空间需要(P0口锁存低8位,保存地址,再送数据),P2输出高8位;使用时先给Ri和P2赋值
2.用16位的数据存储器地址指针DPTR进行间接寻址
可以访问64KB的外部数据存储器的任何单元
MOVX A,@DPTR
MOVX A,@Ri
MOVX @DPTR,A
MOVX @Ri,A
3.MOVC指令(变址寻址)
程序存储器向累加器A传送指令
MOVC A,@A+PC 这两条指令常用于查表
MOVC A,@A+DPTR ;,当DPTR作为基地址,如果DPTR已经被其他使用,需要进行保护及(使用PUSH与POP进行堆栈操作)
数据交换指令
1.字节交换指令
将累加器A中的内容与工作寄存器,间接寻址或直接寻址的某单元的内容互相交换
XCH A,addr8 ;A<–>(addr8)
XCH A@Ri ;A<–>(Ri)
XCH A,Rn ;A<–>Rn
2.半字节交换指令
该指令是将累加器A的低4位与寄存器间接寻址的内部RAM单元的低4位交换,高4位不变,不影响标志位
XCHD A,@Ri
eg.R1的内容位30H,A的内容为69H,内部RAM中30H单元的内容为87H,执行该指令
XCHD A,@R1
A的内容变成了67H,30H的内容变成了89H
栈操作指令
PUSH addr8;SP<-SP+1,(SP)<-(addr8) 入栈:先SP+1->SP,指向栈顶的上一个空单元,然后把直接寻址单元的内容压入SP所指的单元中
POP addr8 ;(addr8)<-(SP)SP<-SP-1 出栈:先弹出栈顶内容到直接寻址单元,然后SP-1->SP,形成新的堆栈指针
将累加器压入或弹出堆栈只能使用PUSH ACC和POP ACC
作者:RaLi和夕