正在學ARM求教怎樣理解位運算的掩碼?

時間 2021-08-12 21:35:48

1樓:張匯鋒

掩碼的作用是篩選出暫存器中的指定位,並可以很方便的通過位運算把它清零而不影響其他位,然後就可以通過位運算賦新值了。

定義乙個暫存器REG,使用read(reg)、write(reg, data)操作可以讀、寫暫存器,這個暫存器的0、1、2位(最右邊為0)可以決定A功能的8個狀態;

此時可以得到REG控制功能A的掩碼REG_FUNC_A_MASK = 0xf8 = 11111000b;

REG_FUNC_A_0 = 0x00 = 00000000b

REG_FUNC_A_1 = 0x01 = 00000001b

REG_FUNC_A_2 = 0x02 = 00000010b

REG_FUNC_A_3 = 0x03 = 00000011b

REG_FUNC_A_4 = 0x04 = 00000100b

REG_FUNC_A_5 = 0x05 = 00000101b

REG_FUNC_A_6 = 0x06 = 00000110b

REG_FUNC_A_7 = 0x07 = 00000111b

這時就可以直接通過掩碼將0、1、2位清零而不影響其他位,然後在重新賦予新功能。

例如配置功能A為5狀態,可以這樣操作:

write(REG, (read(REG) & REG_FUNC_A_MASK) | REG_FUNC_A_5)

解釋以下這個操作就是首先讀出REG的內容,假設為0xff = 11111111b,此時將其與掩碼按位與之後就變成0xf8 = 11111000b,隨後在將其與REG_FUNC_A_5按位與就變成0xfb = 11111101b。此時掩碼指定的位變成了新的值,而其他的位值不變。

小白求教macbook,搭載arm的macbook值得等待嗎?

捌玖年陸月肆號 現在還有人覺得win10卡錢不到位什麼都不好用既然選擇了價效比就肯定對得起這個配置既然是小白就可以忽略arm的筆記本 mb說到底還是輕辦公 可愛小陽仔 macOS其實也佔記憶體,和Windows差不多。桌面上沒有任何程式的時候都大約佔4GB記憶體。Windows的來自系統和後台程式,...

正在學材料的學生應該怎麼走呢?

蛇精女現在還在 關於在知乎上問關於生化環材這幾個專業情況的同學,我想提醒你們,在知乎上貶低這幾個專業已經形成一股風氣,多少有些不理性的因數在裡面。舉個例子,我之前有看過乙個剛剛考到材料專業的學生在知乎問問題,下面的回答連具體方向和學校都沒問,直接建議退學重新考。反正退學的又不是提建議的人 關於材料就...

本人正在學MFC?請問,訊息對映,事件驅動,命令傳遞是MFC獨有的嗎?

發發啊喂 訊息對映不是MFC獨有.Win32程式設計裡面就有了.事件驅動也是Win32的.MFC只是對其作了封裝.但本質上還是作業系統提供的API而已.Windows 最神奇的地方是 不要去呼叫Windows,Windows會來呼叫你 所以你寫的程式也大多是告訴Windows,調你的時候如何響應.這...