2014-06-12 94 views
1

我不是最好的,當它涉及到按位功能,但我想弄清楚這是如何工作的。一旦我弄清楚這是如何工作的,我大概可以找出其餘的。將PowerPC逆向C

ori r11, r11, 11 

這怎麼可能被翻譯成C?我做對了嗎?

r11 = (r11 | 11); 

我知道這是不正確的C語法,我只是想對它有一個基本的瞭解。

+0

你有沒有發現任何會自動執行此操作的東西?即使c代碼沒有編譯,它也比彙編更可讀。 – rolls

回答

3

ori指令or immediate: ori RA RS UI

其中:

RA = the resulting register to store the operation result 
RS = the source register for which to use in the operation 
UI is an unsigned 16-bit integer for the operation 

你已經正確地解釋它,你的C看起來也是有效的。

請注意,PowerPC是一個大端的體系結構,因此如果您打算比較跨平臺的任何數據(如英特爾x86),那麼您將無法獲得正確的結果。 語法不變,「低位比特」的位置將會改變。

1

ori是「或立即」,所以你是正確的。在C是也沒關係,但最好是:

r11 |= 11; 
0

好的是,許多PowerPC指令都完全像對應的C語句一樣讀取。例如add命令

add r3,r4,r5 

等同於聲明

r3 = r4 + r5; 

正如我所說的,這適用於大多數的命令。有例外。例如,它不適用於商店。除此之外,你需要查看規範中的每一個助記符。