75 lines
842 B
Text
75 lines
842 B
Text
|
I=8S
|
||
|
A=d3
|
||
|
?I!A:usage_error
|
||
|
; open input file
|
||
|
J=S
|
||
|
; argv[1] is at *(rsp+16)
|
||
|
J+=d16
|
||
|
J=8J
|
||
|
I=d0
|
||
|
syscall x2
|
||
|
J=A
|
||
|
?J<0:input_file_error
|
||
|
; open output file
|
||
|
J=S
|
||
|
; argv[2] is at *(rsp+24)
|
||
|
J+=d24
|
||
|
J=8J
|
||
|
I=x241
|
||
|
D=x1ed
|
||
|
syscall x2
|
||
|
J=A
|
||
|
?J<0:output_file_error
|
||
|
J=d0
|
||
|
syscall x3c
|
||
|
|
||
|
:usage_error
|
||
|
B=:usage_error_message
|
||
|
call :error
|
||
|
|
||
|
:usage_error_message
|
||
|
str Please provide an input and an output file.
|
||
|
xa
|
||
|
x0
|
||
|
|
||
|
:input_file_error
|
||
|
B=:input_file_error_message
|
||
|
!:error
|
||
|
|
||
|
:input_file_error_message
|
||
|
str Couldn't open input file.
|
||
|
xa
|
||
|
x0
|
||
|
|
||
|
:output_file_error
|
||
|
B=:output_file_error_message
|
||
|
!:error
|
||
|
|
||
|
:output_file_error_message
|
||
|
str Couldn't open output file.
|
||
|
xa
|
||
|
x0
|
||
|
|
||
|
:error
|
||
|
J=B
|
||
|
call :strlen
|
||
|
D=A
|
||
|
I=J
|
||
|
J=d2
|
||
|
syscall x1
|
||
|
J=d1
|
||
|
syscall x3c
|
||
|
|
||
|
:strlen
|
||
|
I=B
|
||
|
D=B
|
||
|
:strlen_loop
|
||
|
C=1I
|
||
|
?C=0:strlen_ret
|
||
|
I+=d1
|
||
|
!:strlen_loop
|
||
|
:strlen_ret
|
||
|
I-=D
|
||
|
A=I
|
||
|
return
|