设置、读取、移动和比较等操作是否都需要相同的时间来执行?
如果没有:有什么办法可以查出多长时间。
我的意思是否有一些名称,某些特定类型的 cpu 执行不同汇编语言指令(移动、读取等)的速度?
设置、读取、移动和比较等操作是否都需要相同的时间来执行?
如果没有:有什么办法可以查出多长时间。
我的意思是否有一些名称,某些特定类型的 cpu 执行不同汇编语言指令(移动、读取等)的速度?
您可能正在寻找的关键术语是:
这些应该很容易谷歌搜索。但基本上,指令需要一定数量的周期来执行(延迟)。但是您通常可以同时执行多个(吞吐量)。
设置、读取、移动和比较等操作是否都需要相同的时间来执行?
一般来说没有。不同的指令具有不同的延迟和吞吐量。例如,加法通常比除法快得多。
如果您对现代处理器上不同汇编指令的实际值感兴趣,可以查看Agner Fog 的表格。
也就是说,还有无数其他因素会影响计算机的性能。
其中大部分可以说比指令延迟/吞吐量更重要:
流水线和缓存以及 CPU 本身不再是主要瓶颈对您的问题做了两件事。一,今天的cpu通常每个时钟执行一条指令,其次它可能需要很多(几十到几百)个时钟来为cpu提供一条指令。更现代的处理器,即使它们的指令集很旧,也很少提及时钟执行,因为它是一个时钟,“真正的”执行速度太难描述了。
高速缓存和流水线试图让 CPU 以每时钟频率一条指令运行,但例如从内存读取,必须等待响应返回。如果该项目不在高速缓存中,则可能需要数百个时钟周期,因为它必须读取多个位置以填充高速缓存中的一行,然后再读取一些时钟以将其通过高速缓存返回处理器。
现在,如果你回到过去,或者现在时间,但在微控制器世界或其他系统中,内存系统可以在一个时钟内响应,或者至少是一个非常确定的数字(比如 eeprom 两个时钟,ram 一个时钟,那之类的东西),那么您可以很容易地计算出确切的时钟数。处理器通常会发布每条指令的周期表。例如,两条指令读取将是两个时钟来获取指令,然后是另一个时钟来执行读取,最少 3 个时钟。有些实际上会花费不止一个时钟来执行,因此也会添加进去。
我强烈建议您找到 Michael Abrash 的汇编语言 Zen 的(使用过的)副本。它出版时已经过时,但仍然是一部重要的作品。学习处理相对简单的 8088/86 已经够难了,今天的 x86 和其他系统要复杂得多。
如果运行 windows 或 linux 或类似的东西试图计时你的代码不一定会让你到达你想要的地方。添加或删除 nop,导致代码在内存中对齐一个字节,这会对代码的其余部分的性能产生巨大影响,除了它在 ram 中的位置没有改变。作为理解问题复杂性的一个简单例子。
您对什么处理器或系统感兴趣?stm32f4 探索板大约 20 美元,包含一个带有指令和数据缓存的 ARM (cortex-m) 处理器。它具有更大系统的复杂性,但同时足够简单(相对于更大的系统)能够进行受控实验。
如果您熟悉微芯片图片世界,他们通常会计算周期以执行事件之间的精确延迟。一个非常确定的环境(只要你不使用中断)。
每条汇编语言指令需要多快?设置、读取、移动和比较等操作是否都需要相同的时间来执行?
您可以在 CPU 制造商(例如 Intel)的 CPU 汇编语言手册中找到这些信息。每个 CPU 结构通常有一两页,它会告诉你执行需要多少个“周期”。它将在别处定义“循环”。根据给出的指令,指令可能需要不同的时间来执行。例如,条件跳转可能会跳转,也可能不会跳转。乘以零可能(我假设)比乘以 7 更快。
答案是 MIPS。或每秒 IPS 百万条指令。既然您在谈论嵌入式系统。