本文是关于计算机系统结构实验一(MIPS指令系统和MIPS体系结构)和实验二(流水线及流水线中的冲突),遇到的一些问题。
一、关于字
B:byte 字节指令
H:half word 半字节指令
W:word 字节指令
二、关于访存
按字或半字访存,无论给定地址是字(半字)中的哪一个字节的地址,都会自动转换为该字(半字)的首字节的地址。例如:MIPS中字长4字节,32位(红色框);半字2字节,16位(蓝色框)。无论你给定的是第一个红框里的7C(0x00000000)/00(0x00000001)/08(0x00000002)/24(0x00000003)的哪一的地址,只要是按字访存,都会自动转换为7C的地址0x00000000,取出的内容都是2408007C,**一定要注意,这里是小端法存储**。
小端法:高内存地址放整数的高位,低内存地址放整数的低位,这种方式叫倒着放,术语叫小端对齐。电脑X86和手机ARM都是小端对齐的。
大端法:高内存地址放整数的低位,低内存地址放整数的高位,这种方式叫正着放,术语叫大端对齐。很多Unix服务器的cpu都是大端对齐的。
大端和小端字节序不是由操作系统决定的,而是由cpu架构决定的。
三、关于返回地址
关于这里的**返回地址**,后面的所有其他跳转指令的返回地址均指的是:当前指令的下一条指令的地址,也就是跳转指令如果不跳转(分支失败)的下一条指令的地址。例如:当前的指令的地址是0x00000068,那么返回地址就是0x00000072。还要注意offset要左移两位并进行符号位扩展后才能与PC相加得到转移地址。这里左移两位的目的是,将offset*4,使之成为4的倍数。也就是说PC+offset<<2代表了PC的后offset+1(因为PC+offset<<2的PC已经+1了)条指令为转移指令。
四、关于定向技术
在定向技术中,因为其采用的是静态指令调度。非运算类指令必须在 ID段 得到之前指令的定向数据。并不能像运算类执行一样在 EX段 得到定向数据;如图所示:
五、关于STALL
“绿色ID后跟绿色ID” 和 “绿色STALL后跟绿色ID”的区别:
绿色ID表示该周期ID可以执行,但是存在RAW冲突,因此执行失败,因此紧接着要做绿色ID;
绿色STALL表示该周期由于上一条指令的红色STALL,导致该指令此周期停顿,下一周期执行绿色ID。