inline-assembly

    0熱度

    1回答

    這是我在VC++項目中插入的一個簡單的asm代碼。 return_addr是堆棧幀的返回地址。我有一個StackWalk函數(不是我寫的codeproject.com/KB/threads/StackWalker.aspx),它使用StackWalk64()來提取幀。這個細節不相關。使用返回地址,我從當前正在檢查的堆棧中的函數代碼中提取一個字節。 __asm{ push eax

    3熱度

    1回答

    大家好 我正在試圖構建一個代碼來演示如何在彙編中進行AES加密。 Intel最新手冊有 AESENC xmm1中,XMM2/m128中-Perform AES加密流的一個圓輪密鑰 從第二源操作數,從第一 源操作數上的128位數據(狀態)下操作,並將結果存儲在目標操作數中。 AESENCLAST xmm1中,XMM2/AES加密流 的循環密鑰 從第二源操作數,從第一 源操作數上的128位數據(狀態)

    0熱度

    1回答

    它在我看來的功能工作正常。我正在嘗試爲多線程應用程序實現一個計數器。由於計數器值可能超出整數範圍,因此我使用了64位。我不太清楚線程安全性,因爲在這裏我們正在處理64位數字。 UINT64 get_and_increment(volatile UINT64* dest) { UINT64 old_value, new_value; bool result = false;

    3熱度

    2回答

    我做了一些重構c167特定於平臺的代碼,我偶然發現了一個內聯彙編問題。 上一頁代碼: asm volatile (" extp #pag:%0, #3 mov r4, pof:%0 @ R4 = g_nRcvBufCount sub r4, #1 @ R4 = R4 - 1 mov pof:%0, r4 @ g_nRcvBufCount =

    3熱度

    2回答

    我一直在關注此: (http://www.codeproject.com/KB/tips/boot-loader.aspx) 但不知道接下來要做什麼以及如何做。 如何加載自編寫的內核?或者如何創造比單一細分市場更多的地方? 如何處理二進制文件?我必須將bootloader複製到第一個扇區,好的,但是內核等等,只是放在軟盤/光盤上?

    1熱度

    1回答

    我試圖使用內聯彙編器在代碼段中嵌入指向字符串的指針。但是gcc在符號名稱的開頭添加了一個$,導致鏈接錯誤。 這裏是一個小例子, static const char str[] = "bar"; int main() { __asm__ __volatile__ ( "jmp 0f\n\t" ".long %0\n\t" "0:"

    2熱度

    3回答

    我必須編寫內聯彙編代碼來執行我已集成到我的硬件中的定製指令。 根據在實際芯片上找到什麼硬件,指令的行爲會有所不同。我的裝配如下所示: asm volatile ( " instr_generic %1, %2, %0 \n\t" : "=r" (c) : "r" (a), "r" (b) : "%g0" );

    0熱度

    3回答

    我在Ç程序中定義的以下宏: #define ISE1 "cust_add" #define ISE2 "cust_sub" #define ise_inst(inst, a, b, c) \ asm volatile ( " " inst " %1, %2, %0 \n\t" \ : "=r" (c) \ : "r" (a), "r" (b) \ : "%g0" \ ) 在

    1熱度

    2回答

    我從來沒有做過裝配(從前),並從未做過任何x86,但我發現了舊的現有代碼中有人沒有做一個原子操作,他們應該在哪裏討厭的bug。編寫代碼的人早已離去,周圍沒有人知道我的問題的答案。我需要做的是爲128位值創建一個原子副本。我目前擁有的代碼如下: void atomic_copy128(volatile void* dest,volatile const void* source) { #if PL

    2熱度

    2回答

    這是原來的代碼進行編譯: #define CPU_PREFETCH(cache_line) \ { int* address = (int*) (cache_line); \ _asm mov edx, address \ _asm prefetcht0[edx] \ } #define CPU_GET_CYCLES(low) \ {