• Zain Lau
    2019-06-18
    今天考研冲北邮!
     1
     16
  • 曾经瘦过
    2019-09-27
    感觉老师的讲课顺序特别好 方案都是一点点演变来的 那些看起来高大上的解决方案 都是从最笨的方法开始慢慢优化演变而来的 不是直接一步到位的讲解 能够更好的理解

    作者回复: 谢谢,这个也是我期望这个专栏达到的效果。

    
     4
  • haer
    2019-06-17
    我觉得:cmp没有“访存”,jmp没有“执行”和“访存”
     3
     4
  • Geek
    2019-06-17
    后面这些就有点难了,对于非计算机专业的我来说,不过就当看小说了,会一直看下去。。。
    
     3
  • 南山
    2019-06-17
    从指令作用理解,cmp是全的,jmp不需要回写~
    
     2
  • 许先森
    2020-01-10
    cmp:取指令、译码、执行、访存、写回;
    jmp:取指令、译码
    
     1
  • prader
    2019-09-22
    1 为了解决,计算机指令中,有太多气泡的,可以采用操作数前推的办法。(上一条指令,的结果不再写入到寄存器中去,而是直接传递给一下需要使用数据的指令。)
    
     1
  • Geek_54edc1
    2019-07-02
    CMP没有访问内存的操作,JMP没有执行、访问内存的操作
    
     1
  • 拯救地球好累
    2019-10-27
    ---总结---
    为了避免流水线停顿中插入过多的NOP指令,我们引入了操作数前推技术。
    具有依赖关系的两条指令,后一条指令的输入往往来自于前一条指令执行之后写入的寄存器,而操作数前推则通过在硬件上制造一条旁路让前一条指令的执行结果直接作为后一条指令的输入,而无需等待前一条指令写回寄存器。
    这就像工厂流水线中,上一道工序做好的半成品一般会先递送到某个储物柜上以供下个工序的工人使用,增加旁路后好比前一位工人直接将半成品递交给下一位工人,而减少了“放物品-取物品”这样的动作。
    
    
  • J.D.
    2019-09-28
    1. 我可以这么理解吗?就是把一个方法:
    int main(int a , int b){
    int c = a + b;
    return c;
    }
    变成
    int main(int a , int b){
    return a + b;
    }
    2. 看了之后有一个想法会不会那个时候的程序员的编程代码里是会考虑到汇编指令这一块,后来随着机器性能的发展,现在的程序员在日常写代码对这块就不太重视了,于是一些《代码简洁之道》一类的书就应运而生了。一方面包括了从视觉上对代码的规范,另一方面也回归到对指令考虑这一块。
    展开

    作者回复: J.D.同学

    你好,第一个不能这么理解,只有没有前后依赖的指令才会在流水线里可以同时执行。实际上,你给的代码其实编译器通常会自动优化到后面那个状态。

    早年的程序员的确会考虑得很底层,因为内存空间很小。

    
    
  • 曾经瘦过
    2019-09-27
    cmp 指令是比较大小的指令 执行步骤感觉是 取指令 译码 取数据(访问内存 或者寄存器) 比较大小(执行) 出结果(写回) 应该是全的 jump指令是跳转的指令 执行步骤应该是 取指令 译码 跳转(执行) 没有访问内存和写回 的过程
    
    
  • Linuxer
    2019-06-17
    请问老师操作数前推中,前一条指令的输出存哪呢?如果还是寄存器那不还是没解决问题,如果不是那指令add不有两种形式,那又如何区分呢?
     1
    
我们在线,来聊聊吧