汇编nop写成c语言

怎么写... 怎么写 展开
 我来答
huanghaohongso
2013-05-21 · TA获得超过2万个赞
知道小有建树答主
回答量:968
采纳率:50%
帮助的人:395万
展开全部

一般用内嵌汇编的方法

_asm nop

具体如下

//Filename:noptmp.c

//To compile, use: cl noptmp.c

//author: HHHso 2013-05-21 23:06

//

#include <stdio.h>

int main(int argc,void** argv)

{

        int a;

        scanf("%d",&a);

        printf("%d\n",a);

        _asm nop

        _asm nop

        printf("%x\n",a);

        _asm nop

        _asm nop

        _asm mov a,0

        _asm nop

        printf("%x\n",a);

        return 0;

}

main反汇编代码执行过程分析如下

adebies315
2013-09-04 · TA获得超过275个赞
知道小有建树答主
回答量:246
采纳率:0%
帮助的人:180万
展开全部
说点东西给你听。
首先汇编语言是一种低级的语言,他可以完成许多高级语言无法做到的事,这也是它的强大之处,但是书写比高级语言繁琐。
比如用寄存器寻址:
call @B
@@:
pop ebp
sub ebp,offset @B
汇编语言动态就能得到EIP或一个相对的进程位置,方便而简单,而用C语言就只能调用系统API来获取所有的寄存器的上下文,在获取上下文前要占停线程,如果不是主线程那还好办,但如果是主线程,那就除了用线程注入技术(用于恢复线程)没别的法了。

如果想在高级语言中用汇编只能嵌入汇编指令,而且各个C编译器的汇编嵌入语法不同,
比如gcc:
mov $100,%eax

Intel汇编指令:
mov eax,100
相同。

要完成你的问题,用Intel汇编指令,和微软的vc为例:
_asm nop
_asm {
nop
}
_asm xchg eax,eax
_asm {
xchg eax,eax
}
等等,都行。

还有个方法,就是自己编个函数,编译成目标文件,将其连接到要调用它 的主程序中。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
生活如歌_
2013-05-21 · TA获得超过1.5万个赞
知道大有可为答主
回答量:7398
采纳率:78%
帮助的人:2608万
展开全部
标准的C语言中没有空语句。但在单片机的C语言编程中,经常需要用几个空指令产生短延时的效果。这在汇编语言中很容易实现,写几个nop就行了。在keil C51中,直接调用库函数:
#include<intrins.h> // 声明了void _nop_(void);
_nop_(); // 产生一条NOP指令

以上内容转自:http://wenku.baidu.com/view/83b0de9a51e79b89680226cc.html
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式