首页 > 解决方案 > 汇编器消息 -> 错误:寄存器编号超出范围

问题描述

我正在尝试 mula.dd.ll.ldinc m3 , a5 , m0 ,m1
在具有 xtensa LX6 处理器的 ESP32 上使用我的汇编代码中的指令。

它不会对其他指令产生错误,但是对于它正在产生的这个特定指令register number out of range

我正在使用 a2-a4 来接收汇编代码中的参数并为我的目的使用其他寄存器。xtensa LX6 处理器有 16 个(AR,32 位)通用寄存器


我还尝试减少传递给汇编函数并使用的参数号

mula.dd.ll.ldinc m3 , a3 , m0 ,m1

但它提供了相同的错误

此语法与指令集中使用的语法完全相同。

mula.dd.ll.ldinc m3 , a3 , m0  ,m1 // the instruction multiplies m0 * m1 and adds it to the accumulator and then loads data at a3+4 into m3 ( +4 is because of auto increment )

标签: assemblycompiler-errorsesp32xtensa

解决方案


此语法与指令集中使用的语法完全相同。

mula.dd.ll.ldinc m3 , a3 , m0  ,m1

不,不完全是。此操作码的 ISA 书籍章节说明如下:

MULA.DD.*.LDINC mw, as, mx, my

The mx operand can designate either MAC16 register m0 or m1.
The my operand can designate either MAC16 register m2 or m3.

所以你不能将 m1 作为最后一个寄存器参数。


推荐阅读