MIPS汇编范例复习过程
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
M I P S汇编范例
mips汇编语言之实现swap函数收藏
此程序用来交换两个整数
已在pcspim下编译通过
##
################################################## #
#### programed by stevie zou ###
# purpose:to swap two values #
##### 10-15-2008 ######### ################
##
############# text segment ###############
.text
.globl main
main: la $t0, number #读取两个整数并放入寄存器$t1,$t2 lw $t1, 0($t0)
lw $t2, 4($t0)
li $v0, 4 #打印msg1
la $a0, msg1
syscall
li $v0, 1 #打印转换前$t1中的值
move $a0, $t1
syscall
li $v0, 4 #打印msg2
la $a0, msg2
syscall
li $v0, 1 #打印转换前$t2中的值
move $a0, $t2
syscall
move $t3, $t1 #关键部分,在寄存器间move数据 move $t1, $t2
move $t2, $t3
li $v0, 4 #打印msg3
la $a0, msg3
syscall
li $v0, 1 #打印转换后$t1中的值
move $a0, $t1
syscall
li $v0, 4 #打印换行符 /n
la $a0, msg4
syscall
li $v0, 1 #打印转换后$t2中的值
move $a0, $t2
syscall
########### data segment ##############
.data
number: .word 12,34
msg1: .asciiz "the first number is:\n"
msg2: .asciiz "\nthe second number is:\n"
msg3: .asciiz "\nnow they are swapped as:\n"
msg4: .ascii "\n"
## end of file
程序运行结果为:
本文来自CSDN博客,转载请标明出处:
/yihaozou/archive/2008/10/19/3081322.aspx
mips汇编简单实例——一个小计算器收藏
其实开始的时候一直在看 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