__asm {
mov ecx,target
}
asm (".intel_syntax noprefix");
asm ("mov ecx,target");
谢谢你的帮助。
试试这个程序集这可能会有帮助....至少它对我起作用了。
#include <stdlib.h>
#include <stdio.h>
int main(int argc, char *arg[])
{
int retval;
printf ( " retval = %d \n", retval );
asm volatile(
"movl %%ecx , %0\n\t"
:"=r" (retval));
printf ( "retval = %d \n", retval );
return 0;
}
为我打印以下值...我试过调试,第二个值与ecx寄存器中的值相同。
p$ecx
> retval = 0
> retval = -72537468
有没有人要对我说或评论? 跟随生成的程序集 多亏了弄臣的解决之道:
我正在尝试同时处理MSVC和GCC编译器,同时更新这个代码库以在GCC上工作。但我不确定GCCs内联ASM是如何工作的。现在我并不擅长将ASM转换为C,否则我就会使用C而不是ASM。 我假设ROR13的工作方式类似于,但代码不会产生相同的输出。 什么是将这个内联ASM翻译成GCC的正确方法,或者这个代码的C翻译是什么?
操作步骤: 菜单栏: Refactor —>Inline 快捷键: Mac: option+Command + N
GCC扩展内联汇编 使用GCC扩展内联汇编的例子如下: #define read_cr0() ({ \ unsigned int __dummy; \ __asm__( \ "movl %%cr0,%0\n\t" \ :"=r" (__dummy)); \ __dummy; \ }) 它代表什么含义呢?这需要从其基本格式讲起。GCC扩展内联汇编的基本格式是: asm [volat
GCC基本内联汇编 GCC 提供了两内内联汇编语句(inline asm statements):基本内联汇编语句(basic inline asm statement)和扩展内联汇编语句(extended inline asm statement)。GCC基本内联汇编很简单,一般是按照下面的格式: asm("statements"); 例如: asm("nop"); asm("
在尝试让一些旧代码重新工作时(https://github.com/chaos4ever/chaos/blob/master/libraries/system/system_calls.h#l387,FWIW),我发现的一些语义似乎在最近的10-15年中发生了非常微妙但仍然危险的变化...:p 该代码在的旧版本(如2.95)中可以很好地工作。总之,这里是代码: 上面代码的问题是(在我的例子中为4.