From http://godsontech.blog.sohu.com/71840880.html
距离龙芯上的汇编版的hello,world!出现已经有段日子了。下面这个程序在那个的基础上多用了几个系统调用。更多的系统调用请参考/usr/include/asm/unistd.h,也可以用类似man 2 open的指令来看系统调用的详细的参数。
aa@aa/copy:/home/copy/# cat copy.s
.rdata
.align 2
$LC0:
.ascii "file.in\000"
.align 2
$LC1:
.ascii "file.out\000"
.text
.align 2
.globl main
.ent main
main:
.frame $fp,48,$31 # vars= 16, regs= 2/0, args= 16, gp= 8
.mask 0xc0000000,-4
.fmask 0x00000000,0
.set noreorder
.cpload $25
#打开源文件
addiu $sp,$sp,-48
sw $31,44($sp)
sw $fp,40($sp)
move $fp,$sp
.cprestore 16
la $4,$LC0 #载入地址
move $5,$0
li $2,4005 #open
syscall
#创建目标文件
lw $28,16($fp)
sw $2,28($fp)
la $4,$LC1
li $5,257 # 0x101
li $6,384 # 0x180
li $2,4005
syscall
lw $28,16($fp)
sw $2,24($fp)
b $L2
nop
$L3:
addiu $2,$fp,32
lw $4,24($fp)
move $5,$2
li $6,1 # 0x1
li $2,4004 #write
syscall
lw $28,16($fp)
$L2:
addiu $2,$fp,32
lw $4,28($fp)
move $5,$2
li $6,1 # 0x1
li $2,4003 #read
syscall
lw $28,16($fp)
move $3,$2
li $2,1 # 0x1
beq $3,$2,$L3
nop
#退出程序
move $4,$0 #返回值
li $2,4001 #exit
syscall
.set reorder
.end main