MIPS汇编范例_第1页
MIPS汇编范例_第2页
MIPS汇编范例_第3页
MIPS汇编范例_第4页
MIPS汇编范例_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、.mips汇编语言之实现swap函数 收藏 此程序用来交换两个整数已在pcspim下编译通过# programed by stevie zou # purpose:to swap two values # 10-15-2008 # # text segment # .text .globl mainmain: 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 sy

2、scall 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中的值 mo

3、ve $a0, $t2 syscall# data segment # .datanumber: .word 12,34msg1: .asciiz the first number is:nmsg2: .asciiz nthe second number is:nmsg3: .asciiz nnow they are swapped as:nmsg4: .ascii n# end of file程序运行结果为:本文来自CSDN博客,转载请标明出处:/yihaozou/archive/2008/10/19/3081322.aspxmips汇编简单实例一个小计

4、算器 收藏 其实开始的时候一直在看 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 mai

5、n 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 sysc

6、all 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

7、, $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

8、($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:

9、 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(14):ntt1 : +,addition ntt2 : -,subtracterntt3 : * multiplication ntt4 : /,divisionn

10、 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 SPIMmain:la $t0, value# load address value

11、into $t0la $a0,msg0 li $v0,4 syscall#print please choose the operation:li$v0, 5syscallsw$v0, 8($t0)la $a0,msg1 li $v0,4 syscall#print first num:li$v0, 5syscallsw$v0, 0($t0)la $a0,msg2 li $v0,4 syscall#print second num:li$v0, 5syscallsw$v0, 4($t0)#read the other numla $a0,newline li $v0,4 syscall#pri

12、nt nlw $t1, 0($t0)# load the first numlw $t2, 4($t0)# load the second numlw $t3, 8($t0)# load the operationbeq $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,addFlagj printResultsubOp:sub $t4, $t1, $t2#

13、 $t1 - $t2 = $t4 sw $t4, 12($t0)la $t5,subFlagj printResultmulOp:mul $t4, $t1, $t2# $t1 * $t2 = $t4 sw $t4, 12($t0)la $t5,mulFlagj printResultdivOp:div $t4, $t1, $t2# $t1 / $t2 = $t4 sw $t4, 12($t0)la $t5,divFlagj printResultprintResult:lw $a0,0($t0) li $v0,1 syscall#read first numberla $a0,0($t5) l

14、i $v0,4 syscall#print opflaglw $a0,4($t0) li $v0,1 syscall#print second numberla $a0,equalStr li $v0,4 syscall#print = lw $a0,12($t0) li $v0,1 syscall# print sum resultj exitexit:la $a0,newline li $v0,4 syscall#print n li $v0,10 syscall# exit# data section.datavalue:.word 0, 0, 0 ,0 ,0 # 0: first nu

15、m ,4 : second num , 8 : operation , 12:resultmsg0:.asciiz please choose the operation(14):ntt1 : +,addition ntt2 : -,subtracterntt3 : * multiplication ntt4 : /,divisionnmsg1:.asciiz first num:msg2:.asciiz second num:addFlag: .asciiz + subFlag: .asciiz - mulFlag: .asciiz * divFlag: .asciiz / equalStr

16、: .asciiz = newline:.asciiz n=n 运行效果截图如下:本文来自CSDN博客,转载请标明出处:/oncoding/archive/2009/07/15/4346531.aspx本文来自CSDN博客,转载请标明出处:/oncoding/archive/2009/07/15/4346531.aspx高精度整数除法(MIPS汇编) 收藏 .datatitle: .asciiz tt高精度除法演示程序ntip1: .asciiz n请输入被除数:tip2: .asciiz 请输入除数:tip3: .a

17、sciiz 要输出小数点后多少位:tip4: .asciiz n是否继续?(y/n)err: .asciiz n除数不能为0,请重新输入ndot: .asciiz .sign: .asciiz -buf: .byte 0: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

18、 $a0, tip2 syscall li $v0, 5 syscall move $t1, $v0 #检测除数是否为0,是则输出错误信息并跳转到除数输入处,否则继续执行 bnez $t1, next li $v0, 4 la $a0, err syscall j input_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

19、 $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. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论