一、为啥学的 x86 汇编不能两个操作数都是存储器啊

1. 你猜为什么我这么口嗨汇编

当时就觉得很不方便,非得先把存储器里面的东西放到寄存器来,然后再通过 “寄存器-存储器” 的指令要求运算。还一度怀疑设计 汇编语言 的前辈们脑子出了问题。

2. 为什么我会这么口嗨汇编啊

我是不知道现在市面上这些 ISA 都是怎么一个过程设计出来的。但推测的话,ISA 的设计需要考虑当时的科学技术,比如存储器速度、存储容量之类的。内存宝贵,就用变长指令压缩指令在存储器中的所占空间;内存便宜了,就用定长指令方便开发者。ISAA 和其他很多地方的 A 都差不多,不是什么一成不变的东西。

毕竟这是汇编语言,是和 “机器” 高度关联的。这个关联不是说 CPU 的设计指导了 ISA 的设计,也不是说 ISA 一定都是设计好了再去写 CPU。我猜应该是一个互相选择的问题,不存在哪一方有绝对的主导权。

但说这么多,设计 ISA 肯定得考虑硬件啊。假设要求 ADD op1, op2 这个指令得一个时钟周期做完,但是现在存储器就一块,存储器的数据总线也就一条,op1op2 怎么可能都是存储器里的东西嘛?

要是有一种架构,它就是有两块存储器,每一块还都有独立的数据总线,肯定就可以做 ADD mem1, mem2 了啊。当然也还有另外一种极端,“LOAD-STORE” 架构全部都在寄存器里面运算,从存储器 LOAD 到寄存器,再把寄存器里面算好的 STORE 会存储器。

二、流水线明明用了那么多时钟周期,为啥还快了

1. 你猜为什么我觉得流水线慢

隔壁写的 CPU,单周期也是 100 ns,多周期也还是一个时钟周期 100 ns。那凭啥还多周期,这一个指令岂不是执行了 500 ns?并且流水线还得考虑什么分支预测,万一预测错了,岂不是全部白给?

2. 为什么我会觉得流水线慢啊

我这不多少沾点?单周期 100 ns,按 MIPS 经典的 5-Stage-Pipeline,每一个 Stage 岂不是可以 20 ns?单个指令执行时间还是 100 ns,但是高效利用 CPU 内剩余部件了。这不和超长指令字一个思想?那为啥我觉得 VLIW 好,就不觉得 Pipeline 合理?

哪怕 x-Stage-Pipeline 达不到 x 的加速比,那不也是快了?

三、磁盘应该很快就坏了才对吧,磁头会对盘片造成很大伤害吧

1. 你猜为什么我觉得磁头会对盘片造成很大伤害

还用问?一下下撞的。更恐怖的是,如果驱动臂坏了,抬不起来,那岂不是把磁盘刮花了。

2. 为什么我会觉得磁头会对盘片造成很大伤害啊

究竟是什么给了我 “磁头一定要碰到盘面的错觉”?

那不是磁盘吗?如果是靠表面凹凸存储数据的(肯定不可能哈,如果这样那还能写入了吗),那为什么要用磁性介质?就是要通过 balabala(我也不懂)的物理手段,让磁盘上的数据传到磁头上来呀。

但这不是我需要关心的,我只关心我自己。

(计组的复习未完,所以必有后续)