Intel VC 可以编译成功 [code]void toggleLed(unsigned char ledMask) { #define P2LTCH 0xFF5E /* The address of the I/O register. */ asm { mov dx, P2LTCH /* Load the address of the register. */ in al, dx /* Read the contents of the register. */ mov ah, ledMask /* Move the ledMask into a register. */ xor al, ah ...
我用gcc调试这个程序的时候会出错 提示内嵌汇编的那一行说:test.c:7: error: expected ‘)’ before ‘:’ token 请问这是怎么回事? /**/ int main (int _argc,char* _argv[]) { int * _p = (int*)_argc; (*_p) = 9999; _asm_ ("":::"memory"); if (* _p==9999) return 5; return (* _p); }
VC内嵌汇编intel格式: _asm { mov ecx, object_pointer call Class::MemberFunc } 以上是调类成员函数的代码,要是用gcc编译,对应的AT&T格式的汇编代码要怎么写? __asm__ volatile("call *%0;": :"m"(Vector3::Normalize)); gcc下面Class::MemberFunc这种写法根本通不过,说不是静态函数不能这么写。 另外再问一下,gcc的naked属性到底怎么用?VC的话__declspec(naked)就可以了,而gcc用__attribute__((naked))后...
double *rf; double asmtest() { asm( "movl rf, %%ebx " : : : ); } 如上面的情况, 由于rf是一个全局变量,编译和链接没有问题,但是当 dlopen 的时候会 发生错误,提示: cannot restore segment prot after reloc: Permission denied 问题解决了, 顺便上传个 AT&T 语法的 Sun汇编手册 希望对大家有用 [ 本帖最后由 GFree 于 2008-12-18 14:25 编辑 ]
16位有符号数除法 [code]div16_t divs16_s16(int16_t val0,int16_t val1) { div16_t result; asm( "movw r24,%A1" "\n\t" "movw r22,%A2" "\n\t" "mov r2,r25" "\n\t" "sbrc r2,7" "\n\t" "rcall 1f" "\n\t" "mov r3,r23" "\n\t" "sbrc r3,7" ...
众所周知,VC下面的内嵌汇编很弱智,完全是一句对应一条指令,如果没有对应得上的,那就无法通过编译,而gcc比较“聪明”一点,会自己利用寄存器来将一条语句切成多条,以使得编译通过。 现在VC下面有这样的汇编: _asm { lea ecx, object //传this指针 call object_type::memberfunc //调用类成员函数,直接call地址 } 而gcc下面是类似于: __asm__ volatile("\ lea %0, %%e...
[code] static inline char * strcpy(char * dest,const char *src) { int d0, d1, d2; __asm__ __volatile__( "1:\tlodsb\n\t" "stosb\n\t" "testb %%al,%%al\n\t" "jne 1b" : "=&S" (d0), "=&D" (d1), "=&a" (d2) : "0" (src),"1" (dest) : "memory"); return dest; } [/code] 不太明...
vc 中的汇编代码 int a = 1, b = 2, c = 3; __asm { push a; push b; push c; pop b; pop a; pop c; } 转换成gcc的asm代码,要如何写?谢谢 [ 本帖最后由 okyzx 于 2007-2-3 23:23 编辑 ]