单片微机原理与接口技术——8051汇编指令系统与编程基础(2)数据传送指令

文章目录

    • 数据传送指令
        • 一、通用数据传送
            • 1.以累加器为目的操作数的指令
            • 2.以Rn为目的操作数的指令
            • 3.以直接地址direct为目的操作数的指令
            • 4.以寄存器间接地址为目的操作数的指令
            • 5.16位数传送指令
        • 二、堆栈操作指令
            • 1. 进栈指令
            • 2. 出栈指令
        • 三、累加器A与外部数据存储器RAM/IO传送指令
            • 1. 读外部RAM/IO P4.4有效
            • 2. 写外部RAM/IO P4.2有效
        • 四、查表指令
            • 1. MOVC A,@A+PC
            • 2. MOVC A,@A+DPTR
        • 五、数据交换指令
            • 1. 字节交互指令
            • 2.半字节交换指令
            • 3.累加器半字节交换指令

数据传送指令

一、通用数据传送

MOV 目的操作数,源操作数
不影响PSW中的CY、AC、OV标志位。单片微机原理与接口技术——8051汇编指令系统与编程基础(2)数据传送指令_第1张图片

1.以累加器为目的操作数的指令

MOV A,Rn ; (Rn)→A,n =0~7
MOV A,@ Ri ; ((Ri))→A i =0,1
MOV A,direct ; (direct)→A
MOV A,#data ; #data→A

把源操作数内容送累加器A,源操作数有寄存器寻址、直接寻址、间接寻址和立即数寻址等方式。例如:

MOV A,R6 ;(R6)→A,寄存器寻址
MOV A,@R0 ;((R0))→A,间接寻址
MOV A,70H ;(70H)→A,直接寻址
MOV A,#78H ;78H→A,立即数寻址

2.以Rn为目的操作数的指令

MOV Rn ,A ;(A)→Rn ,n =0~7
MOV Rn ,direct ;(direct)→Rn ,n =0~7
MOV Rn ,#data ;#data→Rn ,n =0~7

把源操作数送入当前寄存器区的R0~R7中的某一寄存器。例如:

MOV R6 ,A ;A →R6,寄存器寻址
MOV R2 ,70H ;(70H)→ R2 ,直接寻址
MOV R5 ,#78H ;78H→ R5 ,立即数寻址

3.以直接地址direct为目的操作数的指令

MOV direct,A ; (A)→direct
MOV direct,Rn ; (Rn)→direct,n =0~7
MOV direct1,direct2 ;(direct2)→direct1
MOV direct,@Ri ; ((Ri))→direct,i =0,1
MOV direct,#data ; #data→direct
把源操作数送入direct指定的存储单元。
direct为内部RAM或SFR地址。

4.以寄存器间接地址为目的操作数的指令

MOV @Ri,A ;(A)→((Ri)), i=0,1
MOV @Ri,direct ;(direct)→((Ri)),i=0,1
MOV @Ri,#data ;#data→((Ri)), i=0,1
功能是把源操作数内容送入R0或R1指定的存储单元中。

5.16位数传送指令

MOV DPTR,#data16;#data16→DPTR
功能是把16位立即数送入DPTR,用来设置数据存储器的地址指针。

二、堆栈操作指令

堆栈----内部RAM中的后进先出(LIFO)的区域。
堆栈指针SP,指示堆栈的栈顶位置。

1. 进栈指令

PUSH direct
先(SP)+1 → SP,后(direct) → 栈顶单元。例如:

当(SP)=60H,(A)=30H,(B)=70H时,执行下列指令
PUSH Acc ;(SP)+1=61H→SP,(A)→61H
PUSH B ;(SP)+1=62H→SP,(B)→62H
结果:(61H)=30H,(62H)=70H,(SP)=62H。

2. 出栈指令

POP direct
先将SP指示的栈顶单元的内容送入direct单元中,再SP减1。例如:

当(SP)=62H,(62H)=70H,(61H)=30H时,执行指令
POP DPH ;((SP))→DPH,(SP)-1→SP
POP DPL ;((SP))→DPL,(SP)-1→SP
结果为(DPTR)=7030H,(SP)=60H。

三、累加器A与外部数据存储器RAM/IO传送指令

1. 读外部RAM/IO P4.4有效

MOVX A,@DPTR ;((DPTR))→A
MOVX A,@Ri ;((Ri))→A

2. 写外部RAM/IO P4.2有效

MOVX @DPTR,A ;(A)→((DPTR))
MOVX @Ri ,A ;(A)→((Ri))
@DPTR可寻址64KB片外数据RAM,高8位地址(DPH)由P2口输出,低8位地址(DPL)由P0口输出。
@Ri可寻址片外256B数据RAM。8位地址由P0口输出。

四、查表指令

读程序存储器中的表格数据到A中,采用基址寄存器加变址寄存器间接寻址方式。

1. MOVC A,@A+PC

(PC)+(A)=新的16位地址,(新地址)→A。
例如:

1000H: MOVC A,@A+PC
若 (A)=30H, (PC)=1000H+指令长度=1001H,得 (1031H) →A。

**优点:**不改变PC的值,根据A的内容就可取出表格中的常数。
**缺点:**表格只能存放在该指令所在地址的+256个单元之内。

2. MOVC A,@A+DPTR

(DPTR)+(A) =新的16位地址,(新地址)→A。
例如:

MOVC A,@A+DPTR
已知(DPTR)=8100H,(A)=40H,
则将程序存储器中8140H单元内容送入A中。
表格的大小和位置可以在64KB程序存储器空间中任意安排。

五、数据交换指令

1. 字节交互指令

XCH A,Rn ; (A) ( Rn),n =0~7
XCH A,direct ; (A) ( direct)
XCH A,@Ri ; (A) (( Ri)),i=0,1

将累加器A的内容和源操作数的内容相互交换。

2.半字节交换指令

XCHD A,@Ri
累加器的低4位与内部RAM低4位交换。

3.累加器半字节交换指令

SWAP A
累加器的低4位与高4位交换。

例1:

(A)=80H,(R7)=08H,(40H)=F0H, (R0)=30H,(30H)=0FH
执行指令: XCH A,R7
XCH A,40H
XCH A,@R0
结果为(A)=0FH,(R7)=80H,(40H)=08H,(30H)=F0H。

例2:

(R0)=60H,(60H)=3EH,(A)=59H
执行指令:XCHD A,@R0
SWAP A
则(A)=E5H,(60H)=39H。

你可能感兴趣的:(STC15)