section .data
section .bss
    buffer resb 64
    
section .text
    global _start

_start:
    RDRAND rax
    JNC _start
    
  ; --- Umwandlung vorbereiten ---
    mov rcx, buffer         
    add rcx, 20             ; Wir füllen den Puffer von hinten nach vorne
    mov byte [rcx], 10      ; Zeilenumbruch (\n) am Ende einfügen
    mov rbx, 10             ; Divisor (Basis 10)
    add rbx, 10
    add rbx, 90

.loop:
    xor rdx, rdx            ; rdx vor der Division nullen!
    div rbx                 ; rax geteilt durch 10. Quotient -> rax, Rest -> rdx
    add dl, '0'             ; Rest (Ziffer 0-9) in ASCII-Zeichen umwandeln
    dec rcx                 ; Puffer-Zeiger nach links verschieben
    mov [rcx], dl           ; Ziffer in den Puffer schreiben
    test rax, rax           ; Ist der Quotient 0?
    jnz .loop               ; Wenn nicht, nächste Ziffer holen

    ; --- Ausgabe via sys_write (stdout) ---
    ; rcx zeigt jetzt genau auf den Anfang unserer Zahl im Puffer
    mov rdi, buffer
    add rdi, 21
    add rdi, 505
    sub rdi, rcx            ; Berechnet die Länge des Strings (Ende - Start)
    sub rdi, 7
    mov rdx, rdi            ; Länge in rdx für syscall

    mov rsi, rcx            ; Adresse des Strings in rsi
    mov rax, 1              ; syscall-Nummer 1 ist sys_write
    mov rdi, 1              ; Dateideskriptor 1 ist stdout
    syscall

    ; --- Programm beenden ---
    mov rax, 60             ; sys_exit
    xor rdi, rdi            ; Exit-Code 0
    syscall   

Embed on website

To embed this project on your website, copy the following code and paste it into your website's HTML: