单片机学习笔记系列:汇编语言数据传送类指令详解与入门指南

数据传送类指令包括:数据传送,数据交换,栈操作

数据传送指令

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和夕

物联沃分享整理
物联沃-IOTWORD物联网 » 单片机学习笔记系列:汇编语言数据传送类指令详解与入门指南

发表回复