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

本文提供了一个在龙芯平台使用汇编语言进行系统调用的示例程序,该程序实现了从一个文件读取数据并写入另一个文件的功能。通过这个例子可以了解如何在龙芯CPU上使用特定的系统调用进行文件操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值