主题中讨论的其他器件:MSP-EXP432E401Y、
大家好、TI 支持团队。
我在使用 MSP432E401Y (Cortex-M4F -内核)时遇到问题。 我使用评估板 MSP-EXP432E401Y 版本1.0。
我在 Code Composer Studio 12.3.0中用汇编代码编写代码。
某些说明操作不正确。 请帮我找到我的错误。
让我们以指令 SMLAxy 为例。 该指令说明 (来自 ARM DUI0473J、p. 10-479):SMLAxy 将 Rn 和 Rm 选定一半的16位有符号整数 相乘、将32位结果添加到 Ra 中的32位值、并将结果放置在 Rd 中。
我是这样理解的。 例如、如果我们使用 SMLATT、则有:
Rd:= Top_Halfword{Rn}* Top_Halfword{RM}+ Ra
首先、看看没有溢出的示例。 我的代码:
MOV R1、 #0x1244
MOVT R1、 #0x0229
MOV R2、 #0x3769
MOVT R2, #0x0455
MOV R0、 #0000
MOVT R0、 #0001
SMLATT R3、R1、R2、R0;执行指令 R3 = 0x000A5B9D 后
将结果与我自己的计算进行比较:
RD <= R3
rn <= r1:= 0x02291244
RM <= R2:= 0x04553769
Ra <= R0:= 0x00010000
RD = THW[Rn]* THW[RM]+ Ra = 0x0229 * 0x0455 + 0x00010000 = 0x00095B9D + 0x00010000 = 0x000A5B9D、结果匹配。
但是、如果我们采用其他操作数、就会得到有趣的结果:
MOV R0、 #0x0001
MOVT R0、 #0xAAAA
MOV R1、 #0x000A
MOVT R1、 #0xAAAA
MOV R2、 #0x0001
MOVT R2, #0x0060
SMLATT R3、R1、R0、R2;执行后、我们的 R3 =#0x1CD238E5
与我的计算进行比较:
RD = THW[Rn]* THW[RM]+ Ra = 0xAAAA * 0xAAAA + 0x00600001 = 0x71C638E4 + 0x00600001 = 0x722638E5、结果不匹配。
结果的下半字匹配、但结果的上半字不匹配。 我不知道这个结果来自哪里。
MOV R0、 #0x0001
MOVT R0、 #0xAAAA
MOV R1、 #0x000A
MOVT R1、 #0xAAAA
MOV R2, #0 ;我只想检查乘法
SMLATT R3、R1、R0、R2; 执行指令 R3 =#0x1C7238E4后
与我的计算进行比较:
RD = THW[Rn]* THW[RM]+ Ra = 0xAAAA * 0xAAAA + 0 = 0x71C638E4、结果不匹配。
我在其他指令也面临这个问题:SMLAD,SMLAL,SMLALxy,SMLALD,SMLAWx, SMLSLD 中。 我提供了适用于所有指令的示例。
我想,在所有这些说明中,我不理解一点。 请解释一下、这些说明中的乘法是如何作用的。 非常感谢您的帮助。
此致。