gpt4 book ai didi

assembly - x86_64 指令流水线 : Instruction execution order

转载 作者:行者123 更新时间:2023-12-02 16:16:07 26 4
gpt4 key购买 nike

我对指令流水线有一些疑问。

我有一个程序集

0x111: div    %ecx
0x112: add $0x13,%ecx #The address 112 is not real, I just kept to show that there is no instructions between div and add

程序计数器,RIP指向0x111。我怀疑当 RIP 处于 0x111 时,处理器是否会执行(指令流水线或顺序更改/任何原因)0x112 指令。如果我在 RIP 0x111 处停止执行,是否有可能执行 0x112 并且 %ecx 值为 0X13?

最佳答案

没有。一般规则是,流水线等功能对任何单个执行线程(即单个内核)都是完全透明的,并且 CPU 确保一切看起来就像指令已按程序顺序顺序执行一样,除了可能更快。如果执行在地址 0x112 处停止,无论是由于中断或断点还是任何其他原因,您将看到 %ecx 包含 div 的结果> 但没有添加 0x13

有可能在内部,机器已经执行了 add,可能使用了一些未命名的内部寄存器,但如果是这样,那么机器负责“回滚”这个执行,所以架构寄存器 %ecx 包含在您能够检查它时它应该包含的内容。

流水线和其他类型的执行/内存重新排序在考虑性能时是相关的,但在考虑程序实际做什么时则无关。异常(exception)是在多线程程序中,因为由于这些特性,一个线程执行的内存访问可能不会以相同的顺序被其他线程看到,并且在这种顺序很重要的某些情况下可能需要屏障。但需要明确的是,这不适用于单线程程序。

关于assembly - x86_64 指令流水线 : Instruction execution order,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66676648/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com