x86

    3熱度

    1回答

    我以彙編(x86,linux)開始,只是爲了好玩。這是我的第一個小程序,它只是檢查,如果我通過一個參數通過命令行,如果沒有它打印一個消息,它後退出: section .text global _start _start: pop ebx ;argc dec ebx test ebx,1 jne print_string exit:

    -1熱度

    1回答

    我想編譯一個簡單的C程序(Win7 32bit,Mingw32 Shell和GCC 5.3.0)。 C代碼是這樣的: #include <stdio.h> #include <stdlib.h> #define _set_tssldt_desc(n,addr,type) \ __asm__ ("movw $104,%1\n\t" \ :\ :"a" (addr),\

    0熱度

    1回答

    我有一個調用另一個函數的主函數。我已經在很多地方讀到,發生以下情況時,函數調用發生: push %ebp movl %esp, %ebp 我的目標是前和函數調用後找到堆棧的頂部。 以下是我的主: #include <stdio.h> long *ebp; int main(){ asm("movl %ebp,ebp"); printf("Top of stack be

    0熱度

    1回答

    裝配中的初學者級別。 我接收在Visual Studio中的錯誤是: 1> File2.asm(27):錯誤A2006:未定義的符號:sprintf的 1> File2.asm(28):錯誤A2006:未定義的符號:MessageBoxA 文件1是什麼處理的計算 文件2就是打印結果的一個窗口。 行處理打印指令是: invoke sprintf, addr szBuf, offset $interm

    0熱度

    2回答

    網上的一些程序似乎做同樣的工作,甚至沒有使用int指令,,如直接寫入bx800。在這種情況下,BIOS究竟應該如何知道某些文本是否應該寫入控制檯?是否確保初始中斷髮生?如果是這樣,何時,什麼是做同樣工作的等效流水線(或中斷向量和ah的組合)?

    0熱度

    1回答

    我想了解命令行參數如何工作的細節。 這就是我的想法發生了: 當您編譯包含在C main()功能的源代碼,生成的目標文件將與CRT相連,且入口點計劃將會是_start()函數(它存在於CRT中),並且_start()將會調用main()。 現在,當你運行你的程序,並通過它的一些命令行參數,命令行參數將被傳遞給_start()功能,然後_start()將重新通過命令行參數main()。 我正確嗎?

    -1熱度

    1回答

    我想編寫一個小程序來獲取x86 CPU的功能。指CPUID文檔後,我發現有2部分: (1)EAX=1: ...... As of January 2011, the standard Intel feature flags are as follows: ...... (2)EAX=80000001h: ...... AMD feature flags are as follows:

    3熱度

    1回答

    當您使用內存覆蓋前綴但所有操作數都是寄存器時會發生什麼? 因此,假設您的代碼爲mov eax, ebx或add eax, ebx,默認值爲32位,但您使用67h覆蓋。 處理器如何處理這種情況?

    1熱度

    1回答

    是否可以使用索引尋址模式語法計算地址並將其存儲到寄存器中?像下面(錯誤)的表達(在AT & T彙編語法): movl $dataarray(,%edi,8), %eax 我知道變址尋址模式,可以用於移動數據: movl dataarray(,%edi,8), %eax 然而,在這種情況下,我想要做的是將dataarray元素的地址存儲在%eax寄存器中,其索引爲%edi。

    0熱度

    1回答

    我正在創建一個x86解碼器,我正在努力理解並找到計算指令助記符的有效方法。 我知道操作碼6 MSB是操作碼位,但我找不到在助記表中使用這6位的任何地方。我發現唯一的助記表是整個操作碼字節本身,而不僅僅是6個MSB。 我想問一下哪些有效的方法可以解碼操作碼字節中編碼的助記符,以及是否有使用6個MSB而不是整個操作碼字節的表引用。