inline-assembly

    1熱度

    1回答

    我想在Turbo C++ 3.0中創建一個C程序,該程序將在MS-DOS 6.22上工作,並且需要使用MSCDEX和中斷訪問CD-ROM,在其上播放曲目。 Turbo C對我來說不是問題,我已經做到了,它工作得很好,但現在我試圖使用this文檔來獲取CD-ROM設備驅動程序的名稱。 這裏是我的代碼: #include <stdio.h> #include <dos.h> void main(

    4熱度

    1回答

    我在實模式下編寫C程序。該程序將被加載到0x2000:0x0000地址並運行。 DS寄存器等於CS,即0x2000。另外我正在用bochs進行調試。 我的目標是在屏幕上打印一些文字。所以我需要內聯彙編(BIOS INT 10h)。 這裏是我的測試文件: asm("jmp _main"); void putchar(c) char c; { asm("mov ah, 0x0e");

    7熱度

    1回答

    對於我的項目我必須使用內聯彙編指令(如rdtsc)來計算某些C/C++指令的執行時間。 下面的代碼似乎對英特爾但不能在ARM處理器上運行: {unsigned a, d;asm volatile("rdtsc" : "=a" (a), "=d" (d)); t0 = ((unsigned long)a) | (((unsigned long)d) << 32);} //The C++ state

    0熱度

    1回答

    夥計!我有個問題。如何在GCC中通過asm獲得類成員函數的地址? 在VS2012中,我們可以通過下面的代碼來獲取地址。 asm {mov eax, offset TEST::foo} 但是,在GCC? __asm__ __volatile__( "movq offset %1, %%rdi" "movq %%rdi, %0" :"=r"(ad

    2熱度

    2回答

    時,我在c內聯程序集中出現了段錯誤當我使用jmp時出現了段錯誤。 在第一時間,我只是用jmp 0x30,和我有段故障。 我用gdb的debuged我的節目,我看到jmp被稱爲後,就跳轉到一個絕對地址。 (gdb) b main Breakpoint 1 at 0x80483b7: file f.c, line 3. (gdb) r Starting program: /root/work/f

    0熱度

    1回答

    我正在研究在x86 env中使用編譯器屏障(在gcc中)的副作用/運行時間開銷。 編譯障礙:ASM揮發性(::: 「內存」) GCC文檔講述了一些有趣的東西(https://gcc.gnu.org/onlinedocs/gcc/Extended-Asm.html) 摘錄: 「記憶」 撞告訴編譯器彙編代碼 對輸入和輸出操作數(例如,訪問內存中的一個所指向的內存 )執行內存讀取或寫入操作,而不是在 中

    0熱度

    1回答

    我想用SMLAWy指令將低32位存入目的寄存器。但是,文檔中提到SMLAWy指令將48位結果的高32位存儲到目標寄存器中。我怎樣才能做到這一點? Here is the link to the ARM documentation

    0熱度

    1回答

    我使用gcc的擴展asm來調用系統調用。我正在使用PowerPC(Freescale MPC5200B)上的專有RTOS。 根據gcc的documentation我應該將彙編代碼使用的所有寄存器(既不輸入也不輸出)添加到clobbers列表中,因爲gcc不分析彙編代碼,因此不知道哪些寄存器正在被修改。 問題是我不知道哪些寄存器的系統調用會改變。實際上,我正在觀察系統調用改變寄存器的情況。系統調用返

    5熱度

    2回答

    當我讀取xv6源代碼時,我對以下聲明的語法感到困惑。任何人都可以解釋給我嗎? extern struct cpu *cpu asm("%gs:0");

    0熱度

    1回答

    我在大會 相當新的,我有一個hardtime處理負數 #include <stdio.h> void main() { short int mat1[] = {-1,-2, 4,5, 4,-2}; // first array short int mat2[] = {2,0,0,0, 0,2,0,0}; // second array int mat3[1024];