8085 微处理器中的内存映射 I/O
可以将 I/O 端口视为内存位置来寻址。例如,假设当地址 = FFF0H、IO/M* = 0 和 RD* = 0 时,I/O 端口芯片的片选引脚被激活。如下面的图所示。
在这种情况下,当 8085 认为它正在为读取操作寻址内存位置 FFF0H 时,I/O 端口芯片被选中。请注意,8085 认为它正在寻址内存位置,因为它已将 IO/M* 发送为逻辑 0。但实际上,已选择了输入端口,并且输入端口向 8085 提供信息。这种被处理器视为内存位置寻址的 I/O 端口称为内存映射 I/O 端口。
在内存位置中,我们寻址输入输出端口。例如,当地址 = FFF0H、IO/M* = 0 和 RD* = 0 时。在这里,当 8085 微处理器发现它分配了内存位置时,我们选择输入输出端口芯片,因为它像 IO/M* 一样发送逻辑 0。
但在现实世界中,我们选择一个向 8085 微处理器提供信息的输入端口。像内存位置一样,8085 微处理器被处理器寻址,这些被称为内存映射输入输出端口。
有一套用于此内存映射 I/O 操作的指令。例如 STA、LDA 等。让我们详细讨论 STA 指令以更好地理解。
寄存器 A 是 8085 中用于执行算术、逻辑、I/O 和加载/存储操作的 8 位寄存器。寄存器 A 通常称为累加器。累加器是计算机 CPU(中央处理单元)中用于短期、中间存储算术和逻辑数据的寄存器。在涉及两个操作数的算术运算中,一个操作数必须位于此寄存器中。算术运算的结果将存储或累积在此寄存器中。类似地,在涉及两个操作数的逻辑运算中,一个操作数必须位于累加器中。此外,一些其他操作,如求补和十进制调整,只能对累加器执行。
现在让我们考虑一个仅涉及累加器内容的程序段。在 8085 指令集中,**STA** 是一个助记符,代表将累加器内容存储到内存中。在此指令中,累加器 8 位内容将存储到内存位置,其 16 位地址在指令中指示为 a16。此指令使用绝对寻址来指定目标。此指令占用 3 个字节的内存。第一个字节用于操作码,接下来的两个连续字节提供 16 位地址,每个字节连续分成 8 位。
助记符,操作数 | 操作码(十六进制) | 字节 |
---|---|---|
STA 地址 | 32 | 3 |
让我们以**STA 4050H**作为此类指令的示例。它是一个 3 字节指令。第一个字节将包含操作码十六进制值 32H。在 8085 汇编语言编码中,支持低位字节的地址应首先提到,然后高位字节的地址应接下来提到。因此,内存中的下一个字节将保存 50H,然后 40H 将保存在最后一个第三个字节中。假设累加器的初始内容为 ABH,内存位置 4050H 的初始内容为 CDH。因此,执行后,累加器内容将保持为 ABH,而 4050H 位置的内容将变为 ABH,替换其以前的内容 CDH。此指令的内容跟踪显示如下:
之前 | 之后 | |
---|---|---|
(A) | ABH | ABH |
(4050H) | CDH | ABH |
此指令的内容跟踪显示如下
地址 | 十六进制代码 | 助记符 | 注释 |
---|---|---|---|
2008 | 2A | STA 4050H | 内存位置 4050H 的内容 A |
2009 | 50 | 地址的低位字节 | |
200A | 40 | 地址的高位字节 |
此指令**STA 4050H**的时序图如下:
**总结** - 因此,此指令**STA 4050H**需要 3 个字节、4 个机器周期(操作码获取、内存读取、内存读取、内存写入)和 13 个 T 状态才能执行,如时序图所示。