sus-regex/meow.s

134 lines
1.7 KiB
ArmAsm
Raw Normal View History

2024-04-03 15:18:26 +03:00
.globl _start
.type _start, @function
.globl entry
.type entry, @function
_start:
pop %rax
mov %rax,argc(%rip)
mov %rax,%rdi
pop %rax
mov %rax,argv(%rip)
cmp $1,%rdi
2024-04-04 20:18:10 +03:00
jg _start_endif
2024-04-03 15:18:26 +03:00
mov $1,%rdi
call usage
jmp _exit
2024-04-04 20:18:10 +03:00
_start_endif:
2024-04-03 15:18:26 +03:00
mov $0,%rdi
jmp _exit
usage:
lea help0(%rip),%rdi
mov $help0l,%rsi
call write
2024-04-04 09:23:46 +03:00
mov argv(%rip),%rdi
2024-04-03 15:18:26 +03:00
push %rdi
call strlen
pop %rdi
mov %rax,%rsi
call write
lea help1(%rip),%rdi
mov $help1l,%rsi
call write
ret
# rdi - buf
# -> rax - len
strlen:
2024-04-04 07:22:41 +03:00
mov %rdi,%rsi
xor %rax,%rax
repne scasb
sub %rsi,%rdi
2024-04-03 15:18:26 +03:00
mov %rdi,%rax
ret
# rdi - buf
# rsi - len
write:
push %rdi
push %rsi
pop %rdx
pop %rsi
mov $1,%rax
mov $1,%rdi
syscall
ret
2024-04-04 20:18:10 +03:00
2024-04-03 15:18:26 +03:00
help0:
.ascii "Usage: "
.set help0l, .-help0
help1:
.ascii " regex0 [regex1 ...]\nstdout: NUL-separated list of matching strings\n"
.set help1l, .-help1
2024-04-04 20:18:10 +03:00
# rdi - exit code
2024-04-03 15:18:26 +03:00
_exit:
mov $0x3c,%rax
syscall
ret
2024-04-04 20:18:10 +03:00
2024-04-05 10:21:27 +03:00
.include "target/charjmpt.s"
# rdi - where
# rsi - char
#parse_...:
parse_self:
xor %rax,%rax
ret
parse_exit:
mov $1,%rax
ret
# rdi - regex
# rsi - callback
# rdx - cb data
2024-04-03 15:18:26 +03:00
entry:
2024-04-05 10:21:27 +03:00
push %rbp
mov %rsp,%rbp
sub $48,%rsp
mov %rsi,-8(%rbp)
mov %rdx,-16(%rbp)
mov %rdi,-24(%rbp)
2024-04-04 20:18:10 +03:00
entry_parse_begin:
2024-04-05 10:21:27 +03:00
movzbl (%rdi),%ecx
lea charjmpt(%rip),%r11
movzx %cl,%r10
shl $2,%r10
add %r10,%r11
movsxd (%r11),%r11
charjmpt_prej:
lea charjmpt_prej(%rip),%r10
add %r10,%r11
mov %rdi,-32(%rbp)
call *%r11
test %rax,%rax
2024-04-04 20:18:10 +03:00
jnz entry_parse_end
2024-04-05 10:21:27 +03:00
mov -32(%rbp),%rdi
2024-04-04 20:18:10 +03:00
inc %rdi
2024-04-05 10:21:27 +03:00
jmp entry_parse_begin
2024-04-04 20:18:10 +03:00
entry_parse_end:
2024-04-05 10:21:27 +03:00
mov %rdi,%rsi
mov -24(%rbp),%rdi
sub %rdi,%rsi
inc %rsi
mov -16(%rbp),%rdx
mov -8(%rbp),%r9
entry_pre_call:
call *%r9
mov %rbp,%rsp
pop %rbp
2024-04-03 15:18:26 +03:00
ret
.bss
argc:
.zero 8
argv:
.zero 8