第1节8051指令集外文翻译资料

 2022-03-24 10:03

英语原文共 116 页,剩余内容已隐藏,支付完成后下载完整资料


第1节8051指令集

8051指令集针对8位控制应用进行了优化。 它提供了各种快速寻址模式,用于访问内部RAM以便于对小数据结构进行字节操作。 该指令集为一位变量提供广泛的支持,作为单独的数据类型,允许在需要布尔处理的控制和逻辑系统中进行直接位操作。

下面介绍了8051指令集的概述,并简要介绍了如何使用某些指令。

1.1程序状态字

程序状态字(PSW)包含几个反映CPU当前状态的状态位。 PSW,如第3页的表1-1所示,驻留在SFR空间中。 它包含进位位,辅助进位(用于BCD操作),两个寄存器组选择位,溢出标志,奇偶校验位和两个用户可定义状态标志。

除了在算术运算中提供进位位的功能之外,进位位还用作多个布尔运算的“累加器”。

位RS0和RS1用于选择以下四个寄存器组之一。

许多指令将这些RAM位置称为R0至R7。 在执行时基于位RS0和RS1来进行四个存储体中哪一个的选择。

奇偶校验位反映累加器中的1的数量:如果累加器包含奇数1,则P = 1,如果累加器包含偶数1,则P = 0。 因此,累加器加P中的1的数量总是均匀的。

PSW中的两位未提交,可用作通用状态标志。

PSW寄存器包含表1-1所示的程序状态信息。

1.2寻址模式

8051指令集中的寻址模式如下:

1.2.1直接寻址

直接寻址操作数由指令中的8位地址字段指定。 只有128个最低字节的内部数据RAM和SFR可以直接寻址。

1.2.2间接寻址

在间接寻址中,指令指定一个包含操作数地址的寄存器。 可以间接寻址内部和外部RAM。

8位地址的地址寄存器可以是所选寄存器组的R0或R1,也可以是堆栈指针。 16位地址的地址寄存器只能是16位“数据指针”寄存器DPTR。

1.2.3注册说明

包含寄存器R0至R7的寄存器组可以由某些指令访问,这些指令在指令的操作码中带有3位寄存器指定。 以这种方式访问寄存器的指令是代码有效的,因为该模式可以消除地址字节。 当执行指令时,访问所选存储体中的八个寄存器之一。 执行时通过PSW中的两个存储区选择位选择四个存储体中的一个。

1.2.4注册专用说明

一些指令是特定于某个寄存器的。 例如,一些指令总是在累加器或数据指针等上运行,因此不需要地址字节来指向它。 操作码本身就这样做。 将累加器称为“A”的指令组合为特定于累加器的操作码。

1.2.5立即常数

常数的值可以遵循程序存储器中的操作码。 例如;MOV A,#100加载十进制数字100的累加器。相同的数字可以十六进制数字指定为64H。

1.2.6索引寻址

只有程序存储器可以使用索引寻址进行访问,只能读取。 此寻址模式用于读取程序存储器中的查找表。 16位基址寄存器(DPTR或程序计数器)指向表的基准,累加器设置为表项号。 程序存储器中表项的地址是通过将累加器数据添加到基指针而形成的。

在“情况跳转”指令中使用另一种类型的索引寻址。 在这种情况下,跳转指令的目标地址被计算为基本指针和累加器数据的和。

1.3算术指令

算术指令菜单如表1-2所示。 该表指示可以使用每个指令访问lt;bytegt;操作数的寻址模式。

列出的执行时间假定为12 MHz时钟频率和X1模式。 除了采用2s的INC DPTR指令和乘法和除数指令4s之外,所有算术指令都以1s执行。

请注意,内部数据存储器空间中的任何字节可以递增或递减,而不会通过累加器。

其中一个INC指令在16位数据指针上运行。 数据指针用于为外部存储器生成16位地址,因此能够在一个16位操作中增加它是一个有用的功能。

MUL AB指令将累加器乘以B寄存器中的数据,并将16位乘积放入级联的B和累加器寄存器。

DIV AB指令将累加器除以B寄存器中的数据,并将累加器中的8位商和B寄存器中的8位余数。

奇怪的是,DIV AB在算术“分割”例程中比在基数转换和可编程移位操作中更少使用。 稍后将给出在基数转换中使用DIV AB的示例。 在移位操作中,将数字除以2n位,将其n位向右划分。 使用DIV AB执行除法,完成4s的移位,使B寄存器保持被移出的位。

DA A指令用于BCD算术运算。 在BCD算术中,ADD和ADDC指令应始终遵循DA A操作,以确保结果也在BCD中。 请注意,DAA不会将二进制数转换为BCD。 DA A操作仅在添加两个BCD字节的第二步中产生有意义的结果。

