MIPS汇编范例复习过程

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

M I P S汇编范例

mips汇编语言之实现swap函数收藏

此程序用来交换两个整数

已在pcspim下编译通过

##

################################################## #

#### programed by stevie zou ###

# purpose:to swap two values #

##### 10-15-2008 ######### ################

##

############# text segment ###############

.text

.globl main

main: la $t0, number #读取两个整数并放入寄存器$t1,$t2 lw $t1, 0($t0)

lw $t2, 4($t0)

li $v0, 4 #打印msg1

la $a0, msg1

syscall

li $v0, 1 #打印转换前$t1中的值

move $a0, $t1

syscall

li $v0, 4 #打印msg2

la $a0, msg2

syscall

li $v0, 1 #打印转换前$t2中的值

move $a0, $t2

syscall

move $t3, $t1 #关键部分,在寄存器间move数据 move $t1, $t2

move $t2, $t3

li $v0, 4 #打印msg3

la $a0, msg3

syscall

li $v0, 1 #打印转换后$t1中的值

move $a0, $t1

syscall

li $v0, 4 #打印换行符 /n

la $a0, msg4

syscall

li $v0, 1 #打印转换后$t2中的值

move $a0, $t2

syscall

########### data segment ##############

.data

number: .word 12,34

msg1: .asciiz "the first number is:\n"

msg2: .asciiz "\nthe second number is:\n"

msg3: .asciiz "\nnow they are swapped as:\n"

msg4: .ascii "\n"

## end of file

程序运行结果为:

本文来自CSDN博客,转载请标明出处:

/yihaozou/archive/2008/10/19/3081322.aspx

mips汇编简单实例——一个小计算器收藏

其实开始的时候一直在看 mips的指令格式,看了、忘了,没什么效果。现在通过这个例子,简单训练一下: mips汇编中:

常用寄存器的使用;

系统调用: 1(print_int),4(print_str),5(read_int),10(exit);

算术运算: add,sub,mul,div;

逻辑运算及跳转;

上代码:(汇编写的少,代码书写、风格还很差劲,感谢请大虾指教):view plaincopy to clipboardprint?

#sample example 'a small calculater’

.text # text section

.globl main # call main by SPIM

main:

la $t0, 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)

la $a0,msg1

li $v0,4

syscall #print "first num:"

li $v0, 5

syscall

sw $v0, 0($t0)

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

相关文档
最新文档