×

nop指令

_nop_在c语言里怎么用呢?汇编程序中nop的作用是什么

admin admin 发表于2023-03-22 04:36:06 浏览34 评论0

抢沙发发表评论

本文目录

_nop_在c语言里怎么用呢


在c语言里没有这个_nop_函数,这个函数是在51单片机里使用的。

作用:对于延时很短的,要求在us级的,采用“_nop_”函数,这个函数相当汇编NOP指令,延时几微秒。

NOP指令为单周期指令,可由晶振频率算出延时时间,对于12M晶振,延时1uS。对于延时比较长的,要求在大于10us,采用C51中的循环语句来实现。

扩展资料

nop指令在C语言中的使用

示例:

#inluce《stdio.h》

assemblyinlinevoidinsert_nop()

{

asm_begin

nop

asm_end

}


汇编程序中nop的作用是什么


在单片机的C语言编程中,经常需要许多空指令来产生短延迟效应。

很容易做的汇编语言,只写几个空操作。

avr-gcc采用以下方法嵌入组装说明:

Asm(nop”;nop。nop。nop。”:);

在keilC51中,直接调用库函数:

包括//声明void_nop_(void);

_nop_();//生成一个NOP指令

扩展资料:

执行NOP指令只会增加程序计数器1个人电脑,所以需要一个机器周期。实例:MOVLW0xof;将OFH发送到WMOVWFPORT_B;在B端口写W到NOP;空操作MOVFPORT_B,W。

读指令:这三个端口B的连续操作指令的I/O端口,目的是为了写的内容读端口B,需要确保一个稳定的读写之间的时间,所以NOP添加空操作指令。

效果:很短的延迟,需要“_nop_”功能在美国水平,而编译NOP指令延迟的几微秒。NOP指令是单周期指令,延迟时间可以通过晶体振荡器的频率来计算。对于一个12M的晶体振荡器,延迟时间是1uS。

对于一个相对较长的延迟,要求大于10us,使用C51中的loop语句来实现。

在C51中选择loop语句时,要注意以下几点:

首先,在C51中定义了循环变量,尽量使用无符号字符变量。

其次,在FORloop语句中,尝试使用变量-来执行循环。

第三,在while和while语句中,循环体变量也使用了减法。

这是因为在C51编译器中,不同的指令用于不同的循环方法。


“NOP指令”有何作用


nop指令的作用:

1)就是通过nop指令的填充(nop指令一个字节),使指令按字对齐,从而减少取指令时的内存访问次数。(一般用来内存地址偶数对齐,比如有一条指令,占3字节,这时候使用nop指令,cpu 就可以从第四个字节处读取指令了。)

2)通过nop指令产生一定的延迟,但是对于快速的CPU来说效果不明显,可以使用rep前缀,多延迟几个时钟;--》具体应该说是占用了3个时钟脉冲!

3)i/o传输时,也会用一下 nop,等待缓冲区清空,总线恢复; 

4)清除由上一个算术逻辑指令设置的flag位; 

5)破解:对于原程序中验证部分使用nop来填充,使验证失效; 

6)有一个朋友说的比较厉害--在航天飞机控制程序中防止程序跳飞! 

解释如下:在空间放射性环境下,放射性子粒很容易使内存位元改变(呵呵,有点基因突变的感觉),这样如果改变的是jump,call指令的存贮位置的话,就会导致程序跳转到一个不可以预置的位置,对于关键系统来说的确是灾难性的。所以就在被调用程序之前填充nop指令,这样即使跳转到稍前或者稍后的位置,也不会造成影响。 

计算机科学中,NOP或NOOP(No Operation或No Operation Performed的缩写,意为无操作)是汇编语言的一个指令,一系列编程语句,或网络传输协议中的表示不做任何有效操作的命令。

NOP指令通常用于控制时序的目的,强制内存对齐,防止流水线灾难(en:Hazard (computer architecture)),占据分支指令造成的延迟(delay slot),或是作为占位符以供程序的改善(或替代被移除的指令)。在某些情况中,NOP指令会产生副作用;例如在摩托罗拉 68000处理器中,NOP操作码会产生流水线同步。


51单片机c语言 _nop_()是一个空指令短时间延时的空几个机器周期


这个_nop_()等效与汇编里面的,NOP指令,也就是空一个机器周期,如果是传统51单片机的话,等于空12个时钟周期【即一个机器周期】,操作方法如下:

1、首先,可以利用keil来进行模拟实验,观察软件所显示的数值,然后再进行相关的运算,即可得出结果。

2、在使用keil进行模拟之前,要“模拟”给单片机各个口上电,点击这里。

3、然后再点击这里,会出来一个对话框,全部勾选即可。

4、除了使用keil外,还可可以借助其他的软件,来进行测试运算。

5、最后要知道指令周期,指执行一条指令所需的时间。机器周期,由6个状态周期组成。状态周期,是时钟周期的两倍,如下图所示就完成了。


NOP指令有何作用


第四条指令即“NOP”指令,这是一条空操作指令,有调机的作用。

其中第一个CPU周期中取指令,CPU把23号单元的“NOP”指令取出放到指令寄存器,第二个CPU周期中执行该指令。因译码器译出是“NOP”指令,第二个CPU周期中操作控制器不发出任何控制信号。NOP指令可用来调机之用。

CPU把24号单元的“JMP 21”指令取出放至指令寄存器,同时程序计数器内容加1,变为25,从而取下一条指令做好准备。CPU把指令寄存器中地址码部分21送到程序计数器,从而用新内容21代替PC原先的内容25。

扩展资料

指令不同,所需的机器周期数也不同。对于一些简单的的单字节指令,在取指令周期中,指令取出到指令寄存器后,立即译码执行,不再需要其它的机器周期。对于一些比较复杂的指令,例如转移指令、乘法指令,则需要两个或者两个以上的机器周期。

从指令的执行速度看,单字节和双字节指令一般为单机器周期和双机器周期,三字节指令都是双机器周期,只有乘、除指令占用4个机器周期。

参考资料来源:百度百科-指令周期


微机原理编程中nop是什么


  微机原理编程中nop汇编指令的用法:
  占用一个字节的程序存储空间,产生微小延迟,常用来做代码地址对齐。
  1、占用一个字节的程序存储空间:
  这是在对微机与单片机进行汇编指令指令编程时常用的手法,例如,为了刻意使某个程序段在一个特定的地址开始,或在某个程序段中删除了一些指令而还刻意要求地址不变,基于这些的需求,通常是应用NOP指令汇编指令来充填空闲的地址。
  对于S7-STL编程语言来讲,通常是应用NOP指令汇编指令来充填被删除的指令的位置,以便留言痕迹,以便备查。通常的做法是,在删除的指令的位置写为NOP指令,重要的是在其注释之处写上原指令,留有备忘的痕迹。
  2、产生微小延迟:
  这是在微机与单片机进行汇编指令指令编程时常用的手法,微机与单片机的编程并非是周期扫描的执行机制,例如,在读取某个外围通道输入值时,先发出一个请求命令,带一定延时后,再读其数值,通常是应用NOP指令来进行延时。
  对于西门子PLC来讲,其执行程序的机制是周期扫描,NOP指令只是起到占用周期扫描时间的作用,对于那些已固定了扫描周期时间的PLC而言,是没有意义的。
  3、常用来做代码地址对齐:
  这个纯粹是对与对微机与单片机进行汇编指令指令编程来讲的。这与上述的1、占用一个字节的程序存储空间的作用相同,,即汇编编译后生成机器代码的效果。