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
To embed this project on your website, copy the following code and paste it into your website's HTML: