MIPS汇编范例复习过程.docx
《MIPS汇编范例复习过程.docx》由会员分享,可在线阅读,更多相关《MIPS汇编范例复习过程.docx(15页珍藏版)》请在冰豆网上搜索。
MIPS汇编范例复习过程
MIPS汇编范例
mips汇编语言之实现swap函数收藏
此程序用来交换两个整数
已在pcspim下编译通过
##
##################################################
#
####programedbysteviezou###
#purpose:
toswaptwovalues#
#####10-15-2008#########################
##
#############textsegment###############
.text
.globlmain
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
###########datasegment##############
.data
number:
.word12,34
msg1:
.asciiz"thefirstnumberis:
\n"
msg2:
.asciiz"\nthesecondnumberis:
\n"
msg3:
.asciiz"\nnowtheyareswappedas:
\n"
msg4:
.ascii"\n"
##endoffile
程序运行结果为:
本文来自CSDN博客,转载请标明出处:
mips汇编简单实例——一个小计算器收藏
其实开始的时候一直在看mips的指令格式,看了、忘了,没什么效果。
现在通过这个例子,简单训练一下:
mips汇编中:
常用寄存器的使用;
系统调用:
1(print_int),4(print_str),5(read_int),10(exit);
算术运算:
add,sub,mul,div;
逻辑运算及跳转;
上代码:
(汇编写的少,代码书写、风格还很差劲,感谢请大虾指教):
viewplaincopytoclipboardprint?
#sampleexample'asmallcalculater’
.text#textsection
.globlmain#callmainbySPIM
main:
la$t0,value#loadaddress"value"into$t0
la$a0,msg0
li$v0,4
syscall#print"pleasechoosetheoperation:
"
li$v0,5
syscall
sw$v0,8($t0)
la$a0,msg1
li$v0,4
syscall#print"firstnum:
"
li$v0,5
syscall
sw$v0,0($t0)
la$a0,msg2
li$v0,4
syscall#print"secondnum:
"
li$v0,5
syscall
sw$v0,4($t0)#readtheothernum
la$a0,newline
li$v0,4
syscall#print"\n"
lw$t1,0($t0)#loadthefirstnum
lw$t2,4($t0)#loadthesecondnum
lw$t3,8($t0)#loadtheoperation
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
jprintResult
subOp:
sub$t4,$t1,$t2#$t1-$t2=$t4
sw$t4,12($t0)
la$t5,subFlag
jprintResult
mulOp:
mul$t4,$t1,$t2#$t1*$t2=$t4
sw$t4,12($t0)
la$t5,mulFlag
jprintResult
divOp:
div$t4,$t1,$t2#$t1/$t2=$t4
sw$t4,12($t0)
la$t5,divFlag
jprintResult
printResult:
lw$a0,0($t0)
li$v0,1
syscall#readfirstnumber
la$a0,0($t5)
li$v0,4
syscall#printopflag
lw$a0,4($t0)
li$v0,1
syscall#printsecondnumber
la$a0,equalStr
li$v0,4
syscall#print"="
lw$a0,12($t0)
li$v0,1
syscall#printsumresult
jexit
exit:
la$a0,newline
li$v0,4
syscall#print"\n"
li$v0,10
syscall#exit
#datasection
.data
value:
.word0,0,0,0,0#0:
firstnum,4:
secondnum,8:
operation,12:
result
msg0:
.asciiz"pleasechoosetheoperation(1~4):
\n\t\t1:
+,addition\n\t\t2:
-,subtracter\n\t\t3:
*multiplication\n\t\t4:
/,division\n"
msg1:
.asciiz"firstnum:
"
msg2:
.asciiz"secondnum:
"
addFlag:
.asciiz"+"
subFlag:
.asciiz"-"
mulFlag:
.asciiz"*"
divFlag:
.asciiz"/"
equalStr:
.asciiz"="
newline:
.asciiz"\n===============================\n"
#sampleexample'asmallcalculater’
.text#textsection
.globlmain#callmainbySPIM
main:
la$t0,value#loadaddress"value"into$t0
la$a0,msg0
li$v0,4
syscall#print"pleasechoosetheoperation:
"
li$v0,5
syscall
sw$v0,8($t0)
la$a0,msg1
li$v0,4
syscall#print"firstnum:
"
li$v0,5
syscall
sw$v0,0($t0)
la$a0,msg2
li$v0,4
syscall#print"secondnum:
"
li$v0,5
syscall
sw$v0,4($t0)#readtheothernum
la$a0,newline
li$v0,4
syscall#print"\n"
lw$t1,0($t0)#loadthefirstnum
lw$t2,4($t0)#loadthesecondnum
lw$t3,8($t0)#loadtheoperation
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
jprintResult
subOp:
sub$t4,$t1,$t2#$t1-$t2=$t4
sw$t4,12($t0)
la$t5,subFlag
jprintResult
mulOp:
mul$t4,$t1,$t2#$t1*$t2=$t4
sw$t4,12($t0)
la$t5,mulFlag
jprintResult
divOp:
div$t4,$t1,$t2#$t1/$t2=$t4
sw$t4,12($t0)
la$t5,divFlag
jprintResult
printResult:
lw$a0,0($t0)
li$v0,1
syscall#readfirstnumber
la$a0,0($t5)
li$v0,4
syscall#printopflag
lw$a0,4($t0)
li$v0,1
syscall#printsecondnu