inline-assembly专题提供inline-assembly的最新资讯内容,帮你更好的了解inline-assembly。
我一直在研究一个(C)项目,它需要完全动态分配的函数,这意味着malloc / new和mprotect,然后手动修改缓冲区到汇编代码.因此我完全想知道,我的这个“缓冲区”需要什么,因为它是任何其他_cdecl函数的复制品.例如: int ImAcDeclFunc(int a, int b) { return a + b; } 如果我想从字面上创建这个函数的副本,但是完全动态,那需要什么
根据MSDN文档,当使用类函数的默认 __thiscall调用约定时,“this”指针存储在ECX中.尽管在翻译常规C代码时确实存在这种情况,但在尝试使用内联汇编访问“this”时遇到了问题. 这是测试程序: #include <cstdio> class TestClass { long x; public: inline TestClass(long x):
在我目前的项目中,我必须比较128位值(实际上是md5哈希),我认为可以通过使用SSE指令来加速比较.我的问题是我无法找到关于SSE指令的好文档;我正在寻找一个128位整数比较指令,让我知道一个散列是大于,小于或等于另一个.这样的指令是否存在? PS:目标计算机是带有SSE2指令的x86_64服务器;我也对同一工作的NEON指令感兴趣. SSE或NEON指令集中没有128位整数比较指令. SSE4
将内联汇编程序插入到类似C语言的函数中时,关于允许哪些寄存器用于临时的约定是什么?在进入asm块之前,编译器是否有责任保存需要保存的所有寄存器的值?程序员是否有责任将值存储在这些寄存器中并在退出asm块之前恢复它们?是否有典型的约定,或者这是特定于实现的? 根据定义,内联汇编是特定于编译器的. 大多数支持内联汇编的编译器都有一个语法,允许您指示程序集修改哪些寄存器.然后,编译器可以根据需要保存和恢
我写了一个简单的汇编程序: section .data str_out db "%d ",10,0 section .text extern printf extern exit global main main: MOV EDX, ESP MOV EAX, EDX PUSH EAX PUSH str_out CALL printf SUB ESP, 8 ; cleanup stack MOV
我试图理解这个来自_hypercall0 here的内联汇编代码. asm volatile ("call hypercall_page+%c[offset]" \ : "=r" (__res) \ : [offset] "i" (__HYPERVISOR_##name * sizeof(hypercall_page[0])) \ : "memory
昨天我了解到,在编译AMD64和Itanium目标时,Microsoft Visual C不支持内联汇编(使用__asm关键字). 那是对的吗?如果是这样,有没有人知道为什么他们不支持这些目标的内联汇编?这似乎是一个相当大的功能,只是放下… 正确的是,它仍然不支持 VS 2010 Beta 1.我的猜测是内联汇编太难实现:Microsoft实现它的方式,它与周围的C代码集成,以便数据可以流入和流出
我正在研究一个cpp项目.该项目需要迁移到64位.它包含一些无法在x64上编译的内联汇编代码. 这是包含汇编代码的函数: void ExternalFunctionCall::callFunction(ArgType resultType, void* resultBuffer) { #if defined(_NT_) || defined(__OS2__) // I386 /
如果我这样做 var a,b,c:cardinal; begin a:=$80000000; b:=$80000000; c:=a+b; end; c将等于0,因为加法溢出.捕获这个溢出布尔值的最佳方法是什么? (a b 在汇编中,术语溢出通常是指有符号算术,意味着总和的符号与两个操作数的符号不同;对于无符号算术,术语Carry是优选的. 您可以使用纯粹的pascal中的Overf