【发布时间】:2013-03-05 23:12:14
【问题描述】:
汇编器中的代码循环是否更快/等于/更慢,然后只需编写指令 x 次,这是需要的吗?还是依赖于代码? 但是机器何时执行二进制文件更快:如果 16 位 CPU 直接读取其 16 位还是返回 32 位?
最后; asm中的循环是什么意思?
【问题讨论】:
-
在汇编中,一切都依赖于代码和机器。在现代处理器(例如 x86-64)中,最快的计算方法需要在保持所有内核和所有 CPU 线程对所有时钟都忙碌之间找到最佳折衷方案,通过优化使用缓存来避免 CPU 停顿(如果数据适合缓存,也就是说),如果任务允许,则使用矢量化指令等。当只有并行执行是 CPU/FPU 并行时,对于 486 和更早的处理器来说事情很简单。如今,为了获得最快的代码,您需要注意所有几个内核每个时钟都做一些有用的事情。
-
所以如果指令数量大于循环指令能够处理(跳回),那么 asm 循环几乎不能被处理? -也就是说,如果我的文件不超过 512 个字节,那么我不能在最后一个字节进行循环调用。 -> 或者如果我要在 16 位 cpu 上添加 32 位和 32 位,cpu 必须自动将此操作拆分为一个循环。然后,将 1 位添加 16 次的循环与将 16 位添加到零/空寄存器一样快。那么还有一个问题是,在执行代码时,允许使用哪些寄存器循环指令,哪些寄存器可以相交。
-
首先,这不是关于进程,而是关于处理器内核。其次,
loop不一定是最快的循环指令。第三,你应该检查stackoverflow.com/questions/8389648/…和Mysticial对它的出色回答。
标签: assembly