Oct
27
呵呵,这方面的资料很多,但是东是东一鳞西一爪的。这篇也算我自己的一个小总结吧!
在Dev C++里使用内联汇编的格式不同于VC的,这一点需要注意:
VC里采用的是Intel的格式,而Dev C++采用的是AT&A的汇编格式。
如下例:
这个可以在VC下编译通过,但用Dev C++则编译出错,原因就在内联的汇编!如果需要转移到Dev C++下,则应将那句汇编更改为:
__asm__("int $3");
完整的如下:
在AT&A里,引用值需要前加"$"标记,而且引用寄存器时也需要加一个前缀"%",如:
mov $789,%eax
另外,不可以直接引用变量,而只能引用全局变量,同时在引用时,需要在其前加一下划线"_",另外就是操作数的方向也与Intel的语法相反,如:
mov $789,%eax //=============是把789赋值给EAX
其方向是: operator1------------------->operator2
而在Intel下则是反过来的:operator1<-------------------operator2
一个完整的示例如下:
当然,如果汇编的语句较多,可以用一个标记来标记,如:
__asm(
"mov $123,%eax\n\
mov %eax,_a"
);
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!如果 对文章有意见,请发邮件到iawen#126.com,或者直接在博客留言。
在Dev C++里使用内联汇编的格式不同于VC的,这一点需要注意:
VC里采用的是Intel的格式,而Dev C++采用的是AT&A的汇编格式。
如下例:
这个可以在VC下编译通过,但用Dev C++则编译出错,原因就在内联的汇编!如果需要转移到Dev C++下,则应将那句汇编更改为:
__asm__("int $3");
完整的如下:
在AT&A里,引用值需要前加"$"标记,而且引用寄存器时也需要加一个前缀"%",如:
mov $789,%eax
另外,不可以直接引用变量,而只能引用全局变量,同时在引用时,需要在其前加一下划线"_",另外就是操作数的方向也与Intel的语法相反,如:
mov $789,%eax //=============是把789赋值给EAX
其方向是: operator1------------------->operator2
而在Intel下则是反过来的:operator1<-------------------operator2
一个完整的示例如下:
当然,如果汇编的语句较多,可以用一个标记来标记,如:
__asm(
"mov $123,%eax\n\
mov %eax,_a"
);
相关日志
DES 加密/解密的小工具
循环冗余校验码CRC算法的C++实现
Base64算法的资料整理(VC代码与ASM代码)
类与类之间的关系的发现-阅《Reverse C++》有获(3)
C++类的实例的内存布局-阅《Reverse C++》有获(2)
DES 加密/解密的小工具
循环冗余校验码CRC算法的C++实现
Base64算法的资料整理(VC代码与ASM代码)
类与类之间的关系的发现-阅《Reverse C++》有获(3)
C++类的实例的内存布局-阅《Reverse C++》有获(2)
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!如果 对文章有意见,请发邮件到iawen#126.com,或者直接在博客留言。




C++的模板函数初探
