AVR 指令 LDS 和 STS 16 位版本,带 GNU 汇编器

问题描述 投票:0回答:1

AVR 8 位核心指令集包括更高效的 16 位版本的“从内存加载数据”(LDS) 和“将数据存储到内存”(STS) 指令,而不是 32 位版本。根据 AVR 指令集手册,两个版本的汇编语法完全相同。显然,汇编器是为了自己找出是否可以使用16位版本(即地址只有7位,寄存器是R16:31之一)。只是我发现 GNU 汇编器没有。它总是发出 32 位版本。

作为示例,考虑汇编代码

    lds   r17, 0x4D

GNU 汇编器发出

  c4:    10 91 4d 00     lds r17, 0x004D

它应该发射的地方

  c4:    1D A4           lds r17, 0x4D

也许有必要明确告诉汇编器使用16位版本,也许通过使用不同的助记符(偏离指令集手册)?

如何让 GNU 汇编器(AVR 版本)发出 16 位版本的 LDS 和 STS 指令?

assembly avr gnu-assembler
1个回答
0
投票

您可能没有选择合适的MCU型号。例如使用

-mavrtiny
-mall-opcodes
发出 16 位编码。请注意,该值是
1D A1
而不是您声称的
1D A4

1 0000 1DA1         lds r17, 0x4D
© www.soinside.com 2019 - 2024. All rights reserved.