我試圖將PowerPC asm片段轉換爲C++。這是我到目前爲止所做的:PowerPC extsb在C
PPC:
lis r11, ((dword_83EEF800+0x10000)@h)
lis r10, 0x20 # 0x207E90
addi r11, r11, -0x800 # dword_83EEF800
ori r10, r10, 0x7E90 # 0x207E90
lis r9, 4 # 0x46E80
ori r9, r9, 0x6E80 # 0x46E80
lwzx r11, r11, r10
subf r11, r11, r28
divw r11, r11, r9
extsb r3, r11 // Problem
C++:
DWORD r11 = 0x83EEF800 + 0x10000;
r11 += -0x800;
DWORD r10 = 0x207E90;
DWORD r9 = 0x46E80;
r11 = *(DWORD*)(r11 + r10);
r11 -= r28;
r11 /= r9;
現在我的問題,我到底怎麼會在C++中編碼「extsb」?該文檔說明了在這種情況下r11中的最低有效字節並將其存儲在r3的低序8位中。然後它將位56(在這種情況下是24,因爲它是一個32位寄存器)放入r3的其餘位。爲了讓R11的至少顯著字節我會做到這一點:
r11 & 0xFF
,但我不知道如何讓24位,並用它來填補R3的其餘位。我只能使用本機C++!如果有人知道我可以如何將這個ppc操作轉換爲C++,請告訴我(如果我發佈的轉換後的ppc代碼有任何重大錯誤,請告訴我)。提前致謝!
難道你不能只使用內聯彙編? – user0042
@ user0042 like'DWORD r3; __asm {extsb r3,r11}'?我可以做到這一點,但我想了解它是如何工作在C++ – SupaDupa