我不是最好的,當它涉及到按位功能,但我想弄清楚這是如何工作的。一旦我弄清楚這是如何工作的,我大概可以找出其餘的。將PowerPC逆向C
ori r11, r11, 11
這怎麼可能被翻譯成C?我做對了嗎?
r11 = (r11 | 11);
我知道這是不正確的C語法,我只是想對它有一個基本的瞭解。
我不是最好的,當它涉及到按位功能,但我想弄清楚這是如何工作的。一旦我弄清楚這是如何工作的,我大概可以找出其餘的。將PowerPC逆向C
ori r11, r11, 11
這怎麼可能被翻譯成C?我做對了嗎?
r11 = (r11 | 11);
我知道這是不正確的C語法,我只是想對它有一個基本的瞭解。
的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),那麼您將無法獲得正確的結果。 語法不變,「低位比特」的位置將會改變。
ori是「或立即」,所以你是正確的。在C是也沒關係,但最好是:
r11 |= 11;
好的是,許多PowerPC指令都完全像對應的C語句一樣讀取。例如add命令
add r3,r4,r5
等同於聲明
r3 = r4 + r5;
正如我所說的,這適用於大多數的命令。有例外。例如,它不適用於商店。除此之外,你需要查看規範中的每一個助記符。
你有沒有發現任何會自動執行此操作的東西?即使c代碼沒有編譯,它也比彙編更可讀。 – rolls