我正在尝试按设备构建“缺失”AVR 指令表。
由于缺乏任何可用的文档,我一直在比较 avra、gavrasm 和 avrlass 的源代码,但似乎无法找到任何共识。
例如,ATtiny2313,根据 avra 源,缺少
MUL
、EIJMP
、EICALL
、JMP
、ELPM
和 ESPM
。
但根据 gavrasm,它没有
MUL
、FMUL
、EIJMP
、EICALL
、JMP
、CALL
、ELPM
、ELPM/Z
、SPM/Z
、 ,
DES
,
XCH
,
LAS
,
LAC
。(avrlass 在这里是一个异常值,因为它希望用户指定使用的是 AVR、AVRe、AVRe+、AVRrc、AVRxm 或 AVRxt 指令集中的哪一个)
有谁知道我在哪里可以找到(最好是机器可读的)“单一事实来源”?
理想情况下,我想要一个按设备划分的指令集表,以及每个指令集中支持或缺少哪些指令的表。尽管考虑到 Atmel/Microchip 对此类事物的“热爱”,但我预计在某些情况下“设备 X 支持指令集 Y,除了(在此处插入特殊的极端情况)”。
我还从
https://packs.download.microchip.com/ 下载了 (ATDF) XML 规范,但这些规范似乎不包含指令集。
avr-mcus.def 总结了库存 avr-gcc 所识别的 AVR 设备的属性。 感兴趣的列是第二列,它是核心系列,第三列描述了一些更细粒度的 ISA 属性。
avr-devices.cc 提供有关核心系列的详细信息。
例如,当 avr-devices.cc 设置了LAT
标志时,则核心(以及属于它的所有设备)支持
MUL
、
MUL
、
MULS
、
MULSU
、
FMUL
,
FMULS
。 用 avr-gcc 术语来说,这就是核心
FMULSU
和
avr4/5/51/6
的情况。设置
avrxmega2/3/4/5/6/7
时,支持读-修改-写指令
XCH
、
LAS
、
LAC
、
LAT
。当闪存大小超过 128 KiB 时,即当设备具有 3 字节 PC(
AVR_ISA_RMW
和
EIJMP
)时,支持EICALL
和
avr6
。当 Flash 大小超过 8 KiB 时,支持
avrxmega6/7
和
JMP
,但即使 Flash 大小为 8 KiB,ATmega808 和 ATmega809 也支持这些指令。对
CALL
和
ELPM
的支持可以在 avr-devices.cc 中找到,但至少 AT43USB320 除外。 该设备支持外部闪存> 64 KiB,但据我所知不支持
ELPMx
。 数据表没有提供足够的信息。对于
ELPM
和
DES
我不知道。
SPM
仅少数设备支持。