assembly Arm 64-为什么低32位都填1?难道它应该只有1值吗?

hgqdbh6s  于 2022-11-13  发布在  其他
关注(0)|答案(1)|浏览(171)
mov x0, #1000

mov w6, #-1
add x7,x0,x6, sxtw

x6和x7的值是什么?[在十六进制]这里ans x6=0xffffffff //为什么所有的下半部分的值都用1填充?以及sxtw如何工作,当ans将是十进制的999时。我想知道这是如何发生的细节。

yqhsw0fo

yqhsw0fo1#

// 1= 000000000000000000000001 (On 32bit)
// -1= 111111111111111111111111
// So -1 in hex = 0xffffffff

x6的下半部分将填充上述值。
在第三个语句中,它将值符号扩展为64位,因此-1是正确的,然后它添加1000+(-1),并变为值999

相关问题