inline-assembly

    4熱度

    2回答

    我想branch使用ARM assembly而不是標籤,而不需要修改LR寄存器。所以我用B而不是BL或BX。 我想要在GCC inline asm中完成。 Here是文檔,這裏是我已經試過: #define JMP(addr) \ __asm__("b %0" \ : /*output*/ \ : /*input*/ \ "r" (addr) \

    0熱度

    2回答

    我必須實現應該是原子操作的set_bit函數。我在linux源代碼中發現了這個彙編代碼。 (我正在使用sparc),並希望將其更改爲可在C程序中使用的函數。 static void set_bit(unsigned int nr, unsigned int *addr) { // *vec |= 1<<bit; <== original non-atomic C code

    0熱度

    1回答

    我想要做的是優化編譯*.c文件到*.s文件並從*.s文件獲得彙編代碼,並用test.c文件中的這些彙編代碼替換原始代碼。 Belows是我所做的。 左圖爲test.c,右一個是由gcc -S -O3 test.c 因此產生test.s,我在藍色框中複製代碼,並將其安裝在test.c代碼像下面。 但是,當我試圖編譯gcc -o test test.c,它發生錯誤: Error : invalid o

    1熱度

    1回答

    我正在嘗試製作一些內聯彙編以測試ARM上旋轉的性能。代碼是C++代碼庫的一部分,所以旋轉是模板專業化。代碼如下,但它的生成信息對我來說沒有多大意義。 據ARM Assembly Language,指令大致爲: # rotate - rotate instruction # dst - output operand # lhs - value to be rotated # rhs - rot

    0熱度

    1回答

    我胳膊底下捉編譯失敗一些內聯彙編: g++ -DNDEBUG -g2 -O2 -pipe -c sha.cpp {standard input}: Assembler messages: {standard input}:779: Error: ARM register expected -- `ror [sp,#20],#31' {standard input}:799: Error: A

    1熱度

    1回答

    我嘗試在c程序中使用lea rax, [rip]。我的程序如下: ... asm volatile ("lea %%rax, %[rip]" :); ... 但是,程序不編譯,拋出一個錯誤:undefined name operand。我的平臺是x86-64架構上的Ubuntu 1404(作爲虛擬機)。

    2熱度

    1回答

    我試圖找出如何使用DB變量從ASM到內聯ASM C++ 我有這樣的ASM代碼: filename db "C:\imagen.bmp" eti0: mov ah,3dh mov al,0 mov dx,offset filename int 21h 和C++: //ASCII of C:\imagen.bmp plus zero in the end because of int 2

    3熱度

    1回答

    由於我們在X32之下從Debian維護人員那裏收到了一些錯誤報告,因此我正在使用內聯彙編來處理某些軟件的端口。在X86和X64下的代碼都很好。 我們在emms指令捕捉總線錯誤: ... 0x005520fd <+3885>: pop %rsp 0x005520fe <+3886>: emms => 0x00552100 <+3888>: pop %rbx 0x005

    7熱度

    1回答

    因此,我後來自學了x86程序集,並且只是在C++中使用內聯彙編。 所以我想要做的就是在函數參數中傳遞一個數組,一個索引(無符號整數)和一個數字。通過彙編,它會將該數組的內存位置中的值更改爲傳入值。所以代碼看起來像這樣。 inline void Set(int pArray[], unsigned int pIndex, int pNum) { __asm { mov ebx,

    1熱度

    1回答

    在GCC手冊中,部分6.43.2.5 Extended Asm - Clobbers,在「記憶」撞的解釋寄存器,被提及,避免沖洗寄存器一招: 如果你知道存儲器的大小在編譯時被訪問,可以指定一個存儲器輸入這樣的: {"m"(({ struct { char x[10]; } *p = (void *)ptr ; *p; }))} (假設你訪問的10個字節的字符串。) 我想我理解這個想法,但是我不