zoukankan      html  css  js  c++  java
  • learn mips

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

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

    .data 
       str: .asciiz "weidiao is great
    "
    .text
    j main
    f:
       la $a0,str
       li $v0,4
       syscall
       jr $ra
    main:
       li $t1,0
       li $t2,3
    loop:
       bgt $t1,$t2,over
       addi $t1,$t1,1
       jal f
       j loop
    over:   li $v0,10
       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 "
    "
      space:.asciiz " "
    .text
      j main
      print:
        move $a0,$t1
        li $v0,1
        syscall
        
        la $a0,op
        li $v0,4
        syscall
        
        move $a0,$t2
        li $v0,1
        syscall
        
        la $a0,eq
        li $v0,4
        syscall
        
        mult $t1,$t2
        mflo $a0
        li $v0,1
        syscall
        
        la $a0,space
        li $v0,4 
        syscall
        
        blt $t2,$t1,ret
        la $a0,line
        syscall
        
        ret:
        jr $ra
      main:
        li $t1,0
        for1:
          addi $t1,$t1,1
          bgt $t1,9,for1_out
          li $t2,0
          for2:
            addi $t2,$t2,1
            bgt $t2,$t1,for1
            jal print
            j for2
          j for1
        for1_out:
          li $v0,10
          syscall
  • 相关阅读:
    java:输出流程printStream
    phalcon 连接多个数据库 phalcon multi-database
    Selenium Webdriver元素定位的八种常用方法
    adb push ,adb pull和adb install的区别
    Java将数据写进excel
    Java接口和抽象类的区别
    深入理解Java的接口和抽象类
    Java内存解析 程序的执行过程
    bit,byte,char,位,字节,字符 的区别
    java static成员变量方法和非static成员变量方法的区别 ( 二 )
  • 原文地址:https://www.cnblogs.com/weiyinfu/p/6001662.html
Copyright © 2011-2022 走看看