1、 lw $t2, 4($t0) li $v0, 4 #打印msg1 la $a0, msg1 syscall li $v0, 1 #打印转换前$t1中的值 move $a0, $t1 li $v0, 4 #打印msg2 la $a0, msg2 li $v0, 1 #打印转换前$t2中的值 move $a0, $t2 move $t3, $t1 #关键部分,在寄存器间move数据 move $t1, $t2 move $t2, $t3 li $v0, 4 #打印msg3 la $a0, msg3 li $v0, 1 #打印转换后$t1中的值 li $v0, 4 #打印换行符 /n la $a0
2、, msg4 li $v0, 1 #打印转换后$t2中的值# data segment # .datanumber: .word 12,34msg1: .asciiz the first number is:nmsg2:nthe second number is:msg3:nnow they are swapped as:msg4: .ascii # end of file程序运行结果为:本文来自CSDN博客,转载请标明出处:mips汇编简单实例一个小计算器 收藏 其实开始的时候一直在看 mips的指令格式,看了、忘了,没什么效果。现在通过这个例子,简单训练一下: mips汇编中:常用寄存器的
3、使用;系统调用: 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 la $t0, value # load address value into $t0 la $a0,msg0 li $v
4、0,4 syscall #print please choose the operation: li $v0, 5 syscall sw $v0, 8($t0) la $a0,msg1 first num: sw $v0, 0($t0) la $a0,msg2 second num: sw $v0, 4($t0) #read the other num la $a0,newline lw $t1, 0($t0) # load the first num lw $t2, 4($t0) # load the second num lw $t3, 8($t0) # load the operatio
5、n 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 mulOp: mul $t4, $t1, $t2 # $t1 * $t2 = $t4
6、 la $t5,mulFlag divOp: div $t4, $t1, $t2 # $t1 / $t2 = $t4 la $t5,divFlag printResult: lw $a0,0($t0) li $v0,1 syscall #read first number la $a0,0($t5) syscall #print opflag lw $a0,4($t0) syscall #print second number la $a0,equalStr = lw $a0,12($t0) syscall # print sum result j exit exit: n li $v0,10
7、 syscall # exit # data section .data value: .word 0, 0, 0 ,0 ,0 # 0: first num ,4 : second num , 8 : operation , 12:result msg0 : please choose the operation(14):ntt1 : +,addition ntt2 : -,subtracterntt3 : * multiplication ntt4 : /,divisionnmsg1 :msg2 :second num:addFlag : + subFlag : - mulFlag : *
8、divFlag : / equalStr :newline :n=na small calculater.text # text section.globl main # call main by SPIM la $t0, value # load address into $t0 la $a0,msg0 li $v0,4 syscall #print sw $v0, 8($t0) la $a0,msg1 sw $v0, 0($t0) la $a0,msg2 sw $v0, 4($t0) #read the other num la $a0,newline lw $t1, 0($t0) # l
9、oad 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 / add $t4, $t1, $t2 # $t1 + $t2 = $t4 sw $t4, 12($t0) # la $t5,addFlag j printResult sub $t4, $t1, $t2 # $t1 - $t2 = $t4 sw $t4, 12($t0) la $t5,subFlag mul $t4, $t1, $t2 # $t1 * $t2 = $t4 sw $t4, 12($t0) la $t5,mulFlag div $t4, $t1, $t2 # $t1 / $t2 = $t4 sw $t4, 12($t0) la $t5,divFlag lw $a0,0($t0) li $v0,1 syscall #read first number la $a0,0($t5) syscall #print opflag lw $a0,4($t0) syscall #print second nu
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1