summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicholas Tay <nick@windblume.net>2023-10-22 18:52:36 +1100
committerNicholas Tay <nick@windblume.net>2023-10-22 18:52:36 +1100
commit0f70ee2fc5195deeb6c3d97b57e0c6ee40f421bb (patch)
treed997ec566e934baff34a47a13dd843057e5a5706
downloadpasmgen-0f70ee2fc5195deeb6c3d97b57e0c6ee40f421bb.tar.gz
pasmgen-0f70ee2fc5195deeb6c3d97b57e0c6ee40f421bb.tar.bz2
pasmgen-0f70ee2fc5195deeb6c3d97b57e0c6ee40f421bb.zip
Initial working 3/2/3 passgen in fasm
-rw-r--r--pasmgen.asm78
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