计算机组成原理_MIPS指令集及汇编语言要点

汇编语言知识要点

mips架构下的寄存器

在这里插入图片描述

系统调用-syscall

整数的输入输出

read
li $ v0, 5
syscall
输入的数存到$v0中

print
li $ v0, 1
syscall
此时输出的为==$ a0==(过程调用参数寄存器中的值)

常用指令——按功能分类

寄存器传送

move(MOVE):用作寄存器间值的传送
格式:move $t1, $t2

加载和存储

加载

加载立即数
li(Load immediate):$t1 = immediate(符号扩展)
格式:li $t1, -100
immediate 可以替换为零扩展 即100
immediate 可以替换为32bits 即100000

加载地址
la(Load Address):加载变量的地址 set $t1 to contents of $t2
格式:la $t1, $t2

从内存中加载字
lw(Load Word):加载字,把内存中地址为array+$ t1的数取出到$ a0中
格式:lw $t1 ,-100( $t2 )
地址必须为4的倍数

lw $ a0,array($ t1)

存储

向内存中存储字
sw(Store Word):存储字
格式:sw $t1, -100( $t2)

例 sw $v0, array( $t1)
地址必须为4的倍数

把输入的数存入地址为array+$t1的内存中

逻辑操作指令

主要用于条件判断时使用

and:与
格式:and $t1, $t2, $t3

andi:与立即数
格式:and $t1, $t2, 100

or: 或
格式:or $t1, $t2, $t3

ori: 或立即数
格式:ori $t1, $t2, 100

xor: 异或
格式:xor $t1, $t2, $t3

nor: 或非
格式:nor $t1, $t2, $t3

条件设置指令
基础指令

slt(set less than): 如果$t2<t3,set $t1 = 1, 否则 set $t1 = 0
格式:slt $t1, $t2, $t3

slti(set less than immediate): 如果$t2<16bits immediate ,set $t1 = 1, 否则 set $t1 = 0
格式:slt $t1, $t2, -100

扩展指令

seq(set Qqual): 如果$t2= = t3,set $t1 = 1, 否则 set $t1 = 0
格式:seq $t1, $t2, $t3

seq(set Qqual): 如果$t2= =immediate,set $t1 = 1, 否则 set $t1 = 0
格式:seq $t1, $t2, 100huozhe-100

sge(set greater or equal ): 如果 $t2 >= $t3 immediate ,set $t1 = 1, 否则 set $t1 = 0
格式:slt $t1, $t2, $t3
$t3也可以是立即数

还有sgt, sgtu, sltiu, sle, sleu, sne等

整数乘法除法和求余

div:除法,$t1 / $t2.然后将余数放到HI寄存器,商放到LO寄存器
格式:div $t1 $t2

传输指令

结合除法指令使用,获得商和余数

读取HI寄存器
mfhi(move from hi):把HI寄存器中的值存储到$t1中
格式:mfhi t 1 读 取 L O 寄 存 器 ∗ ∗ m f l o ( m o v e f r o m l o ) ∗ ∗ 把 L O 寄 存 器 中 的 值 存 储 到 t1 读取LO寄存器 **mflo( move from lo )**把LO寄存器中的值存储到 t1LOmflomovefromlo)LOt1中
格式:mflo $t1
写HI寄存器
mthi(move to hi):把 $ t1 寄存器中的值存储到HI中
格式:mthi t 1 写 L O 寄 存 器 ∗ ∗ m t l o ( m o v e t o l o ) ∗ ∗ 把 t1 写LO寄存器 **mtlo( move to lo )**把 t1LOmtlomovetolo)t1中的值存储到LO寄存器中
格式:mtlo $t1

bnez:不等于0转移if($t1 != 0)跳转
格式:bnez $t1 ,label

分支

等于转移
beq:等于转移if($t1 == $t2) 跳转
格式:beq $t1, $t2, label
$t2 也可以用

不等于转移

bne:不等于转移if($t1 != $t2) 跳转
格式:bne $t1, $t2, label

bnez:不等于0转移if($t1 != 0)跳转
格式:bnez $t1 ,label

小于

blt:if($t1 < $t2) 跳转
格式:blt $t1, $t2, label

bltz:if($t1<0)跳转
格式:bltz $t1, label

大于

bgt:if($t1 > $t2) 跳转
格式:bgt $t1, $t2, label

bgtz:if($t1>0)跳转
格式:bgtz $t1, label

小于等于

ble:if($t1 <= $t2) 跳转
格式:ble $t1, $t2, label

blez:if($t1<=0)跳转
格式:blez $t1, label

大于等于

bge:if($t1 >= $t2) 跳转
格式:bge $t1, $t2, label

bgez:if($t1>=0)跳转
格式:bgez $t1, label

跳转

跳转(无条件)
j(jump):跳转到指定地址
格式:j target

跳转并链接
jal(jump and link):跳转到指定地址的同时,还要保存返回地址到ra寄存器。
格式:jal target

还需补充

循环和判断

宏的使用

编程序实例

  • 3
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值