前言:
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)
纯手打总结,如有错误望大家指出,有好的建议亦可以提出来,谢谢!