龙芯汇编语言-利用系统调用复制文件

6 篇文章 0 订阅

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值