MIPS汇编样式规范.docx
- 文档编号:16777609
- 上传时间:2023-07-17
- 格式:DOCX
- 页数:17
- 大小:54.99KB
MIPS汇编样式规范.docx
《MIPS汇编样式规范.docx》由会员分享,可在线阅读,更多相关《MIPS汇编样式规范.docx(17页珍藏版)》请在冰点文库上搜索。
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#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"
运行效果截图如下:
本文来自CSDN博客,转载请标明出处:
本文来自CSDN博客,转载请标明出处:
高精度整数除法(MIPS汇编)收藏
.data
title:
.asciiz"\t\t高精度除法演示程序\n"
tip1:
.asciiz"\n请输入被除数:
"
tip2:
.asciiz"请输入除数:
"
tip3:
.asciiz"要输出小数点后多少位:
"
tip4:
.asciiz"\n是否继续?
(y/n)"
err:
.asciiz"\n除数不能为0,请重新输入\n"
dot:
.asciiz"."
sign:
.asciiz"-"
buf:
.byte0:
16
.text
.globl__start
__start:
#输出标题
li$v0,4
la$a0,title
syscall
#提示输入被除数并接收输入
restart:
li$v0,4
la$a0,tip1
syscall
li$v0,5
syscall
move$t0,$v0
#提示输入除数并接收输入
input_again:
li$v0,4
la$a0,tip2
syscall
li$v0,5
syscall
move$t1,$v0
#检测除数是否为0,是则输出错误信息并跳转到除数输入处,否则继续执行
bnez$t1,next
li$v0,4
la$a0,err
syscall
jinput_again
#提示输入要求的小数位数并接收输入
next:
li$v0,4
la$a0,tip3
syscall
li$v0,5
syscall
move$t2,$v0
#两数进行除法运算,把运算结果保存到寄存器$t8和$t9
div$t0,$t1
move$s0,$zero
mflo$t8
mfhi$t9
#检测商是否为0,是则继续执行下一步,否则跳转到输出整数结果处
bnez$t8,int_result
#检测被除数是否为非负数,是则检查除数,否则置$s0为1,$s0用来记录负数的个数
bgez$t0,next_check
addi$s0,$zero,1
#检测除数是否为非负数,是则输出-号,否则$s0加1
next_check:
bgez$t1,print_sign
addi$s0,$s0,1
#输出-号,如果$s0值不为1,即负数个数不为奇数,则跳过此步
print_sign:
bne$s0,1,int_result
li$v0,4
la$a0,sign
syscall
#输出整数部分结果
int_result:
li$v0,1
move$a0,$t8
syscall
#输出小数点
li$v0,4
la$a0,dot
syscall
#检测余数是否不小于0,是则跳转到下一步执行,否则取反
bgez$t9,next_num
neg$t9,$t9
#检测除数是否不小于0,是则转入下一步,否则取反
next_num:
bgez$t1,isloop
neg$t1,$t1
#余数乘以10,再除以除数,得到新的商和余数
isloop:
move$t8,$t9
mul$t8,$t8,10
div$t8,$t1
mflo$t8
mfhi$t9
#输出新的商
li$v0,1
move$a0,$t8
syscall
#小数位数记录减1,当其大于0时继续回到上一标号处执行,否则转入下一步
sub$t2,$t2,1
bgtz$t2,isloop
#显示提示信息是否要重新开始,
li$v0,4
la$a0,tip4
syscall
#接收字符输入
li$v0,8
la$a0,buf
li$a1,16
syscall
#输入的第一字符为y时则重新开始,否则结束程序
lbu$t3,buf
beq$t3,121,restart
li$v0,10
syscall
本文来自CSDN博客,转载请标明出处:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MIPS 汇编 样式 规范
![提示](https://static.bingdoc.com/images/bang_tan.gif)