diff options
author | Nicholas Tay <nick@windblume.net> | 2023-10-22 18:52:36 +1100 |
---|---|---|
committer | Nicholas Tay <nick@windblume.net> | 2023-10-22 18:52:36 +1100 |
commit | 0f70ee2fc5195deeb6c3d97b57e0c6ee40f421bb (patch) | |
tree | d997ec566e934baff34a47a13dd843057e5a5706 | |
download | pasmgen-0f70ee2fc5195deeb6c3d97b57e0c6ee40f421bb.tar.gz pasmgen-0f70ee2fc5195deeb6c3d97b57e0c6ee40f421bb.tar.bz2 pasmgen-0f70ee2fc5195deeb6c3d97b57e0c6ee40f421bb.zip |
Initial working 3/2/3 passgen in fasm
-rw-r--r-- | pasmgen.asm | 78 |
1 files changed, 78 insertions, 0 deletions
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 |