我正在閱讀gcc 關于擴展 ASM 的指南,但遇到了一個問題,即編譯器沒有按照我想象的方式解釋程式集。我想我會嘗試使用一些旋轉指令,因為這些指令在 C 中并不容易獲得。
這是我的 C 函式:
int rotate_right(int num,int count) {
asm (
"rcr %[value],%[count]"
: [value] "=r" (num)
: [count] "r" (count)
);
return num;
}
并使用 x86-64 gcc (trunk) -O0 編譯輸出:
push rbp
mov rbp, rsp
mov DWORD PTR [rbp-4], edi
mov DWORD PTR [rbp-8], esi
mov eax, DWORD PTR [rbp-8]
rcr eax,eax
mov DWORD PTR [rbp-4], eax
mov eax, DWORD PTR [rbp-4]
pop rbp
ret
我遇到的問題是 GCC 將我的行內程式集表示為“按我想要的引數而不是按我想要的引數旋轉EAX。EAX這count是我期望得到的:
push rbp
mov rbp, rsp
mov DWORD PTR [rbp-4], edi
mov DWORD PTR [rbp-8], esi
mov eax, DWORD PTR [rbp-8]
mov ecx, DWORD PTR [rbp-4]
rcr eax,ecx
pop rbp
ret
uj5u.com熱心網友回復:
首先,讓我按照標題中的說明解決您的問題。
static inline int ror(int num, int count) {
__asm__ ("ror\t%0,
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/498473.html
上一篇:在MASM中你能做到嗎PUSH0xFFFF0820CAMBA78D
下一篇:GDB如何知道優化的區域變數值?
