ia-32

    9熱度

    3回答

    我正在爲ia32編寫針對CMPXCHG8B的GCC內聯asm。不,我不能使用__sync_bool_compare_and_swap。它必須與-fPIC一起工作。 到目前爲止最好的我(編輯:畢竟不能正常工作,請參閱下面我自己的答案的詳細信息)是 register int32 ebx_val asm("ebx")= set & 0xFFFFFFFF; asm ("lock; cmpxchg8b %

    4熱度

    2回答

    我讀指令 imul 0xffffffd4(%ebp, %ebx, 4), %eax ,我用它做什麼確切百思不得其解。我明白,不管怎麼樣,但我無法弄清楚語法。

    3熱度

    2回答

    爲什麼IA-32使我們能夠跳入指令的中間? 當我在彙編程序中編寫時,如何使用此架構特性進行優化? (除了明顯的情況,我們喜歡在寄存器內保存命令的編碼,然後激活這個命令)?

    3熱度

    3回答

    我已經收到了這個問題,在我的裝配過程: 是什麼程序做 以及應該如何叫什麼名字? push ebp mov ebp, esp push esi mov esi, [ebp+4] mov eax, [esi] sub eax, [esi+4] add esi, 8 mov [ebp+4], esi pop esi pop ebp ret 它看起來像[ebp+4]一種說法,

    2熱度

    2回答

    儘管看着教科書試圖抓住這一點,但我遇到了麻煩。 0x08048b29 <func+0>: push %ebp 0x08048b2a <func+1>: mov %esp,%ebp 0x08048b2c <func+3>: push %ebx ... 0x08048b30 <phase_2+7>: lea -0x28(%ebp),%eax 在lea指令中,

    5熱度

    2回答

    對於如何從彙編語言中的方法返回值,我略感困惑。據我所知,eax寄存器用於保存要返回的結果。 舉個例子,說我的結果是4,我用: mov eax, 4 我現在已經在EAX 4,我想回到這個方法。有什麼我需要做的或將指令ret自動返回結果? 的事情是,我不知道,因爲當我使用ret我回去給調用者有什麼特別之處寄存器eax,呼叫者可以自由訪問任何寄存器的我儲存的結果,那麼爲什麼我不能只用ebx或ecx來

    1熱度

    1回答

    我想在IA-32上執行原子操作和''操作。 請考慮以下情況: ; processor 0 lea edx, var mov ecx, mask mov eax, [edx] lock and [edx], ecx ; processor 1 lea edx, var mov eax, 0xff xchg [edx], eax 我不知道如果這是可能的,以「無功」的店由處理器

    4熱度

    2回答

    我正在研究英特爾的IA-32軟件開發者手冊。特別是,我正在閱讀以下手冊:http://www.intel.com/Assets/PDF/manual/253666.pdf。以ADD指令爲例。在第79頁上,寫入了可以將r8(8位寄存器)添加到r/m8(8位寄存器或存儲器位置)的步驟。在下面的幾行中,還寫到你可以在r8上添加一個r/m8。問題是:如果我添加兩個8位寄存器,我正在使用哪個指令?謝謝。

    2熱度

    1回答

    在這裏,我檢查C語言編寫的一個簡單的程序,節省了字符指針,上面寫着一串GDB問題「你好,世界!\ n」個 這裏是我的GDB的輸出..我很困惑,在GDB的不一致,什麼是正確的位置: $ gcc -g pointer.c $ gdb -q ./a.out Reading symbols for shared libraries .. done (gdb) list 1 #include <st

    0熱度

    1回答

    有人可以解釋我在具有時鐘功能的兩個for循環之間的延遲上下文中的確切交互。在cout語句中,for1如何與for2進行交互(640000000上的30)? start=clock(); cout<<endl<<start<<endl; for(delay=0; delay<30; delay++) for(i=0; i<640000000; i++); end=clock();