要正确执行指令,就必须能得到正确的操作数和操作码。操作码字段在机器里的表示比较简单,只需对每一种操作指定确定的二进制代码就可以了。指令的操作数字段的情况就比较复杂,操作数可能就在指令中,也有可能在寄存器或存储器中,这此设备内的数据要正确进行操作就要在指令中指出其地址,寻找操作数地址的方法称为寻址方式。51系列单片机指令系统的寻址方式有以下7种。 在这种寻址方式中,指令中跟在操作码后面的一个字节就是实际操作数。在这种寻址方式中,指令中跟在操作码后面的一个字节就是实际操作数。立即数前面必须有符号“#”。 例:MOV A, #0FFH ; FFH →(A)将立即数FFH送入累加器A。 这条指令为双字节指令,操作数FFH以指令形式存放在程序存储器内。 直接寻址就是在指令中包含了操作数的地址,该地址直接给出了参加运算或传送的数据所在的字节单元或位。直接寻址方式中操作数存储的空间有三种。 (1)访问内部低128个字节单元(00H~7FH),指令中直接给出地址。 例:MOV A, 70H ; 70H)→(A)把RAM 70H单元中的内容送累加器A。 (2)访问特殊功能寄存器,只能用直接寻址方式进行访问。 例:MOV IE, #85H ; 85H→(IE)。IE为特殊功能寄存器,其字节地址为A8H。 (3) 位地址空间的访问,指令中以位名称或者位地址的形式给出。 例:MOV C, 00H ; 将00H单元的内容→进位位C。 寄存器寻址是指以某一个可寻址的寄存器的内容为操作数。寄存器寻址指令中,操作数域中给出的是操作数所在的寄存器,寄存器的内容才是本条指令的操作数。 四个寄存器组共有32个通用寄存器,但指令中使用的是当前工作寄存器组,因此在使用寄存器寻址指令前,必须先将RS0,S1位置位,确定当前工作寄存器组。 例:MOV A, Ri ;(Ri)→(A)。 在这种寻址方式中,操作数所指定的寄存器中存放的不是操作数本身,而是操作数的地址。寄存器间接寻址方式把指令中寄存器的内容作为地址,再到该地址单元取得操作数。变址寻址寄存器间接寻址用符号“@”表示。 例:MOV A, @Rj ;((Rj))→(A)。 若R0内容为11H,而内部RAM 11H单元中的内容是33H,则指令MOV A,@R0的功能是将33H这个数送到累加器A。 基址加变址寄存器间接寻址以DPTR或PC的内容为基地址,然后,在这个基地址的基础上加上累加器A中的地址偏移量形成真正的操作数地址。这种寻址方式常用于查表操作。例: MOVC A, @A+DPTR ;(DPTR)+(A))→(A)。 MOVC A, @A+PC ;((PC)+(A))→(A)。 A中为无符号数,指令功能是A的内容和DPTR或当前PC的内容相加得到程序存储器的有效地址,把该存储器单元中的内容送到A。 相对寻址是将程序计数器PC中的当前值(该当前值是指执行完这条相对转移指令后的PC的字节地址)为基准,加上指令中给定的偏移量所得结果而形成实际的转移地址。这种寻址方式主要用于转移指令指定转移的目标地址。 一般将相对转移指令操作码所在地址称为源地址,转移后的地址称为目的地址,目的地址的计算方法如下: 目的地址=源地址+相对转移指令字节+相对偏移值 位寻址是指对片内RAM的位寻址区和某些可位寻址的特殊功能寄存器进行位操作时的寻址方式。位地址表示一个可作位寻址的单元,它或者在内部RAM中或者是一个硬件的位。 例:MOV C, 20H ; 将20H单元的内容→进位位C 。
正文
单片机指令系统的寻址方式
此篇文章发布距今已超过399天,您需要注意文章的内容或图片是否可用!