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...