linux_read_system_call = 0 linux_write_system_call = 1 linux_open_system_call = 2 linux_close_system_call = 3 linux_exit_system_call = 60 standard_input = 0 standard_output = 1 format ELF64 executable 3 segment readable executable ;~section '.text' writable _start: mov [echo_0], text_data ; text); call echo ; echo ( лоопаа: cmp [main_x], 51 jnb лоопааe xor rdx, rdx mov eax, [main_x] mov ebx, 15 idiv rbx cmp edx, 0 jne n3 mov [echo_0], fb call echo jmp n0 n3: xor rdx, rdx mov eax, [main_x] mov ebx, 3 idiv rbx cmp edx, 0 jne n1 mov [echo_0], f call echo jmp n0 n1: xor rdx, rdx mov eax, [main_x] mov ebx, 5 idiv rbx cmp edx, 0 jne n2 mov [echo_0], b call echo jmp n0 n2: mov [echo_0], n call echo n0: inc [main_x] jmp лоопаа лоопааe: ; mov rax, linux_exit_system_call ;
return;; xor rdi, rdi syscall ;~string_length (character * text): ;~natural length = 0; ;~loop (* (text + length++)); ;~return (length);; string_length: ; string_length mov [string_length_length], 0 ; length = 0; mov rax, [string_length_0] ; text loop_0: ; loop_0 cmp byte [rax], 0 ; (* (text + length)) != '\0' je loop_0e inc rax ; text + length inc [string_length_length] ; length++ jmp loop_0 ; if not go loop_0 loop_0e: xor rax, rax mov eax, [string_length_length] ; return (length); ret ; ; ;~echo (character * text): ;~system (linux_write_system_call, standard_output, text, string_length (text)); ;~return;; echo: ; echo ) mov rax, [echo_0] ; | mov [string_length_0], rax ; | call string_length ; | mov rdx, rax ; | string_length (text) mov rsi, [echo_0] ; text mov rdi, standard_output ; standard_output mov rax, linux_write_system_call ; linux_write_system_call syscall ; system ( xor rax, rax ; return;; ret ; segment readable writable ;~section '.data' writable ; variable string_length_length dd 0 ; natural length = 0; main_x dd 1 ; integer x = 0; ; function echo_0 dq 0 ; character * text string_length_0 dq 0 ; character * text ; data text_data db 'Heyo world!', 10, 0 fb db 'fizzbuzz', 10, 0 f db 'fizz', 10, 0 b db 'buzz', 10, 0 n db 'number', 10, 0