1
我正在使用sign extend將32位變量更改爲64位變量。但是,當我在64位變量上使用邏輯移位時,它會丟失位,就像它仍然是32位一樣。邏輯移位在彙編符號擴展後遺失位ARMv8
我希望能夠最終將所有變量從我的原始變量轉換到64位變量的上邊。 (0xFFFFFFFF00000000是我期待的結果)
下面的代碼顯示到展示的8位的移位,其中比特被丟失:
str_fmt:.string "\nWord Value: 0x%08x \nWord Extended to 64-bit: 0x%016x\nLSL: 0x%016x\n\n"
.balign 4
.global main
main: stp x29, x30, [sp, -16]!
mov x29, sp
mov w19, 0xFFFFFFFF
sxtw x20, w19
lsl x21, x20, 8
results:
adrp x0, str_fmt
add x0, x0, :lo12:str_fmt
mov w1, w19
mov x2, x20
mov x3, x21
bl printf
done: ldp x29, x30, [sp], 16
ret
輸出如下:
字值:爲0xffffffff 字擴展到64位:0x00000000ffffffff LSL:0x00000000ffffff00
什麼我在我的代碼丟失,使邏輯左移導致0xFFFFFFFF00000000?
試過你的解決方案,它改變了打印格式,但並沒有解決邏輯移位丟失位的問題 – Sarchwalk
@Sarchwalk你確定你已經修復了這兩個實例嗎? – fuz
我得到了不計其數的零,後面是ffffffff和ffffff00 @fuz – Sarchwalk