在 ARM 汇编中比较数字时,是否有正确的方法来存储值

杰姆斯韦尔

所以我正在制作一些能够读取数字列表的代码,将其分成 3 个块并决定这 3 个数字中哪个最大。然后我将从每个 3 块中取出最大的值并将它们加在一起。

为了做到这一点,我将我的值存储在几个寄存器中:

 MOV r1,#0 ;loop counter
 MOV r2,#0 ;compare store 1
 MOV r3,#0 ;compare store 2
 MOV r4,#0 ;compare store 3
 MOV r5,#0 ;sum of values
 MOV r6,#0 ;which was greater in value
 LDR r8,=data_values ;the list of values

我正在使用CMP命令来比较这些值,但是我不确定我的方法对于存储和添加值是否正确。目前我有这个:

MOV r6,CMP r2,r3 ;Moving the comparison value into r6, my store for the greater value
MOV r6,CMP r6,r4 ;Comparing the larger value to the 3rd value
ADD r5,r5,r6 ;Adding the larger value to the sum

这看起来与之前对我有用的其他函数一致,但我不断收到这些错误:

task3.s(26):警告:A1865W:在常量表达式之前没有看到“#”

task3.s(26): 错误: A1137E: 行尾出现意外字符

现在我很确定这不是一个常量,除非这里的常量定义不同并且行尾也没有额外的字符,除非它将整个比较函数计算为额外的字符

显示整行突出显示且末尾没有额外字符的图像

有什么我应该改变的,或者它应该运行良好而这些警告被忽略吗?

谢谢

模糊

如果要计算两个数字的最大值,ARM 汇编中的标准方法是这样的:

cmp   r0, r1  @ if r0 > r1
movgt r2, r0  @ then r2 = r0
movle r2, r1  @ else r2 = r1

要添加最大的r0r1r2r3你可能想是这样的:

cmp   r0, r1      @ if r0 < r1
movlt r0, r1      @ then r0 = r1 (i.e. r0 = max(r0, r1))
cmp   r0, r2      @ if r0 < r2
movlt r0, r2      @ then r0 = r2 (i.e. r0 = max(max(r0, r1), r2))
add   r3, r0, r3  @ r3 += r0

实现这一点,这样你就不会破坏任何寄存器,留给读者作为练习。

请始终记住,几乎每条指令都可以在 ARM 上有条件地执行。这就是指令集的全部力量所在。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

ARM GCC内联汇编

来自分类Dev

ARM汇编“ retne”指令

来自分类Dev

ARM汇编代码

来自分类Dev

简单的ARM汇编代码分析

来自分类Dev

ARM汇编中的str解释

来自分类Dev

ARM汇编:.LANCHOR0

来自分类Dev

ARM汇编中str的说明

来自分类Dev

ARM 汇编中的 loRecursion 示例

来自分类Dev

ARM GCC是否对汇编“ REV”指令具有内置功能?

来自分类Dev

这些ARM汇编指令有什么作用?

来自分类Dev

将ARM汇编指令编码为ARM机器语言

来自分类Dev

arm有多少字节对齐?

来自分类Dev

汇编 x86 转换为 ARM 函数调用,并带有不同数量的参数到 Arm

来自分类Dev

如何在ARM汇编中将数字除以32?

来自分类Dev

如何在ARM汇编中正确创建数组?

来自分类Dev

ARM汇编代码和SVC编号

来自分类Dev

如何在ARM汇编中转置矩阵

来自分类Dev

混合c和汇编(ARM)子例程

来自分类Dev

ARM汇编程序的异常行为

来自分类Dev

了解ARM向量表汇编声明的语法

来自分类Dev

C嵌套循环到ARM汇编

来自分类Dev

来自ARM汇编指令'MULS'的常量错误

来自分类Dev

ARM汇编遍历字符串

来自分类Dev

文本作为内联汇编(ARM)中的参数?

来自分类Dev

LDSET ARM 指令作为内联汇编

来自分类Dev

在ARM汇编中,立即数是否需要散列?

来自分类Dev

Printf更改寄存器中的值,ARM汇编

来自分类Dev

在Android(ARM)上进行比较和交换

来自分类Dev

arm-GCC来编译asm文件