1.寄存器寻址
指令举例:MOV A,R0
该指令功能:将寄存器R0中的内容送累加器A中
详细说明:假设R0中的内容是16进制数20H,那么执行这条指令之后,累加器A中的内容是20H 即十进制数:32
2.直接寻址
指令举例:MOV A,30H
该指令功能:将地址单元30H中的内容送累加器A中
详细说明:假设地址单元30H中的内容是20H,那么执行该指令之后,累加器A中的内容是:20H 即十进制数32
3.寄存器间接寻址
指令举例:MOV A,@R0
该指令功能:将R0指向的内存单元中的内容送累加器A中
详细说明:为和寄存器直接寻址区别,汇编语言中,寄存器间接寻址中的寄存器前面会加上一个@以示区别,假设R0中的内容是10H,(10H)=20H,那么执行完该指令之后,累加器A中的内容是20H,即有A=@R0=(10H)=20H,这有点类似于高级语言中的指针,@R0指向内存地址单元10H,而10H中的内容是20H,该指令的功能就是将@R0所指向的内存地址单元10H中的内容送累加器A中。
4.立即数寻址
指令举例:MOV A,#30H
该指令功能:将立即数30H送累加器A
详细说明:为和直接寻址区别开来,汇编语言中利用#区别常数和内存地址,我们知道,寄存器直接寻址中,后面一个操作数中存储的是内存单元地址,而在立即数寻址中,后一个操作数是一个常数,所以该指令的功能最直接,相当于高级语言中的赋值操作,即将常数30H送累加器A,完成该指令之后,累加器A中的内容是:30H
注意:立即数寻址中有一条特殊的指令MOV DPTR,#立即数,这里的立即数是16位的,即该立即数可以有有16个二级制位
5.变址寻址
指令举例:MOVC A,@A+DPTR
该指令功能:将累加器A中的内容和DPTR的值(DPTR中的是内存地址)相加得到一个内存地址,将该内存地址中的内容送累加器A中
详细说明:假设该指令执行之前:A=54H,DPTR=3F21H,那么@A+DPTR=(3F75H),假设内存地址3F75中的内容是20H,那么执行完该指令之后,A中的值为20H
注意:这里的操作码是MOVC而不是MOV,且变址寻址的指令只有三条:
MOVC A,@A+DPTR
MOVC A,@A+PC
JMP @A+DPTR
并且该指令只用于程序存储器,即ROM
暂时只介绍这几种基本的寻址方式,后面应该会继续更新。
如有错误,望大家指出。