inline-assembly

    2热度

    1回答

    既然没有官方的参考资料,我只有一个教程 gpcasm.zip。但是当我试图按照tut并尝试debian上的内联汇编示例时,gpc并不满意它。 gnu_asm.pas : In procedure 'MyStupidDelay': gnu_asm.pas:3: error : can't find a register in class AREG while reloading asm 下

    6热度

    2回答

    我想了解这个内联汇编代码,它来自_hypercall0here。 asm volatile ("call hypercall_page+%c[offset]" \ : "=r" (__res) \ : [offset] "i" (__HYPERVISOR_##name * sizeof(hypercall_page[0])) \ : "memory", "edi

    4热度

    1回答

    我正在考虑使用远程跳转来设置代码段(CS)寄存器。进入为什么我这样做,为什么我要处理细分问题需要一段时间,所以请耐心等待,并将其视为学术活动。我似乎无法得到正确的语法。 Error: suffix or operands invalid for 'ljmp' 我知道这是愚蠢的把cs到另一个寄存器,但我想我会尝试它,因为使用%0不工作(在ax寄存器也不起作用)。 我在看一些代码,编译罚款,这是推动我

    0热度

    1回答

    我需要原子操作代码等同于以下的原子加法运算代码: __asm__ __volatile__ ( " lock;\n" " addl %1, %0; \n" " movl %0, %%eax" : "=m"(a), "=a" (c) : "ir"(b) ); (增加两个变量a和b,并存储在A

    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

    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

    0热度

    3回答

    有人在SO发布了一个问题,询问他如何“隐藏”一个函数。这是我的回答: #include <stdio.h> #include <stdlib.h> int encrypt(void) { char *text="Hello World"; asm("push text"); asm("call printf"); return 0; } int

    6热度

    1回答

    我有一个用我的C代码编写的小型内联汇编代码。 asm通过一个数组,如果需要的话,将数值从一个不同的数组移到一个寄存器。最后,中断被调用。 的代码与此类似: cmp arrPointer[2],1h jne EXIT mov AX, shortArrPtr[2] EXIT: int 3h 在86这一切工作,但据微软:64位不支持内嵌汇编。 如何将它全部翻译成支持x64? 我无法找到一个编

    1热度

    2回答

    我们正在研究一个玩具操作系统作为一个班级的作业。 我在编写内核恐慌函数时遇到了一些麻烦。 它应该保存所有寄存器,调用一些类似printf的函数,然后打印保存的寄存器并暂停cpu。现在它定义为宏: #define panic(...) \ do{ \ asm volatile("SAVE_REGISTERS %1\n\t" : "m="(_panic_context)); \