MCS- 51系列单片机的指令系统是一种简明高效的指令系统,其根本指令共有111条,其间单字节指令49条,双字节指令4'5条,三字节指令17条。假如按功用可以讲这些指令分为五类:数据传送类(29条)、算术操作类(24条)、逻辑操作类(24条)、操控搬运类(17条)以及位变量操作类(17条)。关于反向规划而言,咱们关怀的不是它的各种详细指令的多少而是指令的寻址办法。所谓的寻址办法便是寻觅承认参加操作的数的真实地址。MCS-51系列单片机的111条指令总共只选用了5种寻址办法。5种寻址办法以及它们的寻址空间如表1所示。
1.寄存器寻址
寄存器寻址办法可用于拜访选定寄存器区的8个作业寄存器RO-R7。由指令操作码的低三位指示所用的寄存器,寄存器A, B, DPTR, AB和Cy位(位处理机的累加器)也可作为寻址目标。在这种寻址办法中被寻址的寄存器的内容便是操作数。
在完成这类寻址办法时,承认被寻址寄存器的物理地址时要害。由于选定寄存器区由PSW的相关位来决议,指令的低三位又指示了详细的寄存器,所以可以用下面的VHDL句子来承认相关寄存器的物理地址:
rr_ adr<=unsigned((psw and“00011000”)or(rom_data_i and“00000111”));
其间rr_ adr表明的是寄存器的物理地址,rom_data_i表明的是指令代码。物理地址承认今后,对RAM的操作就很好进行。
2.直接寻址
直接寻址是拜访特别功用寄存器的仅有办法。它也可以用于拜访内部RAM(128个字节)。选用直接寻址办法的指令是双字节指令,其间第一个字节是操作码,第二个字节是内部RAM或特别功用寄存器的直接地址。地址现已给出,明显不需求像寄存器寻址那样先核算地址,直接针对由ROM给出地址就可以对RAM进行相关操作。
3.寄存器直接寻址
寄存器直接寻址可用于拜访内部RAM或许外部数据存储器。拜访拜访内部RAM或许外部数据存储器的低256个字节时,可以选用RO或R1作为间址寄存器。这类指令为单字节指令,其最低为表明选用RO仍是R1作为间址寄存器。拜访内部RAM和外部数据存储器时选用不同的指令,所以不会引起混杂。
拜访外部数据存储器,还可用数据指针DPTR作为间址寄存器,DPTR是16位寄存器,故它可对整个外部数据存储器空Il(64K)寻址。
在履行PUSH(压栈)POP(出栈)指令时,也选用寄存器直接寻址,这时仓库指针SP用作间址寄存器。
完成这类寻址办法有必要分为两步,首要承认4个通用作业寄存器区中可以作为直接寻址寄存器的8个单元的地址,然后读出所选定的寄存器中的值,这个值便是当时指令要寻址的空间的物理地址。承认直接寻址寄存器的地址可以由下面的VHDL句子来完成:
ri_adr<=((psw and“00011000”)or(s-command (7downto 0) and“110000000111”)),
其间ri_ adr表明的是用于直接寻址的寄存器的物理地址,s_command表明的是当时指令的操作码。然后经过别的一个读RAM的进程就可以承认间址寄存器中的值,然后得到指令需求的存储器单元的地址。至千其他特别功用寄存器作为间址寄存器的状况,由于间址寄存器的地址事前现已可以承认,所以这种办法下寻觅存储器单元的地址就仅需求上述两步中的后一个过程就可以承认指令需求的存储器单元的地址。
4.当即寻址
选用当即寻址办法的指令是双字节的,第一个字节是操作码,第二个字节是当即操作数。因而,这种寻址办法完成起来比直接寻址还要简单,操作数便是放在程序存储器内的常数。
5.基址寄存器加变址寄存器直接寻址
这种寻址办法用于拜访程序存储器的一个单元,该单元的地址是基址寄存器(DPTR或PC)与变址寄存器A的内容之和。尽管这类寻址办法也是直接寻址,关于运用DPTR作为基址寄存器的状况,它的完成办法和用数据指针DPTR作为间址寄存器时的直接寻址的状况很类似,由于其间址寄存器事实上仍是承认的。与用数据指针DPTR作为间址寄存器时的直接寻址的状况有所不同的是,承认终究需求的地址还要进行一次加法运算,这在运用VHDL言语描绘的时分是很简单完成的。用PC作为基址寄存器时,需求知道PC当时值,可是PC和DPTR是不同的,DPTR是特别功用寄存器,利用它的地址就可以读出其值,PC并没有被分配地址,不能运用读RAM的办法获得其值,所以内部有必要设置编写这样一个进程,它用于读出那些坐落CPU内部、没有分配地址的辅佐寄存器的值。
表1 表寻址办法及寻址空间