inline-assembly

    0熱度

    1回答

    當編譯該代碼 void FastRead() { register uint32_t cnt = 1000, sample; register uint8_t *dst = data; asm volatile( "loop1:" "ldr %[sample], [%[src]]\n\t" "strb %[sample], [%[d

    1熱度

    1回答

    的CentOS 6.5 64位VPS,500MB RAM GCC 4.8.2 我有以下功能僅適用如果我使用EDI作爲約束來保存字符串指針。如果我嘗試使用任何其他寄存器或約束g或q等,它會發生段錯誤。 但是隻有當鏈接時間優化和o3一起使用時纔會出現此問題。如果o2沒關係。如果我不使用-flto,那很好。但是,兩者一起,那麼唯一的註冊,我可以使用不崩潰是edi gcc -flto CFLAGS=-I

    0熱度

    1回答

    我想了解什麼會在C以下代碼的編譯結果: int ppid; #define SYS_getppid 23 asm volatile("int %1" : "=a" (ppid) : "i" (T_SYSCALL), "a" (SYS_getppid)); 哪裏T_SYSCALL是恆定的64 這我到目前爲止: ? // I know something is missing he

    1熱度

    1回答

    我試圖在Visual C++中使用內聯ASM調用operator new和operator delete。 例如,我有這樣的功能: __forceinline void __fastcall deallocate(pointer& _ptr) { __asm { mov eax, dword ptr[_ptr] mov ecx, dword ptr[e

    2熱度

    1回答

    你好的StackOverflow社區 我也遇到以下挑戰存儲一個常數:在我的C++應用程序,我在其中相當複雜(立方)循環,在所有的深處,我執行以下: 計算4浮子由恆定 值 乘所有4個值轉換浮子爲整數 該代碼將在每個循環中執行數千次迭代(導致數十億次操作),並且我希望儘可能快地實現它,所以我試圖利用SSE處理器指令。 在嘗試手動優化代碼時,我遇到了以下障礙:每當我將所有值乘以一個常量時,都必須將常量加

    0熱度

    2回答

    是否有某種插件,擴展或某些可以在Microsoft Visual Studio 2010中啓用64位內聯彙編的東西?

    5熱度

    1回答

    問題是,在C函數內部我有一個內聯程序集。 喜歡的東西 ldr r7, =0xdeadbeef svc 0 如果文字池沒有明確創建(這種情況下),彙編 創建一個在翻譯單元的結束。通常情況下,這很好,但如果翻譯單元變得非常龐大,這不起作用,因爲 文字池離ldr指令太遠。 因此,我想知道處理問題的最佳方法是什麼。最明顯的方法是 手動創建聯彙編內有文字池: ldr r7, =0xdeadbe

    2熱度

    1回答

    在A64彙編程序中,有不同的方式來指定地址。 /* [base{,#0}] Simple register (exclusive) - Immediate Offset [base{,#imm}] Offset - Immediate Offset [base,Xm{,LSL #imm}] Offset - Register Offset [base,Wm,(S|U)XTW

    0熱度

    1回答

    我是新裝配。最近我需要Visual Studio 2013中的內聯程序集來提高性能。 但是我來到了分支目標範圍問題: _asm { mov ecx, cnt; jecxz AZERO: AL1: /*Some operation codes here, but may be exceed 128 byte*/ loop AL1; AZ

    1熱度

    2回答

    我嘗試寫一些簡單的彙編代碼,但我得到這個錯誤: 錯誤C2443:操作數大小衝突 我要乘2號,然後移動結果另一個變量... 我的老師寫了這個代碼: int main() {unsigned char x,y; _asm{ mov ax,3 mov bx,5 mul bx mov y,ax } cout<<y<<"\n"; } 從我的理解,斧頭