首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

MCS-51指令详解-3

MCS-51指令详解-3

数据传送指令共有29条,数据传送指令一般的操作是把源操作数传送到目的操作数,指令执行完成后,源操作数不变,目的操作数等于源操作数。如果要求在进行数据传送时,目的操作数不丢失,则不能用直接传送指令,而采用交换型的数据传送指令,数据传送指令不影响标志C,AC和OV,但可能会对奇偶标志P有影响。




[1].
以累加器A为目的操作数类指令(4条)


这4条指令的作用是把源操作数指向的内容送到累加器A。有直接、立即数、寄存器和寄存器间接寻址方式:




MOV  A,Data     ;(Data)→(A) 直接单元地址中的内容送到累加器A


MOV  A,#Data    ;#Data→(A) 立即数送到累加器A中


MOV  A,Rn      ;(Rn)→(A) Rn中的内容送到累加器A中


MOV  A,@Ri     ;((Ri))→(A) Ri内容指向的地址单元中的内容送到累加器A




[2].
以寄存器Rn为目的操作数的指令(3条)


这3条指令的功能是把源操作数指定的内容送到所选定的工作寄存器Rn中。有直接、立即和寄存器寻址方式:




MOV  Rn,Data     ;(Data)→(Rn) 直接寻址单元中的内容送到寄存器Rn中


MOV  Rn,#Data    ;#Data→(Rn) 立即数直接送到寄存器Rn中


MOV  Rn,A        ;(A)→(Rn) 累加器A中的内容送到寄存器Rn中




[3].
以直接地址为目的操作数的指令(5条)


这组指令的功能是把源操作数指定的内容送到由直接地址Data所选定的片内RAM中。有直接、立即、寄存器和寄存器间接4种寻址方式:




MOV  Data,Data   ;(Data)→(Data) 直接地址单元中的内容送到直接地址单元


MOV  Data,#Data ;#Data→(Data) 立即数送到直接地址单元


MOV  Data,A     ;(A)→(Data) 累加器A中的内容送到直接地址单元


MOV  Data,Rn    ;(Rn)→(Data) 寄存器Rn中的内容送到直接地址单元


MOV  Data,@Ri   ;((Ri))→(Data) 寄存器Ri中的内容指定的地址单元中数据送到直接地址单元




[4].
以间接地址为目的操作数的指令(3条)


这组指令的功能是把源操作数指定的内容送到以Ri中的内容为地址的片内RAM中。有直接、立即和寄存器3种寻址方式:




MOV  @Ri,Data    ;(Data)→((Ri)) 直接地址单元中的内容送到以Ri中的内容为地址的RAM单元


MOV  @Ri,#Data   ;#Data→((Ri)) 立即数送到以Ri中的内容为地址的RAM单元


MOV  @Ri,A       ;(A)→((Ri)) 累加器A中的内容送到以Ri中的内容为地址的RAM单元




[5].
查表指令(2条)


这组指令的功能是对存放于程序存储器中的数据表格进行查找传送,使用变址寻址方式:




MOVC  A,@A+DPTR   ;((A))+(DPTR)→(A) 表格地址单元中的内容送到累加器A中


MOVC  A,@A+PC     ;((PC))+1→(A),((A))+(PC)→(A) 表格地址单元中的内容送到累加器A中




[6].
累加器A与片外数据存储器RAM传送指令(4条)


这4条指令的作用是累加器A与片外RAM间的数据传送。使用寄存器寻址方式:




MOVX  @DPTR,A    ;(A)→((DPTR)) 累加器中的内容送到数据指针指向片外RAM地址中


MOVX  A, @DPTR   ;((DPTR))→(A) 数据指针指向片外RAM地址中的内容送到累加器A中


MOVX  A, @Ri     ;((Ri))→(A) 寄存器Ri指向片外RAM地址中的内容送到累加器A中


MOVX  @Ri,A      ;(A)→((Ri)) 累加器中的内容送到寄存器Ri指向片外RAM地址中




[7].
堆栈操作类指令(2条)


这4类指令的作用是把直接寻址单元的内容传送到堆栈指针SP所指的单元中,以及把SP所指单元的内容送到直接寻址单元中。这类指令只有两条,下述的第一条常称为入栈操作指令,第二条称为出栈操作指令。需要指出的是,单片机开机复位后,(SP)默认为07H,但一般都需要重新赋值,设置新的SP首址。入栈的第一个数据必须存放于SP+1所指存储单元,故实际的堆栈底为SP+1所指的存储单元。




PUSH  Data   ;(SP)+1→(SP),(Data)→(SP) 堆栈指针首先加1,直接寻址单元中的数据送到堆栈指针SP所指的单元中


POP  Data    ;(SP)→(Data)(SP)-1→(SP), 堆栈指针SP所指的单元数据送到直接寻址单元中,堆栈指针SP再进行减1操作




[8].
交换指令(5条)


这5条指令的功能是把累加器A中的内容与源操作数所指的数据相互交换。




XCH  A,Rn    ;(A)←→(Rn)累加器与工作寄存器Rn中的内容互换


XCH  A,@Ri   ;(A)←→((Ri))累加器与工作寄存器Ri所指的存储单元中的内容互换


XCH  A,Data  ;(A)←→(Data)累加器与直接地址单元中的内容互换


XCHD  A,@Ri  ;(A3-0)←→((Ri)3-0)累加器与工作寄存器Ri所指的存储单元中的内容低半字节互换


SWAP  A      ;(A3-0)←→(A7-4)累加器中的内容高低半字节互换




[9].
16位数据传送指令(1条)


这条指令的功能是把16位常数送入数据指针寄存器。




MOV  DPTR,#Data16  ;#DataH→(DPH),#DataL→(DPL)16位常数的高8位送到DPH,低8位送到DPL
返回列表