inline-assembly

    0热度

    1回答

    我使用gcc的扩展asm来调用系统调用。我正在使用PowerPC(Freescale MPC5200B)上的专有RTOS。 根据gcc的documentation我应该将汇编代码使用的所有寄存器(既不输入也不输出)添加到clobbers列表中,因为gcc不分析汇编代码,因此不知道哪些寄存器正在被修改。 问题是我不知道哪些寄存器的系统调用会改变。实际上,我正在观察系统调用改变寄存器的情况。系统调用返

    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

    5热度

    2回答

    当我读取xv6源代码时,我对以下声明的语法感到困惑。任何人都可以解释给我吗? extern struct cpu *cpu asm("%gs:0");

    0热度

    1回答

    伙计!我有个问题。如何在GCC中通过asm获得类成员函数的地址? 在VS2012中,我们可以通过下面的代码来获取地址。 asm {mov eax, offset TEST::foo} 但是,在GCC? __asm__ __volatile__( "movq offset %1, %%rdi" "movq %%rdi, %0" :"=r"(ad

    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];

    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