可以使用MARS来编汇编,MARS是一个用java编的IDE,它是一个模拟环境.

样例:重要的句子输出三遍

  1. .data
  2. str: .asciiz "weidiao is great\n"
  3. .text
  4. j main
  5. f:
  6. la $a0,str
  7. li $v0,
  8. syscall
  9. jr $ra
  10. main:
  11. li $t1,
  12. li $t2,3
  13. loop:
  14. bgt $t1,$t2,over
  15. addi $t1,$t1,
  16. jal f
  17. j loop
  18.  
  19. syscall

指令文档:链接

下面程序为一个四则运算程序,学习汇编就是要大量的阅读实例.实例学习在编程技术中至关重要.

  1. #simple example :a small calculater’
  2. .text # text section
  3. .globl main # call main by SPIM
  4. main:
  5. la $t0, value
  6. #t0 is the address of the value
  7. # load address "value" into $t0
  8. la $a0,msg0
  9. li $v0,4
  10. syscall #print "please choose the operation:"
  11.  
  12. li $v0, 5
  13. syscall
  14. sw $v0, 8($t0) #operation is stored to t0+8---the second byte
  15.  
  16. la $a0,msg1 #v0 controls the syscall.a0 controls the output_data;
  17. li $v0,4
  18. syscall #print "first num:"
  19.  
  20. li $v0, 5 #load integer 5 to v0,this is the read operation.
  21. syscall
  22. sw $v0, 0($t0) #store $v0
  23.  
  24. la $a0,msg2
  25. li $v0,4
  26. syscall #print " second num:"
  27.  
  28. li $v0, 5
  29. syscall
  30. sw $v0, 4($t0) #read the other num
  31.  
  32. la $a0,newline
  33. li $v0,4
  34. syscall #print "/n"
  35.  
  36. lw $t1, 0($t0) # load the first num
  37. lw $t2, 4($t0) # load the second num
  38. lw $t3, 8($t0) # load the operation
  39.  
  40. beq $t3,1,addOp # if +
  41. beq $t3,2,subOp # if -
  42. beq $t3,3,mulOp # if *
  43. beq $t3,4,divOp # if /
  44.  
  45. addOp:
  46. add $t4, $t1, $t2 # $t1 + $t2 = $t4
  47. sw $t4, 12($t0) #
  48. la $t5,addFlag
  49. j printResult
  50. subOp:
  51. sub $t4, $t1, $t2 # $t1 - $t2 = $t4
  52. sw $t4, 12($t0)
  53. la $t5,subFlag
  54. j printResult
  55. mulOp:
  56. mul $t4, $t1, $t2 # $t1 * $t2 = $t4
  57. sw $t4, 12($t0)
  58. la $t5,mulFlag
  59. j printResult
  60. divOp:
  61. div $t4, $t1, $t2 # $t1 / $t2 = $t4
  62. sw $t4, 12($t0)
  63. la $t5,divFlag
  64. j printResult
  65.  
  66. printResult:
  67. lw $a0,0($t0)
  68. li $v0,1
  69. syscall #read first number
  70.  
  71. la $a0,0($t5)
  72. li $v0,4
  73. syscall #print opflag
  74.  
  75. lw $a0,4($t0)
  76. li $v0,1
  77. syscall #print second number
  78.  
  79. la $a0,equalStr
  80. li $v0,4
  81. syscall #print " = "
  82.  
  83. lw $a0,12($t0)
  84. li $v0,1
  85. syscall # print sum result
  86. j exit
  87.  
  88. exit:
  89. la $a0,newline
  90. li $v0,4
  91. syscall #print " /n "
  92.  
  93. li $v0,10
  94. syscall # exit
  95. # data section
  96. .data
  97. value: .word 0, 0, 0 ,0 ,0 # 0: first num ,4 : second num , 8 : operation , 12:result
  98. msg0 : .asciiz " please choose the operation(1~4):/n/t/t1 : +,addition /n/t/t2 : -,subtracter/n/t/t3 : * multiplication /n/t/t4 : /,division/n"
  99. msg1 : .asciiz "first num:"
  100. msg2 : .asciiz "second num:"
  101. addFlag : .asciiz " + "
  102. subFlag : .asciiz " - "
  103. mulFlag : .asciiz " * "
  104. divFlag : .asciiz " / "
  105. equalStr : .asciiz " = "
  106. newline : .asciiz "/n===============================/n"

样例:打印九九乘法表

  1. .data
  2. op :.asciiz "*"
  3. eq:.asciiz "="
  4. line:.asciiz "\n"
  5. space:.asciiz " "
  6. .text
  7. j main
  8. print:
  9. move $a0,$t1
  10. li $v0,
  11. syscall
  12.  
  13. la $a0,op
  14. li $v0,
  15. syscall
  16.  
  17. move $a0,$t2
  18. li $v0,
  19. syscall
  20.  
  21. la $a0,eq
  22. li $v0,
  23. syscall
  24.  
  25. mult $t1,$t2
  26. mflo $a0
  27. li $v0,
  28. syscall
  29.  
  30. la $a0,space
  31. li $v0,
  32. syscall
  33.  
  34. blt $t2,$t1,ret
  35. la $a0,line
  36. syscall
  37.  
  38. ret:
  39. jr $ra
  40. main:
  41. li $t1,
  42. for1:
  43. addi $t1,$t1,
  44. bgt $t1,,for1_out
  45. li $t2,
  46. for2:
  47. addi $t2,$t2,
  48. bgt $t2,$t1,for1
  49. jal print
  50. j for2
  51. j for1
  52. for1_out:
  53. li $v0,
  54. syscall

