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