如何在DEV C++里嵌入汇编
来源:互联网 发布:阿里云流量计费 编辑:程序博客网 时间:2024/05/11 17:27
呵呵,这方面的资料很多,但是东是东一鳞西一爪的。这篇也算我自己的一个小总结吧!
在Dev C++里使用内联汇编的格式不同于VC的,这一点需要注意:
VC里采用的是Intel的格式,而Dev C++采用的是AT&A的汇编格式。
如下例:
#include<stdio.h>
int main(){
printf("Test inline asm/n");
//在此插入一个int 3中断
_asm int 3 //此处采用的就是Intel的汇编格式
return 0;
}
这个可以在VC下编译通过,但用Dev C++则编译出错,原因就在内联的汇编!如果需要转移到Dev C++下,则应将那句汇编更改为:
__asm__("int $3");
完整的如下:
#include<stdio.h>
int main(){
printf("Test inline asm/n");
__asm__("int $3");
return 0;
}
在AT&A里,引用值需要前加"$"标记,而且引用寄存器时也需要加一个前缀"%",如:
mov $789,%eax
另外,不可以直接引用变量,而只能引用全局变量,同时在引用时,需要在其前加一下划线"_",另外就是操作数的方向也与Intel的语法相反,如:
mov $789,%eax //=============是把789赋值给EAX
其方向是: operator1------------------->operator2
而在Intel下则是反过来的:operator1<-------------------operator2
一个完整的示例如下:
#include<stdio.h>
int a;
int main(){
printf("Test inline asm/n");
__asm("mov $789,%eax");
__asm("mov %eax,_a");
printf("A is : %d/n",a);
return 0;
}
//这里大家也应该注意到了,对于__asm__与__asm标签是不区分的!同样适用!!
当然,如果汇编的语句较多,可以用一个标记来标记,如:
__asm(
"mov $123,%eax/n/
mov %eax,_a"
);
转自:IaWeN's Blog
链接:http://www.iawen.com/read.php?4
- 如何在DEV C++里嵌入汇编
- 如何在DEV C++里嵌入汇编
- 在Symbian应用里嵌入汇编代码
- C/C++中如何嵌入汇编
- 在C/C++中嵌入汇编(一)
- 在C/C++中嵌入汇编(二)
- 在c/c++ 中嵌入汇编 (三)
- 在c代码中嵌入汇编
- 如何在C或C++代码中嵌入ARM汇编代码
- 如何在C或C++代码中嵌入ARM汇编代码
- 如何在网页里嵌入PPT
- 如何在C里嵌入java虚拟机 编译和运行问题
- C语言嵌入汇编
- 【转】c嵌入汇编
- 【转】c嵌入汇编
- C嵌入汇编
- C嵌入汇编
- C语言嵌入汇编
- 利用Action Script3动态语言的特点
- 纯js实现页面右下角提示信息渐出和渐失
- 什么是信令?
- Section 1.5 Number Triangles
- Oracle跨数据库查询并插入
- 如何在DEV C++里嵌入汇编
- 主板三例硬件故障实战排除
- [转]ALAC (二)
- yield return
- 感谢你们圆了一个狼疮患者做妈妈的梦
- winsock重叠iI/O模型
- Symbian 打电话类
- winsock重叠iI/O模型
- PHP在向我招手