learn mips
可以使用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的更多相关文章
- Atitit learn by need 需要的时候学与预先学习知识图谱路线图
Atitit learn by need 需要的时候学与预先学习知识图谱路线图 1. 体系化是什么 架构 知识图谱路线图思维导图的重要性11.1. 体系就是架构21.2. 只见树木不见森林21.3. ...
- Python 爬取所有51VOA网站的Learn a words文本及mp3音频
Python 爬取所有51VOA网站的Learn a words文本及mp3音频 #!/usr/bin/env python # -*- coding: utf-8 -*- #Python 爬取所有5 ...
- ARM、Intel、MIPS处理器啥区别?看完全懂了
安卓支持三类处理器(CPU):ARM.Intel和MIPS.ARM无疑被使用得最为广泛.Intel因为普及于台式机和服务器而被人们所熟知,然而对移动行业影响力相对较小.MIPS在32位和64位嵌入式领 ...
- 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 ...
- [转载]VIM 教程:Learn Vim Progressively
文章来源:http://yannesposito.com/Scratch/en/blog/Learn-Vim-Progressively/ Learn Vim Progressively TL ...
- 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 ...
- MIPS ABI n32意味着什么?
ABI是应用程序二进制接口的简称,用于标识处理器的工作模式及规范目标文件的编码格式. MIPS指令集架构自MIPS3起正式支持64位工作模式,故编码可以遵从o32(o意思是old).n32(n意思是n ...
- 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 ...
- Learn RxJava
Learn RxJava http://reactivex.io/documentation/operators.html https://github.com/ReactiveX/RxJava/wi ...
随机推荐
- ASP.NET MVC之路由深究
MVC的强大之处之一当然是路由,这是几年前一位牛人给我说过的话,本人深感认同.今天就再次探究. 首先新建一个空的MVC项目,我们会发现在RouteConfig类中存在一个默认的路由配置,通常我会在这里 ...
- Civil 3D API二次开发学习指南
Civil 3D构建于AutoCAD 和 Map 3D之上,在学习Civil 3D API二次开发之前,您至少需要了解AutoCAD API的二次开发,你可以参考AutoCAD .NET API二次开 ...
- Linux-HA实战(1)— Heartbeat安装
接触Heartbeat主要是因为之前项目中使用了TFS,最近想给nameserver做HA,因为TFS官方用的Heartbeat,所以刚好了解下,参考了网络上很多内容,这里简单记录下. 内容 环境和软 ...
- 30行代码搞定WCF并发性能测试
[以下只是个人观点,欢迎交流] 30行代码搞定WCF并发性能 轻量级测试. 1. 调用并发测试接口 static void Main() { List< ...
- asp.netDataTable导出excel方法(1)
先来写一段代码,这段代码也是我在网上找的,但是他那个原先有点问题,我对他那个进行了修改,现在这个代码是我修改改过的,应该没有问题的. public int StreamExport(System.Da ...
- Android measure过程分析
作为一名Android开发人员,我们都知道一个View从无到有,会经历3个阶段: 1. measure/测量阶段,也就是确定某个view大小的过程: 2. layout/布局阶段,也就是确定其左上右下 ...
- C#实现在图片上斜着写字
最近公司要搞微信活动页面,要实现图片上可以写自己名字的功能,于是就查了一下怎么实现,下面贴一下代码备忘,希望大家也能用到: 我是在控制台应用程序里进行试验的. using (Image bitmap ...
- RESTORE detected an error on page (0:0) in database
在测试服务器还原生产服务器的一个数据库时遇到了下面错误: System.Data.SqlClient.SqlError: RESTORE detected an error on page (0:0) ...
- 【转】java NIO 相关知识
原文地址:http://www.iteye.com/magazines/132-Java-NIO Java NIO(New IO)是从Java 1.4版本开始引入的一个新的IO API,可以替代标准的 ...
- [已解决]Teamviewer VPN 连接上,但无法ping
用Teamveiwer 可以进行远程控制连接.用了VPN功能后,起先也正常.可以PING和其他网络操作. 后来忽然始终VPN连接上后,无法PING和做其他的网络操作了. 检查缘由是对方TeamView ...