x86-64

    0熱度

    1回答

    我用下面的代碼創建了一個簡單的C++源文件。 int main() { int a = 1; int b = 2; if(a < b) { return 1; } else if(a > b) { return 2; } else { return 3; } } 我用objdump的命令來獲取上述源代碼的彙編代碼。 併線 INT B = 2;轉換爲

    1熱度

    1回答

    這是我的代碼在NASM寫道 此代碼是找到字符串S1字符串s2,如果發現或返回-1,如果沒有找到返回指數。 我的麻煩是我的EBX(索引),它增加了1,2,3 ... 9確定,但是當它變爲10時,它們將顯示':'或11它顯示';' 我不知道爲什麼?請幫助 非常感謝 對不起,我英文不好 ; DINH VAN KIET ; TUAN 3 ; Find String 32bit ; Build ;

    2熱度

    1回答

    如你所知,從2.0版本,PCI Express支持化合物的原子操作:FetchAdd,Swap,CAS:https://pcisig.com/sites/default/files/specification_documents/ECN_Atomic_Ops_080417.pdf 也稱,該x86_64的CPU具有彙編化合物的原子操作:lock add,[lock] xchg,lock cmpxch

    1熱度

    1回答

    在文章Say Hello to Assembly - Part 3中,作者想要在堆棧上打印一個字符串(轉換後的整數)。 r12包含字符串中的數字個數。 ;;; Find length of string mov rax, 1 mul r12 mov r12, 8 ; 8 times num digits to get len in bytes mul r12 mov r

    0熱度

    1回答

    我有一個C#應用程序,在'任何CPU'目標上的Visual Studio 2017中編譯,禁用'首選32位'選項。在這個應用程序中,我試圖調用kernel32!GetBinaryType()。在啓用「首選32位」的情況下運行時,它可以正常工作。從C++可執行文件以32位或64位模式運行時,它工作正常。我不確定我在做什麼錯誤的64位C#應用程序。 這是我的PInvoke簽名: [DllImport(

    2熱度

    1回答

    我正在用C編寫一個AVX矩陣向量乘法函數,但是實現了我需要的指令並未在GCC中實現,所以我將它看作是學習某些x86程序集的絕好機會。我首先在MIPS程序集中編寫了一個例程,然後嘗試翻譯它。我的代碼不工作,我得到段錯誤,我不知道爲什麼。如果我在代碼中刪除了兩個jnz,它可以工作,但我不明白他們爲什麼會產生任何影響。這種類型的跳轉銷燬是否註冊了我正在使用的? 編輯:看起來main中的前兩條指令並沒有將

    2熱度

    1回答

    可有人向我解釋爲什麼我們在主函數@0x6f5移動在rax價值rdi,然後在rdi值複製到get_v的堆棧,然後轉移回rax @0x6c8?也許這是x86-64的慣例,但我不明白它的邏輯。 main: 0x00000000000006da <+0>: push rbp 0x00000000000006db <+1>: mov rbp,rsp 0x0000000000

    3熱度

    3回答

    什麼時候在x86中使用大小指令似乎有點含糊。 This x86 assembly guide說以下內容: 通常,的數據項中的一個給定的存儲器地址 預期的大小可以從彙編代碼指令,其中它是 引用來推斷。例如,在所有上述指令中,可以根據寄存器 操作數的大小來推斷存儲器區域的大小。當我們加載一個32位寄存器時,彙編器可能會推斷我們所指的內存區域是4個字節寬。 當我們將一個字節寄存器的值存儲到存儲器時,彙編

    4熱度

    2回答

    我無法理解什麼是彙編的以下行做: 0x401810: repz cmps BYTE PTR ds:[rsi],BYTE PTR es:[rdi] 0x401812: seta dl 0x401815: setb al 調試後,我明白,第一個指令比較寄存器rsi和rdi,逐字節的字節數。 然後根據該指令設置rdx和rax的低位字節。 我的疑惑是,當我在線查閱這個指令時,它說seta如果它的上

    7熱度

    1回答

    背景: 我們已經購買了一個軟件產品,該產品可在Visual Studio中構建到32位Windows應用程序。我們希望將此應用程序移植到64位。 此代碼的任務關鍵組件是最初由第三方使用gFortran構建的黑盒靜態庫(.a文件)。原來的開發人員已經過世了,我們能夠得到的Fortran源代碼是不完整的,而不是這個庫的版本(並且包含編譯庫中沒有的關鍵錯誤)。他們沒有使用VCS。 問題: 我想創建一個6