繁体   English   中英

AVR汇编为什么LDI指令只能使用R16-R31寄存器

[英]AVR Assembly why does LDI instruction can only use R16 - R31 registers

您好,我在过去的论文中遇到了这个考试问题,我很困惑,到目前为止,还没有研究给我一个确凿的答案,因为大多数人只是说这是处理器的限制。 我很确定我们没有在 class 中介绍这一点。

有谁知道为什么?

简单的答案是高 16 个寄存器只支持LDI

当您查看 ISA(指令集架构)时,您会注意到这同样适用于SUBISBCIANDIORICPI ,其中每个都需要操作码表中的 12 位:8 位为 8 位立即数和 4 位来编码 R16... R31 中的哪一个是目的地。 这意味着,仅仅提供这 6 条指令,就已经占用了 37.5% 的操作码。

支持 R0...R31 需要 75% 的操作码仅用于 6 条指令:所有 AVR 操作码都是 16 位操作码(除了 32 位的LDSSTSCALLJMP ),您只能用 16 位编码这么多指令位

以以下 2-reg 指令为例: ADDADCSUBSBCCPCPCANDOREORLSRASRRORMOV 这 13 条指令中的每一条都占用 2^(5+5) 个操作码,因为每条指令都必须对 2^5 个可能的源寄存器和目标寄存器中的一个进行编码,总计超过 20% 的操作码空间。 而且我们还没有考虑跳转( RJMPRCALL 、分支)或 memory 访问,如LDDSTDINOUT

术语:上面的“操作码”是指编码一条特定机器指令所需的所有位。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM