博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
learn mips
阅读量:7144 次
发布时间:2019-06-29

本文共 4378 字,大约阅读时间需要 14 分钟。

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

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

.data    str: .asciiz "weidiao is great\n".textj mainf:   la $a0,str   li $v0,4   syscall   jr $ramain:   li $t1,0   li $t2,3loop:   bgt $t1,$t2,over   addi $t1,$t1,1   jal f   j loopover:   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 "\n"  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

 

转载地址:http://qagrl.baihongyu.com/

你可能感兴趣的文章
同行的一个案例---删除表,需要恢复
查看>>
python splinter 小坑说明
查看>>
JAVA并行框架:Fork/Join
查看>>
控制input输入格式
查看>>
linux系统上安装java
查看>>
38.进程管理与计划任务---PS、Top、Crontab
查看>>
0301_互连模拟
查看>>
一次XEN启动中的错误捕获
查看>>
重大里程碑:顶级科学家达成23条人工智能发展原则!
查看>>
esxi嵌套华为Fusioncomputer安装VRM几个关键步骤。
查看>>
/etc/init.d/mysqld:line 260:my_print_defaults:command not found
查看>>
DNS设置引起的登录延迟
查看>>
*** $CI =& get_instance() 用法:关于CodeIgniter中get_instance() 函数
查看>>
简单的ISIS协议的路由重分发实验详解
查看>>
Python模块学习--shutil和hashlib和json
查看>>
Linux防火墙iptables学习笔记(一)入门要领
查看>>
xshell 秘钥配对
查看>>
saltstack之SLS文件
查看>>
Redhat linux下cvs的安装配置
查看>>
cxgrid合并值相同的某列
查看>>