Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 每个机器语言指令执行需要多长时间?_Assembly_Cpu_Machine Instruction_Machine Language - Fatal编程技术网

Assembly 每个机器语言指令执行需要多长时间?

Assembly 每个机器语言指令执行需要多长时间?,assembly,cpu,machine-instruction,machine-language,Assembly,Cpu,Machine Instruction,Machine Language,设置、读取、移动和比较等操作的执行时间是否相同 如果没有:有没有办法知道需要多长时间 我的意思是,某些特定类型的cpu执行不同汇编语言指令(移动、读取等)的速度有什么名字吗 指令延迟 指令吞吐量 这些应该很容易在谷歌上找到。但基本上,指令执行需要一定数量的周期(延迟)。但通常可以同时执行多个(吞吐量) 设置、读取、移动和比较等操作是否需要相同的时间 执行 通常不会。不同的指令具有不同的延迟和吞吐量。例如,加法通常比除法快得多 如果您对现代处理器上不同汇编指令的实际值感兴趣,可以查看 也就

设置、读取、移动和比较等操作的执行时间是否相同

如果没有:有没有办法知道需要多长时间


我的意思是,某些特定类型的cpu执行不同汇编语言指令(移动、读取等)的速度有什么名字吗

  • 指令延迟
  • 指令吞吐量
这些应该很容易在谷歌上找到。但基本上,指令执行需要一定数量的周期(延迟)。但通常可以同时执行多个(吞吐量)

设置、读取、移动和比较等操作是否需要相同的时间 执行

通常不会。不同的指令具有不同的延迟和吞吐量。例如,加法通常比除法快得多


如果您对现代处理器上不同汇编指令的实际值感兴趣,可以查看


也就是说,影响计算机性能的因素还有无数。
其中大多数可能比指令延迟/吞吐量更重要:

  • 缓存
  • 记忆
  • 圆盘
  • 膨胀(这似乎是一个大的…:D)
  • 等等。。。清单上还有很多
每个汇编语言指令的速度有多快?设置、读取、移动和比较等操作的执行时间是否相同


您可以在CPU制造商(如Intel)的CPU汇编语言手册中找到此信息。每个CPU指令通常有一到两个页面,它会告诉您执行需要多少“周期”。它将在其他地方定义“周期”。指令可能需要不同的时间来执行,具体取决于它们所给出的内容。e、 g.条件跳转可以跳转,也可以不跳转。乘零运算(我假设)可能比乘7运算快。

流水线和缓存以及cpu本身不再是主要瓶颈,这两件事解决了您的问题。第一,现在的cpu通常每个时钟执行一条指令,第二,它可能需要很多(几十到几百)个时钟才能向cpu发送指令。更现代的处理器,即使它们的指令集很旧,也很少提及时钟执行,因为它是一个时钟,“真正的”执行速度很难描述

缓存和管道尝试允许cpu以每时钟一条指令的速率运行,但例如,从内存读取时,必须等待响应返回。如果此项不在缓存中,则可能有数百个时钟周期,因为它必须读取多个位置以填充缓存中的一行,然后再读取一些时钟以使其通过缓存返回处理器

现在,如果你回到过去,或者回到现在,但是在微控制器世界或者其他系统中,内存系统可以在一个时钟中响应,或者至少是一个非常确定的数字(比如两个时钟用于eeprom,一个时钟用于ram,诸如此类),那么你可以很容易地计算出时钟的确切数量。像这样的处理器通常会发布每条指令的周期表。例如,读取两条指令需要两个时钟来获取指令,然后另一个时钟来执行读取,最少3个时钟。有些实际上需要一个以上的时钟才能执行,因此也需要添加时钟

我强烈建议你找一本迈克尔·艾布拉什(MichaelAbrash)的《汇编语言禅宗》(Zen of Assembly Language)。它出版时已经过时了,但仍然是一部重要的作品。学习处理相对简单的8088/86已经够难了,今天的x86和其他系统要复杂得多

如果运行windows或linux或类似的东西,那么尝试计算代码的时间并不一定能让你达到你想要的目的。添加或删除nop,导致代码在内存中对齐多达一个字节,可能会对代码其余部分的性能产生重大影响,而这些代码在ram中的位置没有改变。作为理解问题复杂性的简单示例

您对什么处理器或系统感兴趣?stm32f4发现板大约20美元,包含一个ARM(cortex-m)处理器,具有指令和数据缓存。它具有更大系统的复杂性,但同时足够简单(相对于更大的系统),能够进行控制实验


如果您熟悉微芯片pic世界,他们通常会计算周期以执行事件之间的精确延迟。非常确定的环境(只要不使用中断)

答案是MIPS。或每秒一百万条指令。因为您谈论的是嵌入式系统。

关于Agner Fog,请查看+1。我认为值得一提的是,在现代处理器上,多条指令可以并行执行,只要它们是独立的。我想补充一点,除了实际的方法表之外,他在上找到的其他手册也非常有助于计算东西的成本。在我看来,你的答案对于现代无序处理器来说已经过时了,它不逐个执行指令,甚至不按指令在内存中的排列顺序执行指令。当然,仍然有许多低端微处理器是基于流水线顺序设计的。这是非常一致的,这只是增加了复杂性,但与此同时,你仍然有一系列指令试图通过一个管道输入执行单元,这会让你回到同样的问题。您可以选择在今天看到的单管道、单执行级别查看它,或者退出并查看多个执行单元、分支预测、导致缓存更加混乱等。