MOV 目的操作数,源操作数
不影响PSW中的CY、AC、OV标志位。
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,立即数寻址
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 ,立即数寻址
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地址。
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指定的存储单元中。
MOV DPTR,#data16;#data16→DPTR
功能是把16位立即数送入DPTR,用来设置数据存储器的地址指针。
堆栈----内部RAM中的后进先出(LIFO)的区域。
堆栈指针SP,指示堆栈的栈顶位置。
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。
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。
MOVX A,@DPTR ;((DPTR))→A
MOVX A,@Ri ;((Ri))→A
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中,采用基址寄存器加变址寄存器间接寻址方式。
(PC)+(A)=新的16位地址,(新地址)→A。
例如:
1000H: MOVC A,@A+PC
若 (A)=30H, (PC)=1000H+指令长度=1001H,得 (1031H) →A。
**优点:**不改变PC的值,根据A的内容就可取出表格中的常数。
**缺点:**表格只能存放在该指令所在地址的+256个单元之内。
(DPTR)+(A) =新的16位地址,(新地址)→A。
例如:
MOVC A,@A+DPTR
已知(DPTR)=8100H,(A)=40H,
则将程序存储器中8140H单元内容送入A中。
表格的大小和位置可以在64KB程序存储器空间中任意安排。
XCH A,Rn ; (A) ( Rn),n =0~7
XCH A,direct ; (A) ( direct)
XCH A,@Ri ; (A) (( Ri)),i=0,1
将累加器A的内容和源操作数的内容相互交换。
XCHD A,@Ri
累加器的低4位与内部RAM低4位交换。
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。