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

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

.data
   str: .asciiz "weidiao is great\n"
.text
j main
f:
   la $a0,str
   li $v0,
   syscall
   jr $ra
main:
   li $t1,
   li $t2,3
loop:
   bgt $t1,$t2,over
   addi $t1,$t1,
   jal f
   j loop

   syscall

指令文档:链接

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

    #simple example :a small calculater’
    .text                       # text section
    .globl main                 # call main by SPIM
    main:
        la $t0, value
        #t0 is the address of the 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)  #operation is stored to t0+8---the second byte

        la $a0,msg1  #v0 controls the syscall.a0 controls the output_data;
        li $v0,4
        syscall             #print "first num:"  

        li  $v0, 5    #load integer 5 to v0,this is the read operation.
        syscall
        sw  $v0, 0($t0)  #store $v0

        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
        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(1~4):/n/t/t1 : +,addition /n/t/t2 : -,subtracter/n/t/t3 : * multiplication /n/t/t4 : /,division/n"
    msg1        :   .asciiz "first num:"
    msg2        :   .asciiz "second num:"
    addFlag     :   .asciiz " + "
    subFlag     :   .asciiz " - "
    mulFlag     :   .asciiz " * "
    divFlag     :   .asciiz " / "
    equalStr    :   .asciiz " = "
    newline     :   .asciiz "/n===============================/n"   

样例:打印九九乘法表

.data
  op :.asciiz "*"
  eq:.asciiz "="
  line:.asciiz "\n"
  space:.asciiz " "
.text
  j main
  print:
    move $a0,$t1
    li $v0,
    syscall

    la $a0,op
    li $v0,
    syscall

    move $a0,$t2
    li $v0,
    syscall

    la $a0,eq
    li $v0,
    syscall

    mult $t1,$t2
    mflo $a0
    li $v0,
    syscall

    la $a0,space
    li $v0,
    syscall

    blt $t2,$t1,ret
    la $a0,line
    syscall

    ret:
    jr $ra
  main:
    li $t1,
    for1:
      addi $t1,$t1,
      bgt $t1,,for1_out
      li $t2,
      for2:
        addi $t2,$t2,
        bgt $t2,$t1,for1
        jal print
        j for2
      j for1
    for1_out:
      li $v0,
      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. JavaScript小细节点罗列

    共勉! 属性访问表达式 众所周知,JavaScript为属性的访问定义了两种语法方式: 表达式.标识符 // 表达式(指定对象) 标识符(指定需要访问的属性的名称) 表达式[表达式] //表达式1(指 ...

  2. 微信平台ASPX高级定制开发(一):如何使用C#建立响应微信接入和自动回复的代码

    微信平台不解释了,如果不了解的百度一下下,如果不会用微信,请自宫,光盘重启电脑,打开CMD输入Format C:.网上有很多针对企业级的高级定制ASPX开发,写得草草了事,很多男人干事都草草了事,这可 ...

  3. GitHub学习心得之 简单操作

    作者:枫雪庭 出处:http://www.cnblogs.com/FengXueTing-px/ 欢迎转载 前言 本文对Github的基本操作进行了总结, 主要基于以下文章: http://gitre ...

  4. [DOM Event Learning] Section 1 DOM Event 处理器绑定的几种方法

    [DOM Event Learning] Section 1 DOM Event处理器绑定的几种方法   网页中经常需要处理各种事件,通常的做法是绑定listener对事件进行监听,当事件发生后进行一 ...

  5. Java Web中乱码问题

    response.setContentType("text/html;charset=UTF-8"); 用于定义网络文件的类型和网页的编码,决定浏览器将以什么形式.什么编码读取这个 ...

  6. 解析UML箭头、线条代表的意义(转)

    在学习UML过程中,你经常会遇到UML类图关系,这里就向大家介绍一下UML箭头.线条代表的意义,相信通过本文的介绍你对UML中箭头.线条的意义有更明确的认识. AD: 本节向大家学习一下UML箭头.线 ...

  7. [转]CTO、技术总监、首席架构师的区别

    经常有创业公司老板来拜访我,常常会拜托给我一句话:帮我找一个CTO. 我解释的多了,所以想把这个写下来,看看你到底需要的应该是啥. 一.高级程序员 如果你是一个刚刚创业的公司,公司没有专职产品经理和项 ...

  8. Oracle创建表空间、用户、授权

    在创建好数据实例(数据库)好后的基础上,后续做的事情如下: ---创建表空间 create tablespace LIS2011DATA logging datafile 'd:\oracle\pro ...

  9. IIS7如何部署asp.net网站

      第一步:发布网站 右键asp.net web项目,选择发布, 然后新建配置文件名称并选择 "文件系统" 发布方法. 目标位置选择本地新建的文件夹如: IISWebSite 第二 ...

  10. .NET应用架构设计—适当使用活动记录模式代替领域模型模式

    阅读目录: 1.背景介绍 2.简单介绍领域模型模式.活动记录模式 3.活动记录模式的简单示例及要点 4.总结 1.背景介绍 对软件开发方法论有兴趣的博友应该发现最近“领域驱动设计”慢慢的被人发现被人实 ...