执行任何一条指令都需要使用操作数。寻址方式就是根据指令中给出地址寻找操作数地址的方式。
根据指令操作的需要,计算机有多种寻址方式。总的来说,寻址方式越多,计算机的功能就越强,灵活性越大,指令系统也越复杂,因此,在设定寻址方式时,应考虑到需要和可能. 51单片机指令系统中共有7种寻址方式。
1.立即寻址:
立即寻址是指在指令中直接给出操作数,出现在指令中的操作数称为立即数,因此就将这种寻址方式称为立即寻址.为了与直接寻址指令中的直接地址相区别,在立即数前面应加前缀“#”。立即寻址时,指令中地址码部分给出的就是操作数,即取出指令的同时立即得到了操作数,例如指令:
MOV A,#3EH ;A ---3EH
式中,3EH就是立即数,指令功能是把8位立即数3EH送入累加器A.
此外,在指令系统中还有一条16位立即数指令,即:
MOV DPTR, #datal6
其功能是把16位立即数送入数据指针I寄存器。
2.直接寻址
直接寻址时,指令中地址码部分直接给出了操作数单元的有效地址.例如指令:
MOV A,7EH ;A --- (7EH)
其功能是把片内RAM中7EH单元内的数据传送给累加器A。
直接寻址方式只能给出8位地址,因此,此种寻址方式的寻址范围只限于片内RAM,具体地说:
(1)低128单元在指令中直接以单元地址形式给出。
(2)特殊功能寄存器,这时除了可以单元地址形式给出外,还可以寄存器符号形式给出。虽然特殊功能寄存器可以便用符号标志,但在指令代码中还是按地址进行编码的。需要说明的是,直接寻址是访问特殊功能寄存器的惟一方法。
3.寄存器寻址:
寄存器寻址是指在指令中将指定寄存器的内容作为操作数。因此,指定了寄存器就能得到操作数.寄存器寻址时,指令中地址码给出的是某—通用寄存器的编号,例如指令:
MOV A , R1 ; A---(R1)
其功能是把寄存器R1的内容送到累加器A中。由于操作数在A中,所以指定了R1也就得到了操作数。寄存器寻址方式的范围包括:
(1)4个寄存器组共32个通用寄存器,但在指令中只能使用当前寄存器组.因此,在使用前要通过t指定psw中的Rs1、RS0,以选择当前寄存器组。
(2)部分特殊功能寄存器。例如,累加器A、寄存器B以及数据指针 DPTR。
4.寄存器间接寻址
寄存器间接寻址是指在指令中要到寄存器的内容所指的地址中去取操作数。可以看出,在寄存器寻址方式中,寄存器中存放的是操作数;而在寄存器间接寻址方式中,寄存器中存放的则是操作数的地址,即寄存器为地址指针。这就是说,指令的操作数是通过寄存器间接得到的,因此称为寄存器间接寻址。
寄存器间接寻址也需要以寄存器符号名称的形式表示。为了区别寄存器寻址和寄存器间接寻址,在寄存器间接寻址中,应在寄存器的名称前加前缀“@”,例如指令:
MOV A,@R0; A---((R0))
寄存器间接寻址的寻址范围是: