汇编nop写成c语言
发布网友
发布时间:2022-05-16 19:52
我来回答
共3个回答
热心网友
时间:2024-03-01 05:55
一般用内嵌汇编的方法
_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反汇编代码执行过程分析如下
热心网友
时间:2024-03-01 05:55
说点东西给你听。
首先汇编语言是一种低级的语言,他可以完成许多高级语言无法做到的事,这也是它的强大之处,但是书写比高级语言繁琐。
比如用寄存器寻址:
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
}
等等,都行。
还有个方法,就是自己编个函数,编译成目标文件,将其连接到要调用它 的主程序中。
热心网友
时间:2024-03-01 05:56
标准的C语言中没有空语句。但在单片机的C语言编程中,经常需要用几个空指令产生短延时的效果。这在汇编语言中很容易实现,写几个nop就行了。在keil C51中,直接调用库函数:
#include<intrins.h> // 声明了void _nop_(void);
_nop_(); // 产生一条NOP指令
以上内容转自:http://wenku.baidu.com/view/83b0de9a51e79b89680226cc.html