NOP指令是做什么的?谢谢!急!

NOP指令是做什么的?谢谢!急!,第1张

NOP指令,也称作“空指令”,在x86的CPU中机器码为0x90(144)。

NOP不执行 *** 作,但占一个程序步。执行NOP时并不做任何事,有时可用NOP指令短接某些触点或用NOP指令将不要的指令覆盖。当PLC执行了清除用户存储器 *** 作后,用户存储器的内容全部变为空 *** 作指令。

NOP指令属于PLC指令,使用时会占用执行一个指令的CPU时间片。常用于程序延时或精确计时,不过在较快的CPU上不明显。

扩展资料:

传送指令:

1、包括通用数据传送指令MOV、条件传送指令CMOVcc、堆栈 *** 作指令PUSH/PUSHA/PUSHAD/POP/POPA/POPAD、交换指令XCHG/XLAT/BSWAP、地址或段描述符选择子传送指令LEA/LDS/LES/LFS/LGS/LSS等。

逻辑运算:

1、这部分指令用于执行算术和逻辑运算,包括加法指令ADD/ADC、减法指令SUB/SBB、加一指令INC、减一指令DEC、比较 *** 作指令CMP、乘法指令MUL/IMUL。

2、除法指令DIV/IDIV、符号扩展指令CBW/CWDE/CDQE、十进制调整指令DAA/DAS/AAA/AAS、逻辑运算指令NOT/AND/OR/XOR/TEST等。

移位指令:

1、这部分指令用于将寄存器或内存 *** 作数移动指定的次数。包括逻辑左移指令SHL、逻辑右移指令SHR、算术左移指令SAL、算术右移指令SAR、循环左移指令ROL、循环右移指令ROR等。

位 *** 作:

1、这部分指令包括位测试指令BT、位测试并置位指令BTS、位测试并复位指令BTR、位测试并取反指令BTC、位向前扫描指令BSF、位向后扫描指令BSR等。

参考资料:百度百科-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 *** 作码会产生流水线同步。

在单片机的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编译器中,不同的指令用于不同的循环方法。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11052522.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-13
下一篇 2023-05-13

发表评论

登录后才能评论

评论列表(0条)

保存