龍芯組合語言 利用系統呼叫複製檔案

2021-06-08 09:06:16 字數 1467 閱讀 3396

from  

距離龍芯上的彙編版的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

龍芯組合語言程式設計藝術

發表日期 2007 04 27 17 49 分析系統呼叫的實現時看到這麼一段 令人不禁拍案叫絕。系統呼叫的引數傳遞,前4個引數通過a0 a3傳,後面的引數要通過棧來傳,目前核心 系統呼叫最長的引數個數為8。用棧傳遞引數時,涉及到要將位於使用者空間的引數先複製到核心空間 核心棧 因為系統呼叫的引數個數...

組合語言呼叫Linux系統呼叫

首先查詢系統呼叫檔案 find name unistd.h root linux include unistd.h usr include linux unistd.h usr include sys unistd.h usr include bits unistd.h usr include un...

MIPS 組合語言程式設計的藝術(龍芯適用)

分析系統呼叫的實現時看到這麼一段 令人不禁拍案叫絕。系統呼叫的引數傳遞,前4個引數通過a0 a3傳,後面的引數要通過棧來傳,目前核心 系統呼叫最長的引數個數為8。用棧傳遞引數時,涉及到要將位於使用者空間的引數先複製到核心空間 核心棧 因為系統呼叫的引數個數不定,因此就需要判斷引數個數為5 6 7 8...