learn mips的更多相关文章

  1. Atitit learn by need 需要的时候学与预先学习知识图谱路线图

    Atitit learn by need 需要的时候学与预先学习知识图谱路线图 1. 体系化是什么 架构 知识图谱路线图思维导图的重要性11.1. 体系就是架构21.2. 只见树木不见森林21.3. ...

  2. Python 爬取所有51VOA网站的Learn a words文本及mp3音频

    Python 爬取所有51VOA网站的Learn a words文本及mp3音频 #!/usr/bin/env python # -*- coding: utf-8 -*- #Python 爬取所有5 ...

  3. ARM、Intel、MIPS处理器啥区别?看完全懂了

    安卓支持三类处理器(CPU):ARM.Intel和MIPS.ARM无疑被使用得最为广泛.Intel因为普及于台式机和服务器而被人们所熟知,然而对移动行业影响力相对较小.MIPS在32位和64位嵌入式领 ...

  4. TLB初始化 Missing Handler,MIPS R3K mips_init_tlb

    #include <mips/r3kc0.h> LEAF(mips_init_tlb) mfc0 t0, C0_ENTRYHI # 保存ASID mtc0 zero, C0_ENTRYLO ...

  5. [转载]VIM 教程:Learn Vim Progressively

    文章来源:http://yannesposito.com/Scratch/en/blog/Learn-Vim-Progressively/   Learn Vim Progressively   TL ...

  6. some tips learn from work experience

    1.you can't avoid office politics 2.you'll never have a job which you "can't quit" - if yo ...

  7. MIPS ABI n32意味着什么?

    ABI是应用程序二进制接口的简称,用于标识处理器的工作模式及规范目标文件的编码格式. MIPS指令集架构自MIPS3起正式支持64位工作模式,故编码可以遵从o32(o意思是old).n32(n意思是n ...

  8. Java-集合(没做出来)第四题 (List)写一个函数reverseList,该函数能够接受一个List,然后把该List 倒序排列。 例如: List list = new ArrayList(); list.add(“Hello”); list.add(“World”); list.add(“Learn”); //此时list 为Hello World Learn reverseL

    没做出来 第四题 (List)写一个函数reverseList,该函数能够接受一个List,然后把该List 倒序排列. 例如: List list = new ArrayList(); list.a ...

  9. Learn RxJava

    Learn RxJava http://reactivex.io/documentation/operators.html https://github.com/ReactiveX/RxJava/wi ...

随机推荐

  1. ASP.NET MVC之路由深究

    MVC的强大之处之一当然是路由,这是几年前一位牛人给我说过的话,本人深感认同.今天就再次探究. 首先新建一个空的MVC项目,我们会发现在RouteConfig类中存在一个默认的路由配置,通常我会在这里 ...

  2. Civil 3D API二次开发学习指南

    Civil 3D构建于AutoCAD 和 Map 3D之上,在学习Civil 3D API二次开发之前,您至少需要了解AutoCAD API的二次开发,你可以参考AutoCAD .NET API二次开 ...

  3. Linux-HA实战(1)— Heartbeat安装

    接触Heartbeat主要是因为之前项目中使用了TFS,最近想给nameserver做HA,因为TFS官方用的Heartbeat,所以刚好了解下,参考了网络上很多内容,这里简单记录下. 内容 环境和软 ...

  4. 30行代码搞定WCF并发性能测试

    [以下只是个人观点,欢迎交流] 30行代码搞定WCF并发性能 轻量级测试. 1. 调用并发测试接口 static void Main()         {               List< ...

  5. asp.netDataTable导出excel方法(1)

    先来写一段代码,这段代码也是我在网上找的,但是他那个原先有点问题,我对他那个进行了修改,现在这个代码是我修改改过的,应该没有问题的. public int StreamExport(System.Da ...

  6. Android measure过程分析

    作为一名Android开发人员,我们都知道一个View从无到有,会经历3个阶段: 1. measure/测量阶段,也就是确定某个view大小的过程: 2. layout/布局阶段,也就是确定其左上右下 ...

  7. C#实现在图片上斜着写字

    最近公司要搞微信活动页面,要实现图片上可以写自己名字的功能,于是就查了一下怎么实现,下面贴一下代码备忘,希望大家也能用到: 我是在控制台应用程序里进行试验的. using (Image bitmap ...

  8. RESTORE detected an error on page (0:0) in database

    在测试服务器还原生产服务器的一个数据库时遇到了下面错误: System.Data.SqlClient.SqlError: RESTORE detected an error on page (0:0) ...

  9. 【转】java NIO 相关知识

    原文地址:http://www.iteye.com/magazines/132-Java-NIO Java NIO(New IO)是从Java 1.4版本开始引入的一个新的IO API,可以替代标准的 ...

  10. [已解决]Teamviewer VPN 连接上,但无法ping

    用Teamveiwer 可以进行远程控制连接.用了VPN功能后,起先也正常.可以PING和其他网络操作. 后来忽然始终VPN连接上后,无法PING和做其他的网络操作了. 检查缘由是对方TeamView ...