1.4逻辑说明

表1-3列出了逻辑指令的列表。 对字节执行布尔运算(AND,OR,异或或NOT)的指令将逐位执行操作。 也就是说,如果累加器包含00110101B和lt;bytegt;包含01010011B,那么ANL A,lt;bytegt;将离开累积器保持00010001B。

可以用于访问lt;bytegt;操作数的寻址模式列在表1-3中。 因此,ANL A,lt;bytegt;指令可以采取以下任何形式。ANL A,7FH(直接寻址)ANL A,@ R1(间接寻址)ANL A,R6(寄存器寻址)ANL A,#53H(立即常数)

累加器特定的所有逻辑指令在1s(使用12 MHz时钟和X1模式)下执行。 其他人需要2s。

请注意,可以在内部数据存储器空间中的任何字节上执行布尔运算,而无需通过累加器。例如,XRL lt;bytegt;,#数据指令提供了一种快速简单的方式来反转端口位,如in

XRL P1,#OFFH

如果操作是响应中断,则不使用累加器将节省时间和精力堆栈在服务程序中。

旋转指令(RL A,RLC A等)将累加器1位向左或向右移位。对于左旋转,MSB滚动到LSB位置。为了正确旋转,LSB滚动到MSB位置。SWAP A指令交换累加器内的高和低半字节。这是BCD操作中有用的操作。例如,如果累加器包含已知小于100的二进制数,则可以通过以下代码将其快速转换为BCD:

MOV B,#10 DIV AB SWAP A ADD A,B

将数字除以10,将累加器的低半字节中的十位数字和B寄存器中的数字分隔。 SWAP和ADD指令将十位数字移动到累加器的高半字节,并将数字转换为低位字节。

1.5数据传输

1.5.1内部RAM

表1-4显示了可用于在内部存储空间内移动数据的指令菜单以及可与每个存储空间一起使用的寻址模式。 使用12 MHz时钟和X1模式,所有这些指令都以1或2s执行。

MOV lt;destgt;,lt;srcgt;指令允许数据在任何两个内部RAM或SFR位置之间传输,而不通过累加器。 记住,只能通过间接访问的高128位数据RAM,只能通过直接寻址访问SFR空间。

请注意,在所有8051器件中,堆栈都位于片上RAM中,并向上增长。 PUSH指令首先递增堆栈指针(SP),然后将该字节复制到堆栈中。 PUSH和POP仅使用直接寻址来识别被保存或恢复的字节,但是堆栈本身可以通过使用SP寄存器进行间接寻址来访问。这意味着堆栈可以进入上128,如果它们被实现,但不能进入SFR空间。

上128个没有在8标准8051中实现,也没有在它们的ROMless中实现。 使用这些设备,如果指向上128个PUSHed字节的SP丢失,并且POP字节不确定。

数据传输指令包括可用于初始化程序存储器中查找表的数据指针(DPTR)或16位外部数据存储器访问的16位MOV。

XCH A,lt;bytegt;指令使累加器和寻址字节交换数据。

XCHD A,@ Ri指令是相似的,但是交换中只涉及低半字节。

看看XCH和XCHD如何可以用于方便数据操作,首先考虑将8位BCD数字向右移位的问题。 表1-5显示了如何使用直接MOV进行操作,以及如何使用XCH指令进行比较。 为了帮助理解代码的工作原理,保存BCD编号和累加器内容的寄存器的内容与每个指令一起显示,以指示执行指令后的状态。

执行程序后,累加器包含右侧移出的两位数字。 使用直接MOV执行程序使用14个代码字节和9s执行时间(假设为12 MHz时钟和X1模式)。 与XCH相同的操作使用较少的代码,并执行几乎两倍的速度。

要右移奇数位数,必须执行一位数位移。 表1-6显示了使用XCHD指令将BCD数位右移的代码示例。 同样,每个指令旁边显示保存数字和累加器的寄存器的内容。

首先,指针R1和R0被设置为指向包含最后四个BCD数字的两个字节。 然后执行一个循环,留下最后一个字节,位置2EH,保存移位号码的最后两位数字。指针递减,并且针对位置2DH重复循环。CJNE指令(比较和跳转,如果不相等)是后面将要描述的循环控制。

对于R1 = 2EH,2DH,2CH和2BH,循环从LOOP执行到CJNE。 在那时,原来在右边移出的数字已传播到位置2AH。 由于该位置应保留0,所以丢失的数字将被移动到累加器。

1.6外部RAM

