专注电子技术学习与研究
当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章

数据传送指令

作者:佚名   来源:本站原创   点击数:  更新时间:2007年09月17日   【字体:

表 3-2  数据传送指令

操作码

目标操作数

可选择的源操作数

说         明

MOV

A

Rn

direct

@Ri

DPTR

 Rn;direct;@Ri;# data

 A;direct;# data

 A;Rn;direct;@Ri;# data

 A;direct;# data

 # data16

 内部传送

 内部传送

 内部传送

 内部传送

 数据指针赋值

PUSH

POP

隐含(SP)

direct

 direct

 隐含(SP)

 压栈,只能用直接寻址

 退栈,只能用直接寻址

XCH

A

 Rn; direct; @Ri

 内部交换

XCHD

SWAP

A

A

 @Ri

 隐含A

 只交换低四位

 A的高、低四位互换

MOVX

A

@Ri

@DPTR

 @Ri; @DPTR

 A

 A

  A与外部数据存储器间传送

MOVC

A

 @A+DPTR; @A+PC

  读外部程序存储器

MOV

C

bit

 bit

 C

  Cy与可寻址位间传送

 

1.      数据传送指令的一般性说明

ê                 指令的一般格式:  操作码  目标操作数,源操作数

操作码  说明操作的性质

操作内容一般为   (目标操作数)(源操作数)

ê                 8位操作数的形式有A、Rn、direct、@Ri、# data 等五种

16位操作数的形式有DPTR 与 # data16

1位操作数的形式有 C 与 bit

ê                 目标与源应同类型,且有规定的允许搭配,一般可逆。

A及direct可全搭配,@Ri、Rn不能相互搭配,# data只可作源.。

ê                 传送指令一般不影响标志位。

直接改写PSW的情况除外,改写Acc影响P标志。

2.      内部数据传送指令(MOV)

ê                 内部RAM、特殊功能寄存器(SFR)之间的数据传送。

ê                 注意立即数 #XXH与直接地址XXH 的区别。

ê                 @Ri指针使用要点:①与循环配合,适用于连续数据区的操作。

②Ri应先赋确定值。i=0,1。

③是XCHD指令唯一的源操作数。

 

3.      外部数据传送(MOVX)

ê                 以指针方式读、写外部数据存储器或I/O端口。

ê                 @DPTR提供16位地址指针,可访问总线扩展的整个64k空间。

ê                 @Ri只提供低8位地址指针,适用于256个地址的小规模总线扩展。

或者由P2口以I/O方式提供高8位(页) 地址,采用页访问模式。例如:

MOV   P2,#30H     ;由P2口提供高8位地址30H

MOV   R0,#0        ;低8位地址为00H

MOVX  A,@R0       ;读(3000H)单元

 

ê                 应用例:将内部30H~40H单元的内容送外部数据存储器,从4000H单元开始存放。


MOV  R0,#30H

MOV  R2,#17

MOV  DPTR,#4000H

LOOP: MOV  A,@R0

MOVX  @DPTR,A

INC  R0

INC  DPTR

DJNZ  R2,LOOP

;设置(内部)源指针初值

;设置循环计数器初值

;设置(外部)目标指针初值

;循环入口,读源数据

;写目标数据

;源指针下移

;目标指针下移

;循环计数器减一,不为0则继续循环


 

4.      读外部程序存储器(MOVC)

ê                 读取外部程序存储器中的数据,用于查表。

ê                 MOVC  A,@A+PC   ;(A)((A)+(PC)+1)

PC为本指令的地址,取指令后加一。

变址偏移量(A)是8位无符号数,因此查表的范围在(PC)+1 ~ (PC)+255。

ê                 MOVC  A,@A+DPTR   ;(A)((A)+(DPTR))

DPTR是16位指针,因此查表的范围为全64k空间。

ê                 应用例:查Y(x)函数表。

3000H  MOV A,#表元素序号

3002H  ADD A,#表头偏移量

3004H  MOVC A, @A+PC

¼¼

       ORG 30A0H

TABLE: DB 17,22,34,58,82,103

表头偏移量=表头地址-(MOVC指令地址+1)

 转载须保留地址:http://www.51hei.com/mcu/280.html

5.      栈操作数据传送指令(PUSH / POP)

ê                 堆栈在内部RAM区。

ê                 PUSH和POP的对象可以是内部RAM单元或SFR。

ê                 寻址方式只能用direct。例如,

PUSH 30H ;(SP)(SP)+1,((SP))(30H)

POP DPH  ;(DPH)((SP)),(SP)(SP)-1

 

6.       交换(XCH / XCHD /SWAP)

ê                 XCH 字节交换:A与内部RAM单元或SFR交换。例如

XCH A,R2  ;(A)«(R2)

ê                 XCHD 半字节交换:A与内部RAM单元进行低四位交换,只能用寄存器间址@Ri。例如

XCHD A,@R1    ;(A)D0- D 3 «((R1))D0- D 3

ê                 SWAP A  ;(A)D0- D 3  «(A)D4- D 7

ê                 应用例:拆字,将压缩BCD码扩展为单字节BCD码。


《堆栈数据传送指令》

MOV  R0, #30H  ; 设立指针

MOV  A, #0     (A)=0

XCHD  A, @R0   (A)=0BH

MOV  R4, A    ;(R4)=0BH

XCH  A,30H    ;(A)=30H

SWAP  A       ;(A)=03H

MOV  R3,A     ;(R3)=03H

 

关闭窗口

相关文章