【问题标题】:Assembly code comparison fails for 0xFFE700DE >0xA0xFFE700DE >0xA 的汇编代码比较失败
【发布时间】:2014-04-14 10:43:07
【问题描述】:

作为循环条件,我使用以下代码。

CMP     r5 , #0xA
BGE     Loop

但是当 r5 中的值很大时,比如 FFE700DE,比较失败。是因为它是有符号值吗?如何比较未签名的?

【问题讨论】:

    标签: assembly arm comparison-operators


    【解决方案1】:

    使用BHS 指令,这是无符号的“更高或相同”比较。参见例如this list of ARM condtion codes

    请记住,对于整数寄存器,寄存器中的不能真的有符号或无符号,这完全取决于你使用的指令来解释价值。该值只是一堆位。

    【讨论】:

    • 但我需要比较该值是否大于或等于 0xA 而不仅仅是大于
    • 你看过上面的链接了吗? HS = 更高或相同,无符号
    • arm 有过多的条件,如果你没有所有这些,你通常可以使用否定逻辑,如果不少于例如。根据架构,您可能只需要检查一个标志。
    猜你喜欢
    • 1970-01-01
    • 2018-09-06
    • 1970-01-01
    • 2015-02-16
    • 1970-01-01
    • 1970-01-01
    • 2017-11-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多