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

你写的这个延时程序的反汇编代码如下:(使用keil

3反汇编),使用12MHZ晶振,每个机器周期占用1us,那么只循环一次总共用时为18us.

C:0x0800

EF

MOV

A,R7

C:0x0801

4E

ORL

A,R6

C:0x0802

6009

JZ

C:080D

C:0x0804

00

NOP

C:0x0805

00

NOP

C:0x0806

EF

MOV

A,R7

C:0x0807

1F

DEC

R7

C:0x0808

70F6

JNZ

delay(C:0800)

C:0x080A

1E

DEC

R6

C:0x080B

80F3

SJMP

delay(C:0800)

C:0x080D

22

RET

一个_nop_()函数延时一个机器周期的时间。要通过你的指令周期和晶振来看:如8051 12M晶振 ——nop——() 1个us。

函数名: _nop_原 型: void _nop_(void)

void_tuzi_(void)

void _nop_(void)

功 能:_nop_产生一个NOP 指令,该函数可用作C 程序的时间比较。C51 编译器在_nop_函数工作期间不产生函数调用,即在程序中直接执行了NOP 指令。

扩展资料:

intrins.h内部函数

(1)_crol_ 字符循环左移

(2)_cror_ 字符循环右移

(3)_irol_ 整数循环左移

(4)_iror_ 整数循环右移

(5)_lrol_ 长整数循环左移

(6)_lror_ 长整数循环右移

(7)_nop_ 空 *** 作 (相当于8051 NOP 指令)

(8)_testbit_ 测试并清零位 (相当于8051 JBC 指令)

参考资料:百度百科——intrins.h


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存