inline-assembly

    0熱度

    6回答

    我只是測試,並試圖瞭解彙編器是如何工作與C,所以我周圍的一些教程瀏覽和我用C發現這一點: __asm { mov ax,0B800h //startaddress for the screen memory (in textmode) mov es,ax //add the startaddress to es xor di,di //reset

    6熱度

    2回答

    下面的GCC inline asm取自LuaJit的coco庫。有人可以提供一行一行的解釋它的功能嗎? static inline void coco_switch(coco_ctx from, coco_ctx to) { __asm__ __volatile__ ( "movl $1f, (%0)\n\t" "movl %%esp, 4(%0)\n\t"

    12熱度

    2回答

    爲什麼打印垃圾而不是退出我的程序優雅?我在BSD上以這種方式使用系統調用,並且我想知道如何使它在Linux中工作。 int main(int argc, char **argv) { __asm ("movq $1,%rax; movq $0,%rdi; syscall"); /* exit(0) ? */ return 0; } 謝謝。

    10熱度

    3回答

    我在Linux下的彙編程序開始。我將以下代碼保存爲testasm.c 並將其編譯爲:gcc testasm.c -otestasm 編譯器回覆:「asm'中的不可約束」。 #include <stdio.h> int main(void) { int foo=10,bar=15; __asm__ __volatile__ ("addl %%ebx,%%eax"

    1熱度

    4回答

    如何直接調用「printf」而不包括stdio.h? 我發現了一個有趣的教程在這裏: http://www.halcode.com/archives/2008/05/11/hello-world-c-and-gnu-as/ 所以,這裏是我的嘗試: int main(){ char ss[] = "hello"; asm ( "pushl %ebp ;" "movl %esp

    7熱度

    3回答

    我正在編寫一個需要做一些快速數學計算的C程序。我正在使用內聯SSE彙編指令來獲取一些SIMD操作(使用打包的雙精度浮點數)。我正在Linux上使用GCC進行編譯。 我處於需要循環一些數據的情況,並且在我的計算中使用了一個常數因子。我希望在循環過程中將這個因子保存在一個安全的寄存器中,所以我不必每次都重新加載它。 要使用一些代碼澄清: struct vect2 { fltpt x;

    1熱度

    2回答

    我想一些內嵌彙編代碼在我的C代碼: __asm { mov reg,val }; 的問題:我要動態地定義寄存器和價值。 我知道'val'可以是用C代碼編寫的變量,但我不知道如何動態選擇寄存器(即根據用戶輸入寄存器'dh'或'dl'來決定)。 有什麼建議嗎?

    1熱度

    1回答

    我想在C代碼中使用匯編使用C變量。 我的代碼如下所示: __asm { INT interruptValue }; 其中「interruptValue」是一個變量,我從用戶那裏得到(例如15或15小時)。 當我嘗試編譯,我得到: Assembler error: 'Invalid instruction operands' 我不知道什麼是正確的類型interruptValue。我試了很久\ i

    11熱度

    2回答

    昨天我瞭解到,在針對AMD64和Itanium目標進行編譯時,Microsoft Visual C++不支持內聯彙編(使用__asm關鍵字)。 這是正確的嗎?如果是這樣,有誰知道他們爲什麼不支持內聯彙編這些目標?這似乎是一個相當大的功能,只是下降...

    0熱度

    2回答

    我設法將NASM設置爲獨立.asm文件的編譯器,但是我找不到將NASM設置爲內聯彙編程序(__asm指令)的編譯器的方法。例如, helloWorld db "Hello world !",0 不會編譯(彙編程序語法錯誤,找到「db」)。 有沒有辦法做到這一點?還是我必須使用MASM或使用其他開發環境? 謝謝! PS:通過MSDN不給任何線索的方式:d