如何在DEV C++里嵌入汇编

呵呵,这方面的资料很多,但是东是东一鳞西一爪的。这篇也算我自己的一个小总结吧!

在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;\
mov %eax,_a"
);

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值