比较臂组件中的有符号整数

时间:2016-11-21 01:23:55

标签: arm

加载一个全局变量并检查它是否等于-1但我的代码不会将其识别为等于-1。它只传递与局部变量的比较。

//setting global variable
    .data
    .global top_m
    top_m:  .word -1

//loading global variable into x21
adrp x28, top_m
add x28, x28, :lo12:top_m
ldr x21, [x28]

//checking value of global variable, it does not branch to exit_stackEmpty
cmp     x21, -1
b.eq    exit_stackEmpty

//but if I compare with a local variable then it does branch
mov x23, -1
cmp     x23, -1
b.eq    exit_stackEmpty

编辑: 在gdb中,它显示了x21和x23

x21 0xffffffff       4294967295 //after loading -1 to x21
x23 0xffffffffffffffff       -1 //after mov x23, -1 

1 个答案:

答案 0 :(得分:2)

您正在加载的数据来自.word指令,因此是32位 - 0xffffffff。如果然后从该地址加载64位,则得到0x00000000ffffffff,这确实不是64位-1但是你看一下。顺便提一下,这个负载也会在数据部分的末尾运行,这是一个坏主意,但这意味着您将碰巧在MSB(或段错误)中获得零 - 如果您有更多数据{{1 ,更明显的是发生了什么。

如果要加载32位字并将其符号扩展为64位,请使用"加载32位字并将其符号扩展为64位"说明:LDRSW