C51片内数据传送指令

前言:

direct代表一个十六进制地址,例如32H,direct代表什么,传入的就是direct地址中的内容,例如MOV A,32H且32H中的内容是20H,那么执行完该指令之后,A中的内容是20H

#data代表一个立即数,使用的时候,将data替换即可,例如#32H,#后面接什么数,传入的就是什么数,例如MOV A,#20H,那么执行完该指令后,A中的内容是20H

@Ri(其中i=0或1,设R0=32H,(32H)=20H,则@R0实际指向的内容:@R0=(32H)=20H,例如MOV A,@R0(R0=32H,(32H)=20H,那么执行完该指令之后,A中的内容是20H))

1.以累加器A为目的寄存器的指令

MOV A,Rn (将Rn中的内容送累加器A)

MOV A,@Ri (将@Ri对应的内容送累加器A,例如MOV A,@R0,且R0=32H,(32H)=20H,那么执行完该指令后A中的内容是20H)

MOV A,direct(直接地址,例如:MOV A,32H)

MOV A,#data(data代表立即数,例如:MOV A,#31H)

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

MOV Rn,A

MOV Rn,direct(例如:MOV Rn,32H)

MOV Rn,#data(例如:MOV Rn,#32H)

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

MOV direct,A (例MOV 12H,A,且12H=01H,A=24H,那么执行完该指令后12H的内容是24H,A中的内容保持24H不变)

MOV direct,Rn (例MOV 11H,R3,且(11H)=02H,R3=09H,那么执行完该指令之后,11H中的内容是09H,R3中的内容保持09H不变)

MOV direct,direct2 (例MOV 12H,32H,且(12H)=00H,(32H)=20H,那么执行完该指令之后12H中的内容为20H)

MOV direct,@Ri (例MOV 02H,@R1,且(02H)=05H,R1=21H,(21H)=15H,那么执行完该指令之后,02H中的内容是15H)

MOV direct,#data (例MOV 05H,#12H,执行完该指令之后,05H中的内容是12H)

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

MOV @Ri,A (例MOV @R1,A,且R1=04H,(04H)=03H,A=22H,那么执行完该指令之后04H中的内容是22H)

MOV @Ri,direct (例MOV @R0,12H,且R0=02H,(02H)=01H,(12H)=20H,那么执行完该指令之后02H中的内容是20H)

MOV @Ri,#data (例MOV @R0,#11H,且R0=01H,(01H)=02H,那么执行完该指令之后01H中的内容是11H)

5.16位数据传送指令

MOV DPTR,#data16 (例MOV DPTR,#0102H,那么执行完该指令之后,DPTR中的内容就是0102H,注意这里是16位的地址,可小不可大,如果小最好用00补全前两位)

6.堆栈操作指令

进栈指令PUSH direct (例PUSH 32H,(32H)=20H,那么就将20H压栈了)

出栈指令POP direct (例POP 12H,那么执行完该指令之后就将栈底数据送入了12H单元)

7.交换指令

7.1 字节交换指令:

XCH A,Rn (例XCH A,R3,设A中原始数据为16H,R3中原始数据为11H,那么执行完该指令后A中的数据为11H,R3中的数据为16H)

XCH A,direct (例XCH A,32H,设A中原始数据为01H,32H中的原始数据为12H,那么执行完该指令之后A中的数据为12H,32H中的数据为01H)

XCH A,@Ri (例XCH A,@R0,设A中原始数据为03H,R0=32H,32H中的原始数据为64H,那么执行完该指令之后,A中的数据为64H,32H中数据为03H)

7.2 半字节交换指令

XCHD A,@Ri (低四位交换,例XCHD A,@R0,且A中的原始数据为12H,R0=20H,且(20H)=34H,那么执行完该指令之后,A中的数据为14H,20H中的数据为32H)


纯手打总结,如有错误望大家指出,有好的建议亦可以提出来,谢谢!

猜你喜欢

转载自blog.csdn.net/ZC_25/article/details/78523372
C51
今日推荐