mips汇编简单实例——一个小计算器
2011-11-08 09:11
399 查看
其实开始的时候一直在看 mips的指令格式,看了、忘了,没什么效果。
现在通过这个例子,简单训练一下: mips汇编中:
常用寄存器的使用;
系统调用: 1(print_int),4(print_str),5(read_int),10(exit);
算术运算: add,sub,mul,div;
逻辑运算及跳转;
上代码:(汇编写的少,代码书写、风格还很差劲,感谢请大虾指教):
view plaincopy to
clipboardprint?
#sample example 'a small calculater’
.text # text section
.globl main # call main by SPIM
main:
la $t0, value # load address "value" into $t0
la $a0,msg0
li $v0,4
syscall #print "please choose the operation:"
li $v0, 5
syscall
sw $v0, 8($t0)
la $a0,msg1
li $v0,4
syscall #print "first num:"
li $v0, 5
syscall
sw $v0, 0($t0)
la $a0,msg2
li $v0,4
syscall #print " second num:"
li $v0, 5
syscall
sw $v0, 4($t0) #read the other num
la $a0,newline
li $v0,4
syscall #print "/n"
lw $t1, 0($t0) # load the first num
lw $t2, 4($t0) # load the second num
lw $t3, 8($t0) # load the operation
beq $t3,1,addOp # if +
beq $t3,2,subOp # if -
beq $t3,3,mulOp # if *
beq $t3,4,divOp # if /
addOp:
add $t4, $t1, $t2 # $t1 + $t2 = $t4
sw $t4, 12($t0) #
la $t5,addFlag
j printResult
subOp:
sub $t4, $t1, $t2 # $t1 - $t2 = $t4
sw $t4, 12($t0)
la $t5,subFlag
j printResult
mulOp:
mul $t4, $t1, $t2 # $t1 * $t2 = $t4
sw $t4, 12($t0)
la $t5,mulFlag
j printResult
divOp:
div $t4, $t1, $t2 # $t1 / $t2 = $t4
sw $t4, 12($t0)
la $t5,divFlag
j printResult
printResult:
lw $a0,0($t0)
li $v0,1
syscall #read first number
la $a0,0($t5)
li $v0,4
syscall #print opflag
lw $a0,4($t0)
li $v0,1
syscall #print second number
la $a0,equalStr
li $v0,4
syscall #print " = "
lw $a0,12($t0)
li $v0,1
syscall # print sum result
j exit
exit:
la $a0,newline
li $v0,4
syscall #print " /n "
li $v0,10
syscall # exit
# data section
.data
value: .word 0, 0, 0 ,0 ,0 # 0: first num ,4 : second num , 8 : operation , 12:result
msg0 : .asciiz " please choose the operation(1~4):/n/t/t1 : +,addition /n/t/t2 : -,subtracter/n/t/t3 : * multiplication /n/t/t4 : /,division/n"
msg1 : .asciiz "first num:"
msg2 : .asciiz "second num:"
addFlag : .asciiz " + "
subFlag : .asciiz " - "
mulFlag : .asciiz " * "
divFlag : .asciiz " / "
equalStr : .asciiz " = "
newline : .asciiz "/n===============================/n"
#sample example 'a small calculater’
.text # text section
.globl main # call main by SPIM
main:
la $t0, value # load address "value" into $t0
la $a0,msg0
li $v0,4
syscall #print "please choose the operation:"
li $v0, 5
syscall
sw $v0, 8($t0)
la $a0,msg1
li $v0,4
syscall #print "first num:"
li $v0, 5
syscall
sw $v0, 0($t0)
la $a0,msg2
li $v0,4
syscall #print " second num:"
li $v0, 5
syscall
sw $v0, 4($t0) #read the other num
la $a0,newline
li $v0,4
syscall #print "/n"
lw $t1, 0($t0) # load the first num
lw $t2, 4($t0) # load the second num
lw $t3, 8($t0) # load the operation
beq $t3,1,addOp # if +
beq $t3,2,subOp # if -
beq $t3,3,mulOp # if *
beq $t3,4,divOp # if /
addOp:
add $t4, $t1, $t2 # $t1 + $t2 = $t4
sw $t4, 12($t0) #
la $t5,addFlag
j printResult
subOp:
sub $t4, $t1, $t2 # $t1 - $t2 = $t4
sw $t4, 12($t0)
la $t5,subFlag
j printResult
mulOp:
mul $t4, $t1, $t2 # $t1 * $t2 = $t4
sw $t4, 12($t0)
la $t5,mulFlag
j printResult
divOp:
div $t4, $t1, $t2 # $t1 / $t2 = $t4
sw $t4, 12($t0)
la $t5,divFlag
j printResult
printResult:
lw $a0,0($t0)
li $v0,1
syscall #read first number
la $a0,0($t5)
li $v0,4
syscall #print opflag
lw $a0,4($t0)
li $v0,1
syscall #print second number
la $a0,equalStr
li $v0,4
syscall #print " = "
lw $a0,12($t0)
li $v0,1
syscall # print sum result
j exit
exit:
la $a0,newline
li $v0,4
syscall #print " /n "
li $v0,10
syscall # exit
# data section
.data
value: .word 0, 0, 0 ,0 ,0 # 0: first num ,4 : second num , 8 : operation , 12:result
msg0 : .asciiz " please choose the operation(1~4):/n/t/t1 : +,addition /n/t/t2 : -,subtracter/n/t/t3 : * multiplication /n/t/t4 : /,division/n"
msg1 : .asciiz "first num:"
msg2 : .asciiz "second num:"
addFlag : .asciiz " + "
subFlag : .asciiz " - "
mulFlag : .asciiz " * "
divFlag : .asciiz " / "
equalStr : .asciiz " = "
newline : .asciiz "/n===============================/n"
运行效果截图如下:
现在通过这个例子,简单训练一下: mips汇编中:
常用寄存器的使用;
系统调用: 1(print_int),4(print_str),5(read_int),10(exit);
算术运算: add,sub,mul,div;
逻辑运算及跳转;
上代码:(汇编写的少,代码书写、风格还很差劲,感谢请大虾指教):
view plaincopy to
clipboardprint?
#sample example 'a small calculater’
.text # text section
.globl main # call main by SPIM
main:
la $t0, value # load address "value" into $t0
la $a0,msg0
li $v0,4
syscall #print "please choose the operation:"
li $v0, 5
syscall
sw $v0, 8($t0)
la $a0,msg1
li $v0,4
syscall #print "first num:"
li $v0, 5
syscall
sw $v0, 0($t0)
la $a0,msg2
li $v0,4
syscall #print " second num:"
li $v0, 5
syscall
sw $v0, 4($t0) #read the other num
la $a0,newline
li $v0,4
syscall #print "/n"
lw $t1, 0($t0) # load the first num
lw $t2, 4($t0) # load the second num
lw $t3, 8($t0) # load the operation
beq $t3,1,addOp # if +
beq $t3,2,subOp # if -
beq $t3,3,mulOp # if *
beq $t3,4,divOp # if /
addOp:
add $t4, $t1, $t2 # $t1 + $t2 = $t4
sw $t4, 12($t0) #
la $t5,addFlag
j printResult
subOp:
sub $t4, $t1, $t2 # $t1 - $t2 = $t4
sw $t4, 12($t0)
la $t5,subFlag
j printResult
mulOp:
mul $t4, $t1, $t2 # $t1 * $t2 = $t4
sw $t4, 12($t0)
la $t5,mulFlag
j printResult
divOp:
div $t4, $t1, $t2 # $t1 / $t2 = $t4
sw $t4, 12($t0)
la $t5,divFlag
j printResult
printResult:
lw $a0,0($t0)
li $v0,1
syscall #read first number
la $a0,0($t5)
li $v0,4
syscall #print opflag
lw $a0,4($t0)
li $v0,1
syscall #print second number
la $a0,equalStr
li $v0,4
syscall #print " = "
lw $a0,12($t0)
li $v0,1
syscall # print sum result
j exit
exit:
la $a0,newline
li $v0,4
syscall #print " /n "
li $v0,10
syscall # exit
# data section
.data
value: .word 0, 0, 0 ,0 ,0 # 0: first num ,4 : second num , 8 : operation , 12:result
msg0 : .asciiz " please choose the operation(1~4):/n/t/t1 : +,addition /n/t/t2 : -,subtracter/n/t/t3 : * multiplication /n/t/t4 : /,division/n"
msg1 : .asciiz "first num:"
msg2 : .asciiz "second num:"
addFlag : .asciiz " + "
subFlag : .asciiz " - "
mulFlag : .asciiz " * "
divFlag : .asciiz " / "
equalStr : .asciiz " = "
newline : .asciiz "/n===============================/n"
#sample example 'a small calculater’
.text # text section
.globl main # call main by SPIM
main:
la $t0, value # load address "value" into $t0
la $a0,msg0
li $v0,4
syscall #print "please choose the operation:"
li $v0, 5
syscall
sw $v0, 8($t0)
la $a0,msg1
li $v0,4
syscall #print "first num:"
li $v0, 5
syscall
sw $v0, 0($t0)
la $a0,msg2
li $v0,4
syscall #print " second num:"
li $v0, 5
syscall
sw $v0, 4($t0) #read the other num
la $a0,newline
li $v0,4
syscall #print "/n"
lw $t1, 0($t0) # load the first num
lw $t2, 4($t0) # load the second num
lw $t3, 8($t0) # load the operation
beq $t3,1,addOp # if +
beq $t3,2,subOp # if -
beq $t3,3,mulOp # if *
beq $t3,4,divOp # if /
addOp:
add $t4, $t1, $t2 # $t1 + $t2 = $t4
sw $t4, 12($t0) #
la $t5,addFlag
j printResult
subOp:
sub $t4, $t1, $t2 # $t1 - $t2 = $t4
sw $t4, 12($t0)
la $t5,subFlag
j printResult
mulOp:
mul $t4, $t1, $t2 # $t1 * $t2 = $t4
sw $t4, 12($t0)
la $t5,mulFlag
j printResult
divOp:
div $t4, $t1, $t2 # $t1 / $t2 = $t4
sw $t4, 12($t0)
la $t5,divFlag
j printResult
printResult:
lw $a0,0($t0)
li $v0,1
syscall #read first number
la $a0,0($t5)
li $v0,4
syscall #print opflag
lw $a0,4($t0)
li $v0,1
syscall #print second number
la $a0,equalStr
li $v0,4
syscall #print " = "
lw $a0,12($t0)
li $v0,1
syscall # print sum result
j exit
exit:
la $a0,newline
li $v0,4
syscall #print " /n "
li $v0,10
syscall # exit
# data section
.data
value: .word 0, 0, 0 ,0 ,0 # 0: first num ,4 : second num , 8 : operation , 12:result
msg0 : .asciiz " please choose the operation(1~4):/n/t/t1 : +,addition /n/t/t2 : -,subtracter/n/t/t3 : * multiplication /n/t/t4 : /,division/n"
msg1 : .asciiz "first num:"
msg2 : .asciiz "second num:"
addFlag : .asciiz " + "
subFlag : .asciiz " - "
mulFlag : .asciiz " * "
divFlag : .asciiz " / "
equalStr : .asciiz " = "
newline : .asciiz "/n===============================/n"
运行效果截图如下:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202012/09/8f268f84020b4b9a7af36a707be67822.gif)
相关文章推荐
- mips汇编简单实例——一个小计算器
- J2ME应用实例——一个简单的计算器实现(附源代码)
- J2ME应用实例——一个简单的计算器实现(附源代码)
- 使用JSP制作一个超简单的网页计算器的实例分享
- C语言模块化开发简单实例——实现一个计算器的加减乘除
- 使用JSP制作一个超简单的网页计算器的实例分享
- mips汇编简单实例——一个小计算器
- 用了N年的接口,你知道接口是什么吗?——一个简单实例说明接口的伟大意义
- 一个简单直接的JOX实例
- nodejs + express + ejs + mongodb 一个非常简单的前后端开发的实例
- Tensorflow的一个简单实例,线性回归
- 一个简单的实例来聊聊什么是Restful接口
- spring:一个简单实例之AOP
- 鸟哥的Linux私房菜(基础篇)- 一个简单的 SPFdisk 分割实例
- ubuntu 中安装memcache,并给出一个简单的实例·
- 创建一个简单BP的实例
- 微信企业号会议助手---一个简单的SSM实例
- (C#)一个WCF简单实例
- 实现一个简单的按钮实例-上下左右,左旋转,右旋转,放大缩小。代码重构
- 一个简单的jsp+servlet实例,实现简单的登录