|
- 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 ; <main> 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
|