汇编nop写成c语言

怎么写

一般用内嵌汇编的方法

_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反汇编代码执行过程分析如下

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-09-04
说点东西给你听。
首先汇编语言是一种低级的语言,他可以完成许多高级语言无法做到的事,这也是它的强大之处,但是书写比高级语言繁琐。
比如用寄存器寻址:
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
}
等等,都行。

还有个方法,就是自己编个函数,编译成目标文件,将其连接到要调用它 的主程序中。
第2个回答  2013-05-21
标准的C语言中没有空语句。但在单片机的C语言编程中,经常需要用几个空指令产生短延时的效果。这在汇编语言中很容易实现,写几个nop就行了。在keil C51中,直接调用库函数:
#include<intrins.h> // 声明了void _nop_(void);
_nop_(); // 产生一条NOP指令

以上内容转自:http://wenku.baidu.com/view/83b0de9a51e79b89680226cc.html
相似回答