194 lines
1.7 KiB
NASM
194 lines
1.7 KiB
NASM
format ELF64 executable 3
|
|
|
|
segment executable readable
|
|
|
|
entry main
|
|
|
|
read_character:
|
|
nop
|
|
mov eax, 0
|
|
nop
|
|
mov edi, r12d
|
|
nop
|
|
mov esi, r13d
|
|
nop
|
|
mov edx, 1
|
|
nop
|
|
syscall
|
|
ret
|
|
|
|
write_character:
|
|
nop
|
|
mov eax, 1
|
|
nop
|
|
mov edi, r12d
|
|
nop
|
|
mov esi, r13d
|
|
nop
|
|
mov edx, 1
|
|
nop
|
|
syscall
|
|
ret
|
|
|
|
write_string:
|
|
nop
|
|
mov eax, 1
|
|
nop
|
|
mov edi, r12d
|
|
nop
|
|
mov esi, r13d
|
|
nop
|
|
mov edx, r14d
|
|
nop
|
|
syscall
|
|
ret
|
|
|
|
write_space:
|
|
nop
|
|
mov eax, 1
|
|
nop
|
|
mov edi, 1
|
|
nop
|
|
mov esi, space
|
|
nop
|
|
mov edx, 1
|
|
nop
|
|
syscall
|
|
ret
|
|
|
|
write_line_feed:
|
|
nop
|
|
mov eax, 1
|
|
nop
|
|
mov edi, 1
|
|
nop
|
|
mov esi, line_feed
|
|
nop
|
|
mov edx, 1
|
|
nop
|
|
syscall
|
|
ret
|
|
|
|
main:
|
|
nop
|
|
nop
|
|
nop
|
|
|
|
nop
|
|
pop r11
|
|
nop
|
|
cmp r11, 2
|
|
nop
|
|
je skip
|
|
nop
|
|
mov r12d, 1
|
|
nop
|
|
mov r13d, failure
|
|
nop
|
|
mov r14d, 12
|
|
nop
|
|
call write_string
|
|
nop
|
|
mov eax, 60
|
|
mov edi, 1
|
|
syscall
|
|
nop
|
|
skip:
|
|
|
|
nop
|
|
pop r11
|
|
nop
|
|
pop r11
|
|
nop
|
|
mov eax, 2
|
|
nop
|
|
mov edi, r11d
|
|
nop
|
|
xor esi, esi
|
|
nop
|
|
xor edx, edx
|
|
nop
|
|
syscall
|
|
nop
|
|
mov dword[filaa], eax
|
|
|
|
main_loop:
|
|
nop
|
|
mov r12d, [filaa]
|
|
nop
|
|
mov r13, bytaa
|
|
nop
|
|
call read_character
|
|
nop
|
|
nop
|
|
mov r10d, eax
|
|
nop
|
|
mov r15b, [bytaa]
|
|
nop
|
|
cmp r15b, 144
|
|
nop
|
|
jne main_loop_skip
|
|
nop
|
|
call write_line_feed
|
|
nop
|
|
main_loop_skip:
|
|
nop
|
|
nop
|
|
mov r12d, 1
|
|
nop
|
|
mov r13d, digits
|
|
nop
|
|
sar r15d, 4
|
|
nop
|
|
add r13d, r15d
|
|
nop
|
|
call write_character
|
|
nop
|
|
nop
|
|
mov r12d, 1
|
|
nop
|
|
mov r13d, digits
|
|
nop
|
|
mov r15b, [bytaa]
|
|
nop
|
|
and r15d, 15
|
|
nop
|
|
add r13d, r15d
|
|
nop
|
|
call write_character
|
|
nop
|
|
nop
|
|
call write_space
|
|
nop
|
|
cmp r10d, 0
|
|
nop
|
|
jne main_loop
|
|
|
|
nop
|
|
call write_line_feed
|
|
|
|
nop
|
|
mov eax, 3
|
|
nop
|
|
mov edi, [filaa]
|
|
nop
|
|
syscall
|
|
|
|
nop
|
|
mov eax, 60
|
|
mov edi, 0
|
|
syscall
|
|
|
|
nop
|
|
nop
|
|
nop
|
|
|
|
segment readable writable
|
|
|
|
space db ' '
|
|
line_feed db '\n'
|
|
failure db "> nopfilaa", 10
|
|
digits db "0123456789abcdef"
|
|
filaa dd 0
|
|
bytaa db 0
|