Benjamin

静以修身,俭以养德,非澹薄无以明志,非宁静无以致远。
随笔 - 386, 文章 - 0, 评论 - 196, 引用 - 0
数据加载中……

汇编nop指令

1、作用是空指令(什么都不做),一般用来控制CPU的时间周期,达到时钟延时的效果
2、如果想要让CPU等待一会处理指令,那么在此期间需要让CPU在执行我们程序代码段时什么都不做,也就是给定一个空指令NOP,该指令是会自动对齐CPU内存寻址!
     注意程序是不能主动获取CPU控制权的,是由操作系统分配的,所以当操作系统将CPU的控制权分配给你一段时间,这段时间里你什么都不想做的情况下就可以使用该       语句,当时间过了之后CPU控制权收回时,操作系统会把程序的代码执行状况保存到PCB进程控制块里,以便下次执行
3、其实在C/C++编译器里;即意味着NOP空指令什么都不做,但也被编译器用来作为分割符!
     当我们在一些带有作用域"{}"的语句里使用";"时,编译器会把";"视为NOP指令什么都不做,同时也作为这段语句的结束,也就是这个语句块什么都不做,那么编译器就       不会去编译这段代码,但是不会添加NOP指令,来占用CPU时钟周期!因为这样做会降低CPU运行效率!例如:wile(1);
4、一般用于破解它人要求验证的程序(用一些反编译工具将判断语句填充为nop指令,让其什么都不做,然后无条件的执行),同时我们无需考虑内存对齐CPU寻址的问          题,因为使用NOP指令的字节占用是与CPU对应的!这个在填充时取决于你反编译程序所使用的是哪个架构的指令集!
4、下面是不同的CPU架构所占用不同的字节:
CPU架构 助忆码 字长 操作码 备注
Intelx86系列CPU NOP 1; i686中为1-9 0x90; 0x0f 0x1f [2] x86 CPU上的NOP指令实质上是XCHG EAX, EAX(操作码同为0x90)--无任何作用的指令。
Intel 8051 /MCS-51系列 NOP 1 0x00
MIPS NOP 4 0x00000000
MOS科技 65xx NOP 1 0xea 65C02处理器发布时,之前多数的无效指令都被定义成了具有不同字长和需时的NOP指令。
PowerPC NOP 4 0x60000000 (ori r0,r0,0的扩展操作码)

posted on 2023-11-10 23:33 Benjamin 阅读(22) 评论(0)  编辑 收藏 引用 所属分类: (反)汇编


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理