目录
MIPS指令R I J三种格式
MIPS五种寻址方式
立即数寻址
寄存器寻址
基址寻址
PC相对寻址
伪直接寻址
WinMIPS64汇编指令
助记
从内存中加载数据
lb
lbu
lh
lhu
lw
lwu
ld
l.d
lui
存储数据到内存
sb
sh
sw
sd
s.d
算术运算
daddi
daddui
dadd
daddu
dsub
dsubu
dmul
dmulu
ddiv
ddivu
add.d
sub.d
mul.d
div.d
逻辑运算
and
or
xor
andi
ori
xori
置位
slt
sltu
slti
sltiu
分支
beq
bne
beqz
bnez
跳转
j
jr
jal
jalr
移位
dsll
dsrl
dsra
dsllv
dsrlv
dsrav
移动
movz
movn
mov.d
mtcl
mfcl
其他
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
功能码
MIPS五种寻址方式
立即数寻址
操作数为指令自身中的常数立即数
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
lb rd,imm(rs)
基址偏移寻址,加载一个字节8位,rd=M[rs+imm]
lbu
lbu rd,imm(rs)
基址偏移寻址,加载一个无符号字节8位,rd=M[rs+imm]
lh
lh rd,imm(rs)
基址偏移寻址,加载一个半字16位,rd=M[rs+imm]
lhu
lhu rd,imm(rs)
基址偏移寻址,加载一个无符号半字16位,rd=M[rs+imm]
lw
lw rd,imm(rs)
基址偏移寻址,加载一个字32位,rd=M[rs+imm]
lwu
lwu rd,imm(rs)
基址偏移寻址,加载一个无符号字32位,rd=M[rs+imm]
ld
ld rd,imm(rs)
基址偏移寻址,加载一个64位,rd=M[rs+imm]
l.d
l.d freg,imm(rs)
基址偏移寻址,加载一个64位浮点数,freg=M[rs+imm]
lui
lui reg,imm
英文原文是这个load upper half of register immediate,我也不是很懂@_@
存储数据到内存
sb
sb rs,imm(rd)
基址偏移寻址,存储一个字节8位,M[rd+imm]=rs
sh
sh rs,imm(rd)
基址偏移寻址,存储一个半字16位,M[rd+imm]=rs
sw
sw rs,imm(rd)
基址偏移寻址,存储一个字32位,M[rd+imm]=rs
sd
sd rs,imm(rd)
基址偏移寻址,存储一个64位,M[rd+imm]=rs
s.d
s.d freg,imm(rd)
基址偏移寻址,存储一个64位浮点数,M[rd+imm]=freg
算术运算
daddi
daddi rd,rs,imm
立即数寻址,加法操作,rd=rs+imm
daddui
daddi rd,rs,imm
立即数寻址,无符号加法操作,rd=rs+imm
dadd
dadd rd,rs,rt
寄存器寻址,加法操作,rd=rs+rt
daddu
daddu rd,rs,rt
寄存器寻址,无符号加法操作,rd=rs+rt
dsub
dsub rd,rs,rt
寄存器寻址,减法操作,rd=rs-rt
dsubu
dsubu rd,rs,rt
寄存器寻址,无符号减法操作,rd=rs-rt
dmul
dmul rd,rs,rt
寄存器寻址,乘法操作,rd=rs*rt
dmulu
dmulu rd,rs,rt
寄存器寻址,无符号乘法操作,rd=rs*rt
ddiv
ddiv rd,rs,rt
寄存器寻址,除法操作,rd=rs/rt
ddivu
ddivu rd,rs,rt
寄存器寻址,无符号除法操作,rd=rs/rt
add.d
add.d freg1,freg2,freg3
寄存器寻址,浮点数加法,freg1=freg2+freg3
sub.d
sub.d freg1,freg2,freg3
寄存器寻址,浮点数减法,freg1=freg2-freg3
mul.d
mul.d freg1,freg2,freg3
寄存器寻址,浮点数乘法,freg1=freg2*freg3
div.d
div.d freg1,freg2,freg3
寄存器寻址,浮点数除法,freg1=freg2/freg3
逻辑运算
and
and rd,rs,rt
寄存器寻址,与操作,rd=rs&rt
or
or rd,rs,rt
寄存器寻址,或操作,rd=rs|rt
xor
xor rd,rs,rt
寄存器寻址,异或操作,rd=rs^rt
andi
andi rd,rs,imm
立即数寻址,与操作,rd=rs&imm
ori
ori rd,rs,imm
立即数寻址,或操作,rd=rs|imm
xori
andi rd,rs,imm
立即数寻址,异或操作,rd=rs^imm
置位
slt
slt rd,rs,rt
寄存器寻址,如果rs