Add multi file input
This commit is contained in:
+13
-2
@@ -24,6 +24,8 @@ fetch_argc:
|
|||||||
# @param[out] a1: address of argv[a0].
|
# @param[out] a1: address of argv[a0].
|
||||||
# @param[out] a2: sizeof(argv[a0]).
|
# @param[out] a2: sizeof(argv[a0]).
|
||||||
fetch_argv:
|
fetch_argv:
|
||||||
|
addi sp, sp, -8
|
||||||
|
sd s0, 0(sp)
|
||||||
mv s0, a0
|
mv s0, a0
|
||||||
|
|
||||||
addi sp, sp, -16
|
addi sp, sp, -16
|
||||||
@@ -38,6 +40,8 @@ fetch_argv:
|
|||||||
bltz a1, 2f # fail if a0 less than zero
|
bltz a1, 2f # fail if a0 less than zero
|
||||||
ld t0, sp_start
|
ld t0, sp_start
|
||||||
addi t0, t0, 8
|
addi t0, t0, 8
|
||||||
|
addi sp, sp, -8
|
||||||
|
sd s1, 0(sp)
|
||||||
li s1, 0
|
li s1, 0
|
||||||
|
|
||||||
ld a0, 0(t0)
|
ld a0, 0(t0)
|
||||||
@@ -55,12 +59,15 @@ fetch_argv:
|
|||||||
mv a0, a1
|
mv a0, a1
|
||||||
addi s1, s1, 1
|
addi s1, s1, 1
|
||||||
bne s1, s0, 1b # if we haven't retrieved the requested argument, go again
|
bne s1, s0, 1b # if we haven't retrieved the requested argument, go again
|
||||||
|
|
||||||
j 3f
|
j 3f
|
||||||
|
|
||||||
2:
|
2:
|
||||||
li a0, 1 # fail
|
li a0, 1 # fail
|
||||||
j 4f
|
ld s0, 0(sp)
|
||||||
|
addi sp, sp, 8
|
||||||
|
ret
|
||||||
|
|
||||||
3:
|
3:
|
||||||
mv s0, a1
|
mv s0, a1
|
||||||
addi sp, sp, -16
|
addi sp, sp, -16
|
||||||
@@ -79,6 +86,10 @@ fetch_argv:
|
|||||||
mv a1, s0
|
mv a1, s0
|
||||||
|
|
||||||
4:
|
4:
|
||||||
|
ld s1, 0(sp)
|
||||||
|
addi sp, sp, 8
|
||||||
|
ld s0, 0(sp)
|
||||||
|
addi sp, sp, 8
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+13
-8
@@ -13,12 +13,21 @@ _start:
|
|||||||
call save_sp
|
call save_sp
|
||||||
call fetch_argc
|
call fetch_argc
|
||||||
li t0, 1
|
li t0, 1
|
||||||
ble a1, t0, 1f # return 1 on no file given
|
ble a1, t0, 1f # return 1 if no file given
|
||||||
|
mv s0, a1 # store argc
|
||||||
|
li s1, 1 # i=1 (skip program name)
|
||||||
|
|
||||||
li a0, 1
|
|
||||||
|
3:
|
||||||
|
mv a0, s1
|
||||||
call fetch_argv
|
call fetch_argv
|
||||||
beqz a0, 2f
|
bnez a0, 1f # error if failed
|
||||||
|
mv a0, a1
|
||||||
|
call cat_file
|
||||||
|
bnez a0, 1f # error if failed
|
||||||
|
addi s1, s1, 1
|
||||||
|
blt s1, s0, 3b
|
||||||
|
j 2f
|
||||||
|
|
||||||
1:
|
1:
|
||||||
li a0, 1
|
li a0, 1
|
||||||
@@ -26,10 +35,6 @@ _start:
|
|||||||
ecall # return 1
|
ecall # return 1
|
||||||
|
|
||||||
2:
|
2:
|
||||||
mv a0, a1
|
|
||||||
call cat_file
|
|
||||||
bnez a0, 1b # error if failed
|
|
||||||
|
|
||||||
li a0, 0
|
li a0, 0
|
||||||
li a7, 93
|
li a7, 93
|
||||||
ecall # return 0
|
ecall # return 0
|
||||||
|
|||||||
Reference in New Issue
Block a user