指令格式及寻址方式
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
指令格式及寻址方式
一、指令格式
指令的表示方法称为指令格式,它包括指令的长度和指令内部信息的安排等内容。一条指令一船由两部分组成,即操作码和操作数。操作码用来规定指令进行什么操作,而操作效则表示指令操作的对象。操作数可以直接是一个数(立即数),也可以是一个数据所在的空间地址,即在执行指令时从指定的地址空间取出操作数。
单片机中的指令并不是固定的长度,对于不同的指令,指令的字节数不同。MC5—5l 单
片机用机器语言表示的指令格式按字节划分,有一字节指令、两字节指令和三字节指令三种。
1.一字节指令
一字节指令中的8位二进制代码既包含操作码的信息,也包含操作数的信息。在一字节指令中,有些指令的指令码中隐合着对某一寄存器的操作,NXP代理商无需再具体指定操作数。例如数
据指针DPTR加1指令;INC DPTR,其指令码为:
另外有些指令的操作数在通用寄存器中,由指令码中的rrr三位的不同编码来指定该
寄存器。例如:寄存器向氮加器A传送数据指令:MOV A,Rn,其指令码为:
其中,高5位表示操作内容——传送,最低三位rrr的不同二进制编码用来表示从哪一个寄
存器取数。
2.二字节指令。
二字节指令中的第一个字表尔操作码,第二个字节表示操作数,这里的操作数既可能是立即数,也可能是地址。其指令格式为:
3.三字节指令
三节节指令中,第一字节表示操作码,另两个字节是操作数,其指令格式为
绝大多数指令执行时都需要使用操作数,因此如何寻找存放操作数的单元地址和提取操作数就变得十分重要。Atmel代理所谓寻址方式就是如何找到存放操作数的地址,把操作数提取出来
的方法。
寻址方式与计算机的存储器空间结构有关,寻址方式越多,则计算机的功能越强,灵活性也越大,能更有效地处理各种数据,但指令系统也会相应的复杂。
MCS-51单片机共有七种寻址方式。下面分别加以介绍。
1.寄存器寻址
寄存器寻址是将所选定的工作寄存器组中的8个工作寄存器(R0—R7)的内容作为操
作数。指令操作码的低三位的不同组合分别代表R0—R7中的某一个。A、B、DPTR和C(位累加器)也能作为寄存器来寻址。例如:
这里源操作数和目标操作数均采用寄存器寻址.寄存器中的内容为操作数。
2.直接寻址
在直接寻址方式中、操作数由指令中的一个8位地址单元所指定。只有内部RAM中的00H~7FH地址单元和80H~FFH地址中的专用寄存器可直接寻址,且直接寻址是访问专
用寄存器的唯一方法。
采用直接寻址方式的指令是双字节指令,第一个字节是操作码,第二个字节是内部RAM的低128字节或专用寄存器的地址。例如:
此例中,源操作数采用直接寻址方式,表示把内部RAM中30H单元的内容送入A。指令代码为E5H、30H。
3.寄存器间接寻址
在寄存器间接寻址方式个,指令中给出的杏存器的内容为操作数的地址,而不是操作数本身。内部RAM和外部RAM都可以间接寻址。
当访问内部RAM或外部RAM的低256字节时,间址寄存器可以是选中寄存器组中的R0或R1,即内R0或R1间接给出操作数所在的地址‘
当访问外部RAM时,16位间址寄存器只能使用16位数据指针寄存器DPTR,这时可对整个外部RAM空间(64KB)寻址。
PUSH和POP指令的执行也采用寄存器间接寻址,这时堆栈指针SP用作间址寄存
器。堆栈指针可驻留在内部RAM的任何地方;例如:
上述两条指令中,日标操作数均采用寄存器间址方式,R1及DPTR的内容为操作数地址。其中@为间接寻址的标识符。
4.立即寻址
止即寻址是指操作数在指令中直接给出。通常把出现在指令中的操作数称为立即数。立即寻址方式的指令多足双字哨的.其中第一字节是操作码.第二字节是立即数。为了与直英寻址指令中的直接地址相区别,在立即数前面加“#”标识符。例如:
例中源操作数为止即寻址方式,表示方即数64H送给累加器A。其指令代码为74H、64H。
5.变址寻址
变址导址是以DPTR或PC为基址寄存器,累加器A为变址奇行器,并将两者的内存相加所得的16位地址作为操作数的地址。这种方式常用于查表操作,且只能对程序存储器进行寻址。例如:
上面两条指令的源操作数均为变址寻址。对第二条指令要注意的是,指令中的PC值为下一条指令的地址。
现假设DPTR的内容为1000H,A的内容为0FH,则指令MOVC A,@A十DPTR的执行过程如图3—1所示。
上述变址寻址形Atmel成的操作数地址为1000H十0FH=1000FH,而1000FH地址单元的内
容为FFH,该指令执行后,A的内容为FFH。
wxq$#