2012-11-26 55 views
0

如果我理解正確,寄存器文件是一個整數數組。所以我首先需要將寄存器$ a0轉換爲二進制,對吧?一旦我完成了,我將如何訪問它的各個位? 我想我可能需要使用一個面具,但我想不出在ORed或ANDed之後訪問寄存器的各個元素的方法。

謝謝

+2

您似乎在數字和數字表示之間有一個很常見的混淆。你需要花一些時間思考這個問題,因爲這對程序員來說是個致命的混亂。 –

+0

@DavidSchwartz我希望我可以upvote約31多次的評論。 –

回答

2

您不「將整數轉換爲二進制」。整數作爲位存儲在寄存器中。二進制是一個整數的文本表示

你想用AND來掩蓋寄存器的各個位,並測試該結果是否爲非零值。

// Assuming 32-bit registers 
int reg = .... // Your register... 
int count = 0; 
for (int i=0; i<32; i++) { 
    uint32_t mask = 1<<i; 
    if (reg & mask) 
     count++; 
} 
+0

如果性能很重要,請使用[SWAR算法](http://stackoverflow.com/a/109025/721269)。 –

+0

是的,整數作爲位存儲。謝謝你指出。至於解決方案,你是否建議應用掩碼32次,如0x0000 0001,然後0x0000 0002,0x0000 0004 ... 0x8000 0000。我相信有一個更簡單的方法來做到這一點。 – user1078719

+1

更容易?疑。更直接?我不這麼認爲。更有效?請參閱@ DavidSchwartz的鏈接。 –

相關問題