簡體   English   中英

ARMv7 匯編如何讀取每一位的值

[英]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標志(您可以使用CSCC條件代碼有條件地執行代碼)可能是最佳選擇。 例如,要計算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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM