MIPS体系结构设计准则
1.简单设计
2.加快常用功能
3.越小设计越快
4.好的设计需要好的折衷方法
c语言等高级语言
a = b + c;
d = e - f;
对应MIPS语言为
add a,b,c
sub d,e,f
add,sub -> mnemonic
a -> destination operand
b,c -> source operand
C语言等高级语言
a = b + c - d ;
对应MIPS语言
sub t,c,d # t = c - d
add a,b,t # a = b + t
MIPS采用32位(64位)寄存器体系
访问寄存器的时间快于访问大的存储器
## C++
a = b + c;
## MIPS汇编代码
add $s0,$s1,$s2 # a = b + c; $s0 = a, $s1 = b, $s2 = c
## C++
a = b + c - d;
## MIPS汇编代码
sub $t0,$s2,$s3
add $s0,$s1,$t0
保存寄存器 $s0~$s7
临时寄存器 $t0~$t9
总共18个存储数据的寄存器
## C++
a = b - c;
## MIPS汇编代码
sub $s0,$s1,$s2
## C++
f = (g + h) - (i + j);
## MIPS汇编代码
add $t0,$s1,$s2
add $t1,$s3,$s4
sub $s0,$t0,$t1
指令:
lw $s3,1($0) #read memory word 1 into $s3
sw $s7,5($0) #write $s7 to memory word 5
lw $s0,0($0)
lw $s1,8($0)
lw $s2,0xC($0) #read data word 3 to data word 1, C = 4'b1100
sw $s3,4($0)
sw $s4,0x20($0)#write $s4 to data word 8
sw $s5,400($0) #write $s5 to data word 100
32位数据包含4字节数据,所以每一个地址都是4的倍数
*每一个32位的数据包含4字节数据,在数据进行存储时
*地址0X00存入bit[31:24] 称之为大端机器
*地址0X00存入bit[7:0]称之为小端机器
# 立即数操作
addi $s0,$s0,4 # a = a + 4;
addi $s1,$s0,-12 # b = a - 12;
# number range at [-32768,32768]
# there is NO define about "subi", all Subtraction are equivalent
# to adding a negetive number.
MIPS指令集支持三种指令格式
a. 三个寄存器操作
b. 两个寄存器操作数 一个立即数
c. 一个26位的立即数 没有寄存器操作数
a. add $s0,$s1,$s2 # a = b + c;
sub $s0,$s1,$s2 # a = b - c;
b. lw $s0,0($0)
sw $s0,4($0)
addi $s1,$s0,4
c. # jump type
op-addr
# op -> 6 bits
# addr -> 26 bits