[英]ARMv7 Assembly How to Read value of each bit
如果我有一個保存值的寄存器,我如何分別讀取每個位並以某種方式處理它以存儲該位是 0 還是 1? 我的理解是讀第一位,右移,讀第一位,右移,重復直到空。 但我無法弄清楚如何閱讀該位。 我知道 shift 只是 LSR,這很容易。
有多種方法可以實現這一目標。
你能得到一個tst
指令嗎:
tst r0, #4 @ set Z if bit 0x04 is clear in R0
您可以將所需的位從寄存器中移出到進位標志中:
movs r0, r0, lsr #3 @ set C if bit 0x04 was set in R0
您可以自己將所需的位提取到寄存器中:
ubfx r1, r0, #2, #1 @ set R1 to 1 if bit 0x04 is set in R0
如果您想在循環中執行此操作以按順序處理每個位,使用C
標志(您可以使用CS
和CC
條件代碼有條件地執行代碼)可能是最佳選擇。 例如,要計算R0
中的位數,您可以使用如下代碼:
mov r1, #0 @ initialise counter to zero
loop: movs r0, r0, lsr #1 @ shift R0 to the right and set C to its LSB
addcs r1, r1, #1 @ increment R1 if C was set
bne loop @ loop until R0 is clear
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.