8085 微控制器的寻址方式2024 年 8 月 29 日 | 5 分钟阅读 寻址方式是一种指令集,用于与中央处理器 (CPU) 通信以执行任何特定任务。 通常,以下寻址方式用于执行 8085 微控制器中的指令:-
下面详细解释每种寻址方式 立即寻址方式让我们从一个例子开始。 简单来说,我们可以写: 之所以称为立即数,是因为 8 位数据立即发送到累加器(目标操作数)。 请考虑以下说明,它描述了上述指令集及其执行。 操作码 74H 保存在 0202 地址。 数据 4AH 保存在程序存储器中的 0203 地址。 读取操作码 74H 后,下一个存储器地址的数据被复制到累加器 A(E0H 是累加器的地址)。 由于指令是 2 字节的,并且在单个周期中执行,因此程序计数器将递增 2,并将指向程序存储器的 0204 地址。 ![]() 索引寻址方式让我们考虑两个例子来理解索引寻址方式的概念。 请看下面的指令 这里 PC 是程序计数器,DPTR 是数据指针(均为 16 位寄存器)。 考虑第一个例子。 在此,源操作数为 @A+DPTR。它有一个来自该位置的源数据。 在这里,DPTR 的内容与累加器的当前内容相加。 此加法提供了一个新地址,即源数据的地址。 此地址指向的数据进一步传输到累加器。 ![]() 考虑操作码为 93H。 DPTR 的值为 01FE,其中 01 位于 DPH 侧(高 8 位),FE 位于 DPL 侧(低 8 位)。 考虑累加器的值为 02H。 之后进行 16 位加法,01FE H+02H 结果为 0200 H。位于 0200H 位置的数据将被传输到累加器。 累加器的先前值 (02H) 将被来自 0200H 的新数据替换。 累加器中的新数据在插图中突出显示。 直接寻址方式直接寻址方式用于寻址操作数。 在这里,数据(源数据)的地址作为操作数存在。 让我们考虑一个例子。 寄存器组 #0(第 7 个寄存器)的地址为 07H。 当执行 MOV 指令时,存储在寄存器 07H 中的数据被移动到累加器中。 由于寄存器 07H 保存数据 1FH,因此 1FH 被移动到累加器。 注意 - 我们在直接寻址方式中不使用“#”,就像在立即寻址方式中使用的那样,因为如果我们使用“#”,则数据值 07H 将被传输到累加器,而不是 1FH。 现在,考虑下面的插图。 它显示了指令是如何执行的:- ![]() 如上图所示,它是一个 2 字节指令,需要 1 个周期才能完成。 程序计数器将递增 2,并将指向 0204 存储位置。 指令 MOV A,操作地址的操作码为 E5H。 只要运行 0202 处的指令 (E5H),累加器就会变为活动状态并准备好接收数据。 然后 PC 跳转到 0203 的下一个地址,并查找源数据(即传输到累加器)所在的 04H 位置的地址。 在 04H,控制器找到数据 1FH 并将其传输到累加器,从而完成指令的执行。 寄存器直接寻址方式在寄存器直接寻址方式中,我们直接使用寄存器名称(作为源操作数)。 让我们考虑一个例子。 一次,寄存器能够从 R0 取值到 R7。 微控制器中存在 32 个这样的寄存器。 为了仅使用 8 个变量寻址寄存器来使用这 32 个寄存器,使用了寄存器组。 一次,必须选择单个寄存器组。 可以使用一个特殊功能寄存器 (SFR) 来选择寄存器组,它被命名为处理器状态字 (PSW)。 PSW 是一个 8 位 SFR,其中每位都可以根据需要进行编程。 位从 PSW.0 分配到 PSW.7。 现在,考虑下面的插图。 它表示指令是如何执行的:- ![]() 数据 (2F) 移动以粗体显示。 2F 从数据存储位置 0CH 传输到累加器,并以虚线显示。 0CH 是寄存器组 #1 的寄存器 4 的地址位置。上面显示的指令是 1 字节的,需要 1 个周期才能完成执行。 这意味着我们可以通过使用直接寻址方式来节省内存。 寄存器间接寻址方式在寄存器间接寻址方式中,数据地址作为操作数存储在寄存器内。 此处,R0 中的值将被视为地址,它用于保存要传输到累加器中的数据。 示例:如果寄存器 R0 的值为 20H,并且数据 2FH 存储在 20H 的地址位置,则在执行上述指令后,2FH 的值将传输到累加器。 现在,考虑下面的插图。 它显示了指令是如何执行的:- ![]() 考虑 MOV A, @R0 的操作码为 E6H。 程序控制移动到地址位置 20H,在那里找到数据 2FH,然后将 2FH 传输到累加器中。 它是一条 1 字节指令,程序计数器 (PC) 递增 1 并移动到程序存储器的 0203 位置。 注意:只允许使用寄存器 R0 和 R1 作为寄存器间接寻址指令。 因此,程序员可以使用 @R0 或 @R1 来开发指令。 不允许使用所有其他寄存器组。 下一主题嵌入式系统 8051 指令集 |
我们请求您订阅我们的新闻通讯以获取最新更新。