MIPS指令
//i, j, f, g, h, 分别存在 $s1, $s2, $s3, $s4, $s5
if (i == j)
f = g+h ;
else
f = g-h ;
//翻译为汇编
bne $s1, $s2, else //与C语句相反, i!=j, jump to else
add $s3, $s4, $s5
j exit //jump to exit
else: sub $s3, $s4, $s5
exit:
//g, h, i, j ~ $1, $2, $3, $4 and base address of array is in $5
//数组元素为int类型,sizeof(int)=4
Loop: g = g +A[i];
i = i+ j;
if (i != h) go to Loop:
//翻译为汇编
Loop: add $7, $3, $3 //i*2,加法快
add $7, $7, $7 //i*4, 得到偏移量,也可用移位
add $7, $7, $5 //加上数组基地址
lw $6, 0($7) // $6=A[i]
add $1, $1, $6 //g= g+A[i]
add $3, $3, $4 //i = i+j;
bne $3, $2, Loop //程序员不必计算分支指令的地址,而只要用标号即可!汇编 器完成地址计算
对齐对于 MIPS 处理器很重要,它只能从内存中读取地址为数据大小倍数的地址处的多字节值。目标地址必须是所访问之数据单元字节数的整数倍(也即该类型对应字节数 / 8)。
比如要访问一个32位的整数,那么这个数据必须(最好)存储在以4字节(32/8=4)对齐的地方
流水线
MIPS单周期处理器
MIPS常用指令集
单周期数据通路设计
注意事项
- 所有指令都在一个时钟周期内完成
- 哈佛体系结构:指令和数据分开存储
计算
MIPS流水线处理器
同理,MIPS处理器执行指令的过程也可以分为几个逻辑独立的部分:</