AVR 微控制器中的数据传输指令

2024年8月28日 | 阅读 4 分钟

数据传输指令用于将数据传输到微控制器中。它用于简单地将数据从源复制到目标。数据传输指令也称为复制指令。

借助这些指令,我们可以从以下位置传输数据

寄存器到寄存器

在寄存器到寄存器的数据传输中,数据从源寄存器传输到目标寄存器。现在我们将描述一个二进制加法的例子。

示例:在本例中,我们有一个寄存器 B 和累加器寄存器 A。首先,我们需要将数据传输到寄存器 B,然后,数据将从寄存器 B 传输到 A。传输这些数据的指令如下所示

寄存器到内存

在此数据传输模式中,数据从寄存器传输到给定的内存位置。现在我们将借助内存位置 201k 和累加器寄存器 A 来描述一个例子。在此示例中,我们需要将累加器中的数据复制到位置 201k。执行此操作的指令如下所示

内存到寄存器

在内存到寄存器数据传输中,数据从内存传输到寄存器。在这里,我们将借助内存位置 201k 和累加器寄存器 A 来描述一个例子。在此示例中,我们需要从位置 201k 将数据加载到累加器中。执行此操作的指令如下所示

常数到寄存器

在常数到寄存器的数据传输中,数据传输到立即给定的寄存器。现在我们将借助内存数据 '05' 和累加器寄存器 A 来描述一个例子。在此示例中,我们需要将给定的数据加载到累加器中。执行此操作的指令如下所示

现在我们将描述一个表格来显示各种传输指令及其解释

指令操作数说明示例
MOVD, S此指令称为复制寄存器。MOV指令用于将一个寄存器的内容复制到另一个寄存器。我们将复制 S 到 D。这里 D 是目标寄存器,寄存器 S 是源寄存器。S 是未更改的寄存器,D 寄存器加载为 S 的副本。MOV指令的语法如下所示
D = S
MOV D, S
LDSD, K (内存位置)LDS 指令称为直接从数据空间加载。此指令用于将数据空间中的一个字节加载到目标寄存器 D。LDS指令的语法如下所示
D = K 处的值
LDS D, K
LDD, SLD 指令称为从数据空间间接加载。此指令用于将 S 中存储的内存位置的值间接加载到目标寄存器 D。LD指令的语法如下所示
D = S 中存储的内存位置的值
LD D, S
LDID, K (常数)LDI 指令称为立即加载。此指令用于将 8 位常数直接加载到目标寄存器 16 到 31。LDI指令的语法如下所示
D = K
LDI D, K
LPMD, Z (闪存)LPM 指令称为加载程序内存。LPM 指令用于将 Z 寄存器指向的一个字节加载到 D。这里 D 是目标寄存器。此 LPM 指令的特点是 100% 空间效率的常量数据获取或常量初始化。LPM指令的语法如下所示
D = Z
LPM D, Z
IND, AIN 指令称为将 I/O 位置加载到寄存器。IN 指令用于将 I/O 空间(定时器、端口、配置寄存器等)的数据加载到寄存器文件中的目标寄存器 D。IN指令的语法如下所示
D = I/O(A)
IN D, A
OUTA, DOUT 指令称为将寄存器存储到 I/O 位置。OUT 指令用于将寄存器文件中的寄存器 D 的数据存储到 I/O 空间(定时器、端口、配置寄存器等)。MULSU 指令的语法如下所示
I/O(A) = D
OUT A, D
STSK, SSTS 指令称为直接存储到数据空间。STS 指令用于将寄存器 S 中的一个字节数据存储到内存位置 K。这里 S 是源寄存器。STS指令的语法如下所示
K = S
STS K, S
STD, SST 指令称为从寄存器到数据空间的间接存储。ST 指令用于将寄存器 S 中的一个字节数据间接存储到寄存器 D 中存储的内存位置。这里 S 是源寄存器,D 是目标寄存器。ST指令的语法如下所示
D = S
ST D, S
PUSHDPUSH 指令称为将寄存器压入堆栈。此寄存器用于将寄存器 D 的内容存储在 STACK 上。PUSH 操作后,堆栈指针将减 1。PUSH指令的语法如下所示
STACK = D
PUSH D
POPDPOP 指令称为从堆栈弹出寄存器。此寄存器用于将 STACK 中的一个字节加载到寄存器 D。在 POP 操作之前,堆栈指针将先加 1。POP指令的语法如下所示
D = STACK
POP D