传送类指令是指令系统中最基本、使用最多的一类指令,主要用于数据的传送、保存及交换等。
传送类用于把源操数传送到目的操作数,指令执行后,源操作数不变,目的操作数修改为源操作数。
数据传送类指令用到的助记符有MOV、MOVC、MOVX、XCH、XCHD、SWAP、PUSH、POP共8种。源操作数可以采用寄存器、寄存器间接、直接、立即、变址5种寻址方式,目的操作数采用前三种寻址方式。
1.对内部RAM和SFR的一般数据传送指令(15条)
(1)以累加器A为目的操作数的指令(4条)。
这组指令的功能是把源操作数指定的内容送入累加器A中。使用寄存器寻址、直接寻址、寄存器间接寻址和立即寻址4种寻址方式。
MOV A,Rn ;A←(Rn)
MOV A,direct ;A←(direct)
MOV A,@Ri ;A←((Ri))
MOV A,#data ;A←data
【例3.1】已知(A)=40H,(R6)=50H,(6FH)=32H,(R0)=18H,(18H)=10H,执行下列程序段:
MOV A,R6 ;A←50H
MOV A,6FH ;A←32H
MOV A,@R0 ;A←((R0))
执行后,A=10H。
(2)以寄存器Rn为目的操作数的指令(3条)。
这组指令的功能是把源操作数指定的内容送到所选定的工作寄存器Rn中。使用寄存器寻址、直接寻址和立即寻址3种寻址方式。
MOV Rn,A ;Rn←(A)
MOV Rn,direct ;Rn←(direct)
MOV Rn,#data ;Rn←data
【例3.2】已知(A)=3FH,(4EH)=2FH,(R1)=20H,(R3)=30H,执行下列程序段:
MOV A,#2EH ;A←2EH
MOV R1,A ;R1←(A)
MOV R2,4EH ;R2←(4EH)
MOV R3,#6FH ;R3←6FH
执行后,A=2EH,R1=2EH,R2=2FH,R3=6FH。
(3)以直接地址为目的操作数的指令(5条)。
这组指令的功能是把源操作数指定的内容送到由直接地址direct所指定的片内RAM中。使用寄存器、直接、寄存器间接和立即4种寻址方式。
MOV direct,A ;(direct)←(A)
MOV direct,Rn ;(direct)←(Rn)
MOV direct1,direct2 ;(direct1)←(direct2)
MOV direct,@Ri ;(direct)←((Ri))
MOV direct,#data ;(direct)←data
【例3.3】已知(30H)=1FH,(40H)=5FH,执行指令:
MOV 30H,40H ;(30H)←(40H)
执行后,(30H)=5FH。
(4)以间接地址为目的操作数的指令(3条)。
这组指令的功能是把源操作数指定的内容送到以Ri中的内容为地址的片内RAM中。使用寄存器、直接和立即3种寻址方式。
MOV @Ri,A ;((Ri))←(A)
MOV @Ri,direct ;((Ri))←(direct)
MOV @Ri,#data ;((Ri))←data
【例3.4】利用直接寻址把立即数32H送到内部RAM的20H单元。
MOV 20H,#32H
【例3.5】利用寄存器间接寻址把立即数32H送入内部RAM的20H单元。(www.xing528.com)
MOV R0,#20H
MOV @R0,#32H
2.累加器A与程序存储器的传送指令(2条)
这组指令的功能是对存放于程序存储器中的表格数据进行查找传送。使用变址寻址方式。
MOVC A,@A+DPTR ;A←((A)+(DPTR))
MOVC A,@A+PC ;A←((A)+(PC))
3.累加器A与片外RAM传送指令(4条)
这组指令用于累加器A与片外RAM间的相互传送。由于MCS-51指令系统中没有专门的输入/输出指令,且片外扩展的I/O口与片外RAM是统一编址的,故以下4条指令也可以作为输入/输出指令。其使用寄存器间接寻址方式。
MOVX A,@DPTR ;A←((DPTR))或读I/O线
MOVX @DPTR,A ;((DPTR))←(A)或写I/O线
MOVX A,@Ri ;A←((Ri))或读I/O线
MOVX @Ri,A ;((Ri))←A或写I/O线
4.堆栈操作类指令(2条)
该类指令的功能是把直接寻址单元的内容传送到堆栈指针SP所指向的单元中,以及把SP所指单元的内容送到直接寻址单元。
PUSH direct ;SP←(SP)+1,((SP))←(direct)
POP direct ;(direct)←((SP)),SP←(SP)-1
前一条指令称为入栈指令,后一条指令称为出栈指令,51单片机复位后,(SP)=07H,为防止与工作寄存器组发生冲突,一般需重新设定SP的初始值。由于压入堆栈的第一个数必须存放在SP+1所指存储单元,故实际的栈底为SP+1所指向的存储单元。
【例3.6】设(10H)=01H,(20H)=1AH。将内部RAM 10H与20H单元的内容交换。
MOV SP,#30H
PUSH 10H ;10H单元内容进栈
PUSH 20H ;20H单元内容进栈
POP 10H ;将栈顶元素弹出,送往10H单元
POP 20H ;再将下一个元素出栈,送往20H单元
执行结果:(10H)=1AH,(20H)=01H
[例3.7]根据累加器A中的数(0~9)查平方表的子程序。
COUNT:PUSH DPH ;保护DPTR内容
PUSH DPL
MOV DPTR,#TABLE ;赋表首址
MOVC A,@A+DPTR ;查表并传送给A
POP DPL ;恢复DPTR原值
POP DPH
RET ;返回主程序控制
TABLE:DB 00,01,04,09,16,25,36,49,64,81
5.交换指令(4条)
该类指令的功能是把累加器A中的内容与源操作数所指出的数据相互交换。使用寄存器、直接和寄存器间接3种寻址方式。
XCH A,Rn ;(A)↔(Rn)
XCH A,direct ;(A)↔(direct)
XCH A,@Ri ;(A)↔((Ri))
XCHD A,@Ri ;(A3~0)↔((Ri)3~0)
6.16位数据传送类指令(1条)
MOV DPTR,#data16
该指令的功能是把16位常数送入数据指针寄存器。使用立即寻址方式。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。