寻址办法:寻址便是寻觅操作数的地址。绝大多数指令履行时都需求操作数,因而就存在怎么确认操作数地址的问题。所谓寻址办法便是经过什么途径获取操作数的办法。依据指令操作的需求,核算机总是供给多种寻址办法。一般来说,寻址办法越多核算机的寻址才能就越强,但指令系统也就越杂乱。
8051指令系统有7种寻址办法:寄存器寻址,直接寻址,寄存器直接寻址,当即寻址,基址寄存器加变址寄存器直接寻址,相对寻址,位寻址,下面别离介绍。
寄存器寻址
寄存器寻址:寄存器寻址便是操作数在寄存器中,因而指定了寄存器就得到了操作数。选用寄存器寻址办法的指令都是一字节的指令,指令中以符号称号来表明寄存器。例如:MOV A R1 这条指令的功用是把作业寄存器R1的内容传送到累加器A中,因为操作数在R1中,因而指令中指定了R1,也就得到了操作数。
寄存器寻址办法的寻址规模包含:作业寄存器组R0~R7,部分特别寄存器ACC,B,DPTR等。
直接寻址
直接寻址:直接寻址便是在指令中直接给出操作数地点单元的实在地址。这儿给出的操作数直接地址为8位二进制地址。程序中一般用十六进制数表明。例如:指令MOV A,30H 把内部RAM单元30H中的数据传送给累加器A,指令中30H便是操作数的直接地址。
直接寻址办法的寻址规模包含:内部数据存储器低128单元,特别功用寄存器。
特别功用寄存器在指令的表明中除了能够以直接地址办法给出外,还能够以寄存器符号办法给出,如对累加器A,在指令中可运用其直接地址OEOH,也可运用其符号办法ACC。
当即寻址
当即寻址:当即寻址办法便是实践操作数作为指令的一部分,在指令中直接给出,取指令时,可在程序存储器中直接获得操作数。
一般把出现在指令中的操作数称为当即数。选用当即寻址办法的指令,在当即数前面加上当即寻址符“#”。例如指令MOV A,#30H中30H便是当即数,指令功用为将30H赋给累加器A。
8051中除了一条指令需16位长的当即数外,其他都是8位的当即数,这条16位的当即寻址指令是:MOV DPTR,#data16 指令的功用是将16位的当即数赋给数据指针DPTR寄存器。
寄存器直接寻址
寄存器直接寻址:寄存器直接寻址办法中,寄存器内寄存的是操作数的地址,即操作数是经过寄存器直接得到的,因而称为寄存器直接寻址。
寄存器的直接寻址需求以寄存器符号的办法来表明,且在寄存器称号前面加上直接寻址符号“@”。例如指令MOV A,@R0就运用了寄存器直接寻址办法,这条指令的含义为将地址指针R0指向的内部数据存储器单元中的数据送入累加器A中。
假定R0中内容为30H,则此指令的功用是以R0寄存器的内容30H为地址,把内部RAM 30H单元中的内容传送给累加器A。
8051规则,选用R0、R1 DPTR作为直接寻址寄存器,可寻址片内数据存储器RAM的低128B单元和片外数据存储器的低256单元。
选用DPTR作间址寄存器,可寻址片外数据存储器的整个64KB地址空间。仓库指针SP用于指示仓库操作的地址,因而,PUSH和POP指令也是寄存器直接寻址。
基址寄存器加变址寄存器直接寻址
基址寄存器加变址寄存器直接寻址:这种寻址办法用于寻址程序存储器的地址空间,它是以DPTR或PC作基址寄存器,以累加器A作为变址寄存器,以两者的内容之和构成的16位数作为操作数地址,也称为变址寻址。
例如指令MOVC A,@A+DPTR便是变址寻址,其功用为把DPTR和A的内容之和作为程序存储器的地址,再将程序存储器中该地址单元的内容传送给累加器A。
假设履行指令前,A=30H。 DPTR=22F1H。依据本寻址办法构成的操作数地址为22F1H+30H=2321H。程序存储器ROM的地址单元2321H中内容为68H。故指令履行成果为A的内容变为68H。
这种寻址办法是专门针对程序存储器的寻址办法。基址寄存器不同,其寻址规模不同。
用PC作基址寄存器时,寻址规模为以当时PC值为开始的256B。
MOVC A,@A+PC 寻址规模为64KB程序存储器空间。
选用这种寻址办法的指令只要3条。MOVC A,@A+DPTR MOVC A,@A+PC JMP @A+DPTR前2条是程序存储器读指令,也称查表指令。后1条是无条件搬运指令,又名散转指令。
相对寻址
相对寻址:相对寻址办法是为完成程序的相对搬运而规划,由相对搬运指令所选用。在这种寻址办法下,将程序计数器PC的当时值加上由指令中给出的偏移量rel,然后构成了程序搬运的意图地址。
这儿应留意,PC的当时值为该相对搬运指令的下一条指令的地址。因而搬运意图地地址可表明如下:意图地址=搬运指令地址+搬运指令字节数+rel,相对地址的偏移量rel是一个8位带符号二进制补码,规模为+127—-128。即相对寻址时,向前可跳转127字节,向后可跳转128字节。
例如在程序存储器地址2000H处有一条选用相对寻址办法的两字节搬运指令JC 35H,并且在履行此指令前进位CY=1,依照指令的功用应发生相对搬运JC 35H为两字节指令,因而在核算意图地址时,PC的当时值为下一条指令的地址2002H,偏移量为35H,因而核算出的意图地址为2037H,将它赋给PC,则程序搬运到2037H地址持续运转。
位寻址
位寻址:8051具有独立的位处理机即布尔处理机,对寻址的位进行处理。相应的,在指令系统中有一类位操作指令,它们仅答应选用位寻址办法,直接寻址内部数据存储器16个字节单元的128个位,以及特别功用寄存器中可直接寻址的位,可位寻址的各位都具有独立的8位二进制表明的位地址。
在布尔处理机中,以进位位CY作为位累加器。例如指令ANL C,31H便是一条位寻址指令,其功用是布尔累加器C的值与位地址31H中的值进行逻辑“与”操作。
位寻址办法的寻址规模是内部ROM中字节地址20H~2FH的16字节单元共128个二进制位,位地址为00~7FH。在8051中,位地址的表明能够选用下面几种办法:
直接运用位地址表明 ,例如进位位CY的位地址为0D7H。
选用字节单元地址加位的表明法,如20H.5,表明字节单元地址20H的位5。这种表明法能够防止查表或核算,比较便利。对可位寻址的特别功用寄存器可直接用寄存器称号加位的办法。如以PSW.7表明进位位CY,以ACC.5表明累加器ACC的第五位。
运用位称号:在可位寻址的特别功用寄存器中,一些位是有符号称号的,例如PSW中位5是F0标志,可用直接F0表明该位,进位位可用CY表明等。