xiranda/test.asm

114 lines
3.5 KiB
NASM
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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