(寻址方式:所谓寻址方式就是CPU执行那一条指令时如何找到该指令所要求操作数的方式)
- 寄存器寻址
- 操作数放在寄存器中,在指令中直接以寄存器的名字来表示操作数的地址。例如MOV A, RO,即将R0寄存器的内容送到累加器A中
- 立即寻址
- 操作数直接出现在指令中,紧跟在操作码的后面,作为指令的一-部分与操作码一起存放在程序存储器中,可以立即得到并执行,例如: MOVA #30H指令中30H就是立即数,。这一条指令的功能是执行将立即数30H传送到累加器A中的操作。
- 寄存器间接寻址
- 由指令指出某一寄存器的内容作为操作数地址的寻址方法,例如: MOVA, @R1,将以工作寄存器R1中的内容为地址的片内RAM单元的数据传送到A中去
- 直接寻址
- 指令中直接给出操作数所在的存储器地址,以供取数或存数的寻址方式称为直接寻址。例如: MOVA, 40H指令中的源操作数就是直接寻址,40H为操作数的地址。该指令的功能是把片内RAM地址为40H单元的内容送到A中
- 変址寻址
- 基地址寄存器加变址寄存器间接寻址
- 相对寻址
- 相对寻址是以当前程序计数器PC值加上指令中给出的偏移量rel,而构成实际操作数地址的寻址方法。它用于访问程序存储器,常出现在相对转移指令中。
- 位寻址
- 位寻址是在位操作指令中直接给出位操作数的地址,可以对片内RAM中的128 位和特殊功能寄存器SFR中的93位进行寻址
- 课后练习题:比较下列两条指令的区别
- MOV A,#24H 与 MOV A,24H
- 前者是立即寻址,功能是将立即数24H直接传送到累加器A中
- 后者是直接寻址,功能是将地址为24H的操作数传送到累加器A中
- MOV A,R0 与 MOV A,@R0
- 前者是寄存器寻址,直接将R0寄存器中的数据传送到A中
- 后者是寄存器间接寻址,功能是将地址指针R0所指向内部数据存储器单元中的数据送入累加器A中
- MOV A,@R0 与 MOVX A,@R0
- 前者是寄存器间接寻址,功能是将R0中的数据作为地址进行寻址所得到的片内数据送入片内寄存器A中
- 后者是寄存器间接寻址,功能是将R0中的数据作为地址进行寻址所得到的片外RAM数据送入A中
- MOVX A,@DPTR
- 用基址寄存器DPTR做地址指针访问片外RAM的整个64kb存储空间
- DPTR也可用于查表 MOVC A,@A+DPTR
- MOV A,#24H 与 MOV A,24H