表1-7显示了访问外部数据存储器的数据传输指令的列表。 只能使用间接寻址。 选择是使用单字节地址@Ri,其中Ri可以是所选寄存器组的R0或R1,还是双字节地址@DPTR。 如果只涉及几KB外部RAM,则使用16位地址的缺点是16位地址使用端口2的全部8位作为地址总线。 另一方面,如表1-7所示,8位地址允许寻址几KB的RAM,而不必牺牲所有端口2。

所有这些指令以2s执行,具有12 MHz时钟(和X1模式)。

请注意,在所有外部数据RAM访问中,累加器始终是数据的目标或源。

只有在执行MOVX指令时才会激活到外部RAM的读写选通。 另外这些信号是无效的,实际上如果它们根本不被使用,它们的引脚可以作为额外的I / O线路使用。

1.7查找表

表1-8显示了可在程序存储器中读取查找表的两条指令。 由于这些指令只能访问程序存储器,所以查找表可以读,不更新。 助记符是“移动常数”的MOVC。

如果表访问是外部程序存储器,则读选通脉冲为PSEN。

表1-8中的第一条MOVC指令可以容纳多达256个条目的表,编号为0到255.所需条目的编号加载到累加器中,数据指针设置为指向 桌子。

表1-8中的第一条MOVC指令可以容纳多达256个条目的表,编号为0到255.所需条目的编号加载到累加器中,数据指针设置为指向 桌子。 然后

MOVC A,@A DPTR

将所需的表格条目复制到累加器中。

除了程序计数器(PC)作为表格基础外,其他MOVC指令的工作方式相同,表格通过子程序访问。 首先将所需条目的数量加载到累加器中,并调用子程序:MOV A,ENTRY_NUMBER CALLTABLE

他的子例程“TABLE”将如下所示:

表:MOVC A,@A PC RET

该表本身紧跟在程序存储器中的RET(返回)指令之后。 这种类型的表格最多可以有255个条目,编号为1到255.不能使用数字0,因为在执行MOVC指令时,PC包含RET指令的地址。 编号为0的条目将是RET操作码本身。

1.8布尔指令

8051设备包含一个完整的布尔(单位)处理器。 内部RAM包含128个可寻址位,SFR空间可以支持多达128个其他可寻址位。 所有端口线都是可位寻址的,每个端口线都可以被视为单独的单一端口。 访问这些位的指令不仅仅是条件分支,而是一个完整的移动,设置,清除,补码,OR和AND指令菜单。 在具有任何数量的面向字节的软件的其他架构中,这些位操作都不容易获得。

布尔处理器的指令集如表1-9所示。 所有位访问都是通过直接寻址。 位地址00H至7FH位于低128位,位地址80H至FFH位于SFR空间。

JBC位,如果位= 1,则跳转; CLR位2

注意内部标志可以轻松移动到端口引脚:

MOV C,FLAG MOV P1.0,C

在此示例中,FLAG是下128或SFR空间中任何可寻址位的名称。 根据标志位是1还是0,I / O线(在这种情况下,端口1的LSB)被置位或清零。

PSW中的进位位用作布尔处理器的单位累加器。 将进位位指令为C的位指令组合为进位特定指令(CLR C等)。 进位位还具有直接地址,因为它驻留在可位寻址的PSW寄存器中。

请注意,布尔指令集包括ANL和ORL操作,但不包括XRL(异或)操作。 XRL操作在软件中很容易实现。 例如,要求形成两位的异或:

C = bit1 XRL bit2

这样做的软件可以如下:

MOV C,bit1 JNB bit2,OVER CPL C

过:(继续)

首先,将位1移动到Carry。 如果位2 = 0,则C现在包含正确的结果。 也就是说,如果位2 = 0,则位1 XRL位2 =位1。另一方面,如果位2 = 1 C现在包含正确结果的补充。 它只需要反转(CPL C)即可完成操作。

该代码使用JNB指令,如果所设置的位(JC,JB,JBC)或寻址位未设置(JNC,JNB),则执行跳转的一系列位测试指令之一。 在上述情况下,bit2正在测试,如果bit2 = 0,则跳转CPL C指令。

如果寻址位置1,则JBC执行跳转,并清除该位。 因此,可以在一个操作中测试和清除标志。 剩余内容已隐藏,支付完成后下载完整资料


资料编号:[485135],资料为PDF文档或Word文档,PDF文档可免费转换为Word

原文和译文剩余内容已隐藏,您需要先支付 30元 才能查看原文和译文全部内容!立即支付

以上是毕业论文外文翻译,课题毕业论文、任务书、文献综述、开题报告、程序设计、图纸设计等资料可联系客服协助查找。