(标号:) 操作码 (操作数) (;注释)
两部分组成,即操作码和操作数。
操作码用来规定指令进行什么操作,
操作数则是指令操作的对象。
(1)单字节指令:指令只有一个字节,操作码和操作数同在一个字节中。
(2)双字节指令:一个字节为操作码,另一个字节是操作数。
(3)三字节指令:操作码占一个字节,操作数占二个字节。其中操作数既可能是数据,也可能是地址。
寻址方法:汇编指令在执行期间需要用到操作数,CPU取得操作数的方法称为寻址方法
一般来说,寻址方式越多,计算机的功能就越强。
MCS-51单片机共有7种寻址方法:
指令中包含通用寄存器形式操作数的寻址方式称为寄存器寻址。
操作时在寄存器中
MOV A,Rn ; (RN) →A,n=0~7
表示把寄存器Rn的内容传送给累加器A
选址范围包括:
(1)4组通用工作寄存区共32个工作寄存器。
(2)部分特殊功能寄存器,例如A、B以及数据指针寄存器DPRT等。
指令中包含direct形式操作数的寻址方式称为寄存器寻址。
操作数直接以单元地址的形式给出:
MOV A, 40H
寻址范围:
(1)内部RAM的128个单元
(2)特殊功能寄存器。除了以单元地址的形式外,还可用寄存器符号的形式给出。例如:
MOV A,80H与MOV A , P0是等价的。
寄存器中存放的是操作数的地址。
在寄存器的名称前面加前缀标志”@”
访问内部RAM或外部数据存储器的低256个字节时,只能采用R0或R1作为间址寄存器。例如:
MOV R1, #40H
MOV A, @R1 ;
把内部RAM中地址为40H单元内容送A。
寻址范围:
(1)访问内部RAM区,51系列128个字节,52系列256个字节,其通用形式为@Ri
(2)对片外数据存储器的64K字节的间接寻址,例如:
MOVX A, @DPTR
(3)片外数据存储的低256字节,不建议使用。
例如:MOVX A,@Ri
(4)堆栈区
堆栈操作指令PUSH(压线)和P0P(出栈)使用堆栈指针(SP)作间址寄存器。
注意:由于52系列单片机具有两个片内高128字节空间,一个属于片内RAM,另一个属于特殊功能寄存器,为此必须采用不同寻址指令进行区别。其中片内RAM只能采用寄存器间接寻址方法访问,而特殊寄存器只能采用直接寻址方法访问。例如:R0=83
则:MOV A,@R0是将RAM 83H单元内容送累加器A,
MOV A,83H则是将特殊功能寄存器DPH(地址亦为83H)内容送累加器A。
指令中包含#data或#data16形式操作数的寻址方式称为立即寻址。
操作数在指令中直接给出,需在操作数前面加前缀”#”,若立即数的首位为A~F,前面还要加零。例如:
MOV A, #40H
MOV A, #0FFH
指令中包含”@A+基址寄存器”形式操作数的寻址方式称为变址寻址方式。
以DPTR或PC作基址寄存器,以累加器A作为变址寄存器。
例如:MOVC A, @A+DPTR 其中A的原有内容为05H,DPTR的内容为0400H,该指令执行的结果是把程序存储器0405H单元的内容传送给A。
说明:(1)本寻址方式是专门针对程序存储器的寻址方式,寻址范围可达到64KB。
(2)本寻址方式的指令只有3条:
MOVC A, @A+DPTR (最常用)
MOVC A, @A+PC
JMP @A+DPTR
指令中包含bit形式操作数的寻址方式称为位寻址方式,其中bit形式的位地址可以是片内RAM中的位地址,也可以是SFR中的位地址或位名称。
MCS-51有位处理功能,可以对数据位进行操作,例如:
MOV C, 40H 是把位40H的值送到进位C。
寻址范围包括:
可寻址位在指令中有如下4种的表示方法:
(1)直接使用位地址。例如PSW.5的位地址位0D5H。
(2)位名称的表示方法。例如:PSW.5是F0标志位,可使用F0表示该位。
(3)单位地址加位数的表示方法。例如:(0D0H).5。
(4)特殊功能寄存器符号加位数的表示方法。例如:PSW.5。
指令中包含rel形式操作数的寻址方式称为相对寻址方式,其中rel可以是片内RAM或ROM地址偏移量的形式,也可以是标号的形式。
在相对寻址的转移指令中,给出了地址偏移量,以“rel”表示,即把PC的当前值加上偏移量就构成了程序转移的目的地址:
目的地址=转移指令所在的地址+转移指令的字节数+rel
偏移量rel是一带符号的8位二进制数补码数。
范围是:-128~+127
向地址增加方向最大可转移(127+转移指令字节)个单元地址,向地址减少的方向最大可转移(128-转移指令字节)个单元地址。