有人可以帮我解释一下银行选择寄存器的概念吗?

标签 c assembly binary microcontroller

<分区>

有人可以帮我解释一下关于微 Controller 的组选择寄存器的概念吗?我正在使用 PIC18F,正在阅读和学习类里面的数据移动。 bank select register 和 access bank 的概念对我来说仍然是新的和令人困惑的。 (尤其是 access bank,当我进行谷歌搜索时,我看到的都是关于普通货币银行的内容 =[ )

我读到的令人困惑的例子:

指令:CLRF F,a ==========> 清除数据寄存器 F 为零。如果 a = 0,则 F 位于访问存储区;如果 a = 1,则 F 位于 BSR 指定的存储区

指令 MOVWF F,a =========> 将数据从 WREG 移动到数据寄存器 F。如果 a = 0,F 位于访问存储区;如果 a = 1,则位于 BSR 指定的存储区。

^我了解有关 WREG 等的第一部分...,但没有真正理解访问银行和 BSR。如果有人知道任何资源或任何可以提供帮助的东西,我们将不胜感激 :)

最佳答案

对存储体的需求来自于 PIC 对 12 位地址空间进行寻址的能力,而单字节地址仅适合 8 位。因此,您需要将高四位设置到银行选择寄存器(BSR)中。

这种寻址方案很快就会成为一种负担,因为在库之间切换的指令开始在汇编程序的文本中乱扔垃圾,这不是特别容易阅读,而且因为这些指令占用了宝贵的空间。为了缓解这个问题,PIC 架构引入了所谓的access bank

Access bank 包含分布在 BANK 0 中的 0..128 个特殊字节的特殊地址空间的一部分,以及来自最后一个 bank 的一些寄存器。 PIC 使您无需切换银行即可访问这些位置,只需将 a 设置为零即可。通过将经常访问的数据放在访问寄存器中并使用快速访问寻址模式,仔细规划内存使用可以节省大量程序内存。

查看此 Q&A有关该主题的更多信息。

关于有人可以帮我解释一下银行选择寄存器的概念吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38170870/

相关文章:

c - u-boot:如何从linux用户空间访问 'bootcount'?

c - gcc 内在与内联汇编 : which is better?

c - 微型 C 编译器 : "error: unknown opcode ' jmp'"

java - 可以将多种语言组合成一个二进制文件吗?

c - 如果和和两个加数的按位异或均为负,这意味着什么?

python - numpy中十进制整数数组到二进制数组的矢量化转换

c++ - Win64 与 System V ABI (x86_64) : Win64 Skipping registers?

c++ - 在一行上打印矩阵

C++ 和全动态函数

c++ - 重复整数除以运行时常量值