inline-assembly

    0熱度

    2回答

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

    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"

    7熱度

    3回答

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

    4熱度

    3回答

    我想實現上下文切換使用gcc的m68k處理器。我需要使用內聯彙編保存所有寄存器d0,d1 ... d7和a0,... a7。我想知道是否可以在我的內聯gcc中使用一個循環,這將允許我保存這些寄存器,而不是爲每個寄存器寫一行代碼。 例如。 move.l%D0,溫度 pcb.cpuregs.d0 =臨時 我要讓0內部就像一個循環計數器D0。

    11熱度

    2回答

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

    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"

    3熱度

    3回答

    將程序集代碼嵌入到C/C++程序中時,可以通過使用推送指令(或指定編譯器支持的clobber列表支持它)來避免使用clobbering寄存器。 如果你包含內聯程序集,並且希望避免推送和彈出clobbered寄存器的開銷,有沒有辦法讓gcc爲你選擇寄存器(例如,它知道沒有有用的信息)。

    4熱度

    3回答

    我現在願意用-std=c99來編譯我的項目,而且我正面臨一個我目前不理解的錯誤。這條線: my_type* td = ({ register kmy_type* arg0 asm("eax"); arg0; }); 給我下面的錯誤只在C99: warning: ISO C forbids nested functions error: syntax error before ‘asm’ e