From 0f70ee2fc5195deeb6c3d97b57e0c6ee40f421bb Mon Sep 17 00:00:00 2001 From: Nicholas Tay Date: Sun, 22 Oct 2023 18:52:36 +1100 Subject: Initial working 3/2/3 passgen in fasm --- pasmgen.asm | 78 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 pasmgen.asm diff --git a/pasmgen.asm b/pasmgen.asm new file mode 100644 index 0000000..bbd4c37 --- /dev/null +++ b/pasmgen.asm @@ -0,0 +1,78 @@ +format ELF64 executable + +macro genclass class, class_len, caps +{ + ;; Generate 16 bits (smallest) of randomness from the cpu + rdrand ax + + ;; Modulo into len range to index in + xor rdx, rdx + mov rbx, class_len + div bx + + ;; Save output letter into out_buf, bump rcx + add rdx, class + mov rdx, [rdx] + if caps eq 1 + sub rdx, 32 + end if + mov [rcx], rdx + inc rcx + + inc rsi +} + +macro triplet +{ + genclass consonants, consonants_len + genclass vowels, vowels_len + genclass consonants, consonants_len +} + +segment readable executable + +entry main +main: + ;; Store which output byte we're up to in rcx + mov rcx, out_buf + ;; Store chars generated in rsi + xor rsi, rsi + + genclass consonants, consonants_len, 1 + genclass vowels, vowels_len + genclass consonants, consonants_len + triplet + triplet + genclass symbols, symbols_len + genclass symbols, symbols_len + genclass numbers, numbers_len + genclass numbers, numbers_len + genclass numbers, numbers_len + + mov [rcx], word 10 + inc rsi + + ;; Write + mov rdi, 1 ;; stdout + mov rdx, rsi + mov rsi, out_buf + mov rax, 0x01 + syscall + + ;; Exit (code 0) + mov rdi, 0 + mov rax, 0x3c + syscall + +segment readable writeable + +numbers db "0123456789" +numbers_len = $ - numbers +vowels db "aeiou" +vowels_len = $ - vowels +consonants db "bcdfghjklmnpqrstvwxyz" +consonants_len = $ - consonants +symbols db "!@#$%&()-=_+[]{}\\|;<>/?." +symbols_len = $ - symbols + +out_buf rb 32 -- cgit