目录
MIPS指令R I J三种格式
MIPS五种寻址方式
WinMIPS64汇编指令
助记
从内存中加载数据
lb rd,imm(rs)
lbu rd,imm(rs)
lh rd,imm(rs)
lhu rd,imm(rs)
lw rd,imm(rs)
lwu rd,imm(rs)
ld rd,imm(rs)
l.d freg,imm(rs)
lui reg,imm
存储数据到内存
sb rs,imm(rd)
sh rs,imm(rd)
sw rs,imm(rd)
sd rs,imm(rd)
s.d freg,imm(rd)
算术运算指令
daddi rd,rs,imm
daddi rd,rs,imm
dadd rd,rs,rt
daddu rd,rs,rt
dsub rd,rs,rt
dsubu rd,rs,rt
dmul rd,rs,rt
dmulu rd,rs,rt
ddiv rd,rs,rt
ddivu rd,rs,rt
add.d freg1,freg2,freg3
sub.d freg1,freg2,freg3
mul.d freg1,freg2,freg3
div.d freg1,freg2,freg3
逻辑运算指令
and rd,rs,rt
or rd,rs,rt
xor rd,rs,rt
andi rd,rs,imm
ori rd,rs,imm
andi rd,rs,imm
置位指令
slt rd,rs,rt
sltu rd,rs,rt
slti rd,rs,imm
sltiu rd,rs,imm
分支指令
beq rs,rt,label
bne rs,rt,label
beqz rs,label
bnez rs,label
跳转指令
j label
jr rs
jal label
jalr rs
移位指令
dsll rd,rs,imm
dsrl rd,rs,imm
dsra rd,rs,imm
dsllv rd,rs,rt
dsrlv rd,rs,rt
dsrav rd,rs,rt
移动指令
movz rd,rs,rt
movn rd,rs,rt
mov.d freg1,freg2
mtcl rs,freg
mfcl rd,freg
其他指令
halt
nop
cvt.d.l
cvt..l.d
c.lt.d
c.le.d
c.eq.d
bclf
bclt
终端交互
内存映射
示例①输出hello world
示例②读取两个数计算乘积
MIPS指令R I J三种格式
op
操作码opcode
rs
第一个源寄存器编号
rt
第二个源寄存器编号
rd
目的寄存器编号
shamt
移位位数
funct
功能码
寄存器
立即数寻址
操作数为指令自身中的常数立即数
addi r2,r1,1
r2=r1+1
寄存器寻址
操作数为寄存器中的值
add r2,r1,r0
r2=r1+r0
基址寻址
以基址寄存器中的值和立即数常数之和作为地址,该地址指向的内存的值作为操作数
lw r2,8(r1)
r2=M[r1+8]
PC相对寻址
以PC程序计数器和指令中常数之和作为地址,即16位地址左移2位(即乘以4)与PC计数器相加
beq r2,r1,label
如果r2==r1则程序跳到label处
伪直接寻址
跳转地址由指令中26位地址左移两位(即乘以4)与PC计数器的高4位相连所组成
j label
WinMIPS64汇编指令
助记
从内存中加载数据
lb rd,imm(rs)
lb rd,imm(rs)
基址偏移寻址,加载一个字节8位,rd=M[rs+imm]
lbu rd,imm(rs)
lbu rd,imm(rs)
基址偏移寻址,加载一个无符号字节8位,rd=M[rs+imm]
lh rd,imm(rs)
lh rd,imm(rs)
基址偏移寻址,加载一个半字16位,rd=M[rs+imm]
lhu rd,imm(rs)
lhu rd,imm(rs)
基址偏移寻址,加载一个无符号半字16位,rd=M[rs+imm]
lw rd,imm(rs)
lw rd,imm(rs)
基址偏移寻址,加载一个字32位,rd=M[rs+imm]
lwu rd,imm(rs)
lwu rd,imm(rs)
基址偏移寻址,加载一个无符号字32位,rd=M[rs+imm]
ld rd,imm(rs)
ld rd,imm(rs)
基址偏移寻址,加载一个64位,rd=M[rs+imm]
l.d freg,imm(rs)
l.d freg,imm(rs)
基址偏移寻址,加载一个64位浮点数,freg=M[rs+imm]
lui reg,imm
lui reg,imm
将立即数装在寄存器的高16位
存储数据到内存
sb rs,imm(rd)
sb rs,imm(rd)
基址偏移寻址,存储一个字节8位,M[rd+imm]=rs
sh rs,imm(rd)
sh rs,imm(rd)
基址偏移寻址,存储一个半字16位,M[rd+imm]=rs
sw rs,imm(rd)
sw rs,imm(rd)
基址偏移寻址,存储一个字32位,M[rd+imm]=rs
sd rs,imm(rd)
sd rs,imm(rd)
基址偏移寻址,存储一个64位,M[rd+imm]=rs
s.d freg,imm(rd)
s.d freg,imm(rd)
基址偏移寻址,存储一个64位浮点数,M[rd+imm]=freg
算术运算指令
daddi rd,rs,imm
daddi rd,rs,imm
立即数寻址,加法操作,rd=rs+imm
daddi rd,rs,imm
daddi rd,rs,imm
立即数寻址,无符号加法操作,rd=rs+imm
dadd rd,rs,rt
dadd rd,rs,rt
寄存器寻址,加法操作,rd=rs+rt
daddu rd,rs,rt
daddu rd,rs,rt
寄存器寻址,无符号加法操作,rd=rs+rt
dsub rd,rs,rt
dsub rd,rs,rt
寄存器寻址,减法操作,rd=rs-rt
dsubu rd,rs,rt
dsubu rd,rs,rt
寄存器寻址,无符号减法操作,rd=rs-rt
dmul rd,rs,rt
dmul rd,rs,rt
寄存器寻址,乘法操作,rd=rs*rt
dmulu rd,rs,rt
dmulu rd,rs,rt
寄存器寻址,无符号乘法操作,rd=rs*rt
ddiv rd,rs,rt
ddiv rd,rs,rt
寄存器寻址,除法操作,rd=rs/rt
ddivu rd,rs,rt
ddivu rd,rs,rt
寄存器寻址,无符号除法操作,rd=rs/rt
add.d freg1,freg2,freg3
add.d freg1,freg2,freg3
寄存器寻址,浮点数加法,freg1=freg2+freg3
sub.d freg1,freg2,freg3
sub.d freg1,freg2,freg3
寄存器寻址,浮点数减法,freg1=freg2-freg3
mul.d freg1,freg2,freg3
mul.d freg1,freg2,freg3
寄存器寻址,浮点数乘法,freg1=freg2*freg3
div.d freg1,freg2,freg3
div.d freg1,freg2,freg3
寄存器寻址,浮点数除法,freg1=freg2/freg3
逻辑运算指令
and rd,rs,rt
and rd,rs,rt
寄存器寻址,与操作,rd=rs&rt
or rd,rs,rt
or rd,rs,rt
寄存器寻址,或操作,rd=rs|rt
xor rd,rs,rt
xor rd,rs,rt
寄存器寻址,异或操作,rd=rs^rt
andi rd,rs,imm
andi rd,rs,imm
立即数寻址,与操作,rd=rs&imm
ori rd,rs,imm
ori rd,rs,imm
立即数寻址,或操作,rd=rs|imm
andi rd,rs,imm
andi rd,rs,imm
立即数寻址,异或操作,rd=rs^imm
置位指令
slt rd,rs,rt
slt rd,rs,rt
寄存器寻址,如果rs