MCS-51寻址方式
立即寻址
原操作数为需要写入的数据.直观一点说,类似于赋值语句.
MOV A,#20H
其中#20H为原操作数,#用来说明该操作数是常数,也就是所谓的立即数,而不是一个地址
这里20H虽然是可位寻址区,但是该指令是将20H单元中内容送到A
直接寻址
原操作数为地址,表示将原操作数所指向的地址中的数据送到目的操作数中.
MOV A,32H
直接寻址可以访问
- SFR
- 内部RAM的低128字节
- 位地址
寄存器寻址
将寄存器中的数据送到目的操作数中.于直接寻址相似,就是将原操作数从具体地址变成了寄存器
MOV A,R1
寄存器间接寻址
先将所取数据的地址放到工作寄存器中,通过访问工作寄存器来间接访问数据
MOV A,@R0
比如我在R0中放了一个地址60H,然后我去@R0=60H,所以上面这条指令就等效于
MOV A,60H
寄存器间接寻址可以用的寄存器有R0,R1 | DPTR | SP.所以可以从
- 内部RAM低128字 R0 | R1
- 外部RAM的低128位 R0 | R1
- 外部RAM DPTR
- 堆栈 SP
寄存器间接寻址是访问寄存器内存储的数据所代表的地址
寄存器寻址是访问寄存器内的数据
基址加变址寻址
类似于数组的操作.其中基址寄存器中存储数组首地址,变址寄存器存放下标
MOVC A,@A+DPTR
这种寻址方式只能对ROM寻址
位寻址
对位寻址区和可位寻址的SFR进行操作
MOV C,20H
位地址可以表示如下
- 使用位地址
- 位名.如进位位Cy
- 位寻址区地址加位.20H中D1位:20H.1
- 特殊功能寄存器加位.Cy位又可表示为PSW.7