104 lines
1.5 KiB
ArmAsm
104 lines
1.5 KiB
ArmAsm
![]() |
.global _start
|
||
|
.intel_syntax noprefix
|
||
|
.data
|
||
|
input:
|
||
|
.byte 0x00
|
||
|
new_line_collector:
|
||
|
.byte 0x00
|
||
|
.text
|
||
|
_start:
|
||
|
//hello world
|
||
|
lea rsi, [text_hello_world]
|
||
|
mov rdx, 13
|
||
|
call printf
|
||
|
|
||
|
lea rsi, [text_how_far_do_you_want_to_go]
|
||
|
mov rdx, 28
|
||
|
call printf
|
||
|
|
||
|
lea rsi, [input]
|
||
|
mov rdx, 1
|
||
|
call scanf
|
||
|
sub input, byte ptr '0'
|
||
|
mov r8b, input
|
||
|
xor r9b, r9b
|
||
|
|
||
|
upper:
|
||
|
cmp r9b, r8b
|
||
|
jae exit
|
||
|
mov r10b, r9b
|
||
|
add r10b, r10b
|
||
|
add r10b, 1
|
||
|
call print_stars_of_the_line
|
||
|
call print_new_line
|
||
|
inc r9b
|
||
|
jmp upper
|
||
|
|
||
|
//exit
|
||
|
exit:
|
||
|
lea rsi, [text_goodbye]
|
||
|
mov rdx, 9
|
||
|
call printf
|
||
|
mov rax, 60
|
||
|
xor rdi, rdi
|
||
|
syscall
|
||
|
|
||
|
text_hello_world:
|
||
|
.asciz "Hello World\n"
|
||
|
text_how_far_do_you_want_to_go:
|
||
|
.asciz "How Far Do You Want to Go = "
|
||
|
text_star:
|
||
|
.asciz "*"
|
||
|
text_space:
|
||
|
.asciz " "
|
||
|
text_new_line:
|
||
|
.asciz "\n"
|
||
|
text_goodbye:
|
||
|
.asciz "\nGoodbye\n"
|
||
|
print_stars_of_the_line:
|
||
|
mov r11b, 0
|
||
|
cmp r11b, r10b
|
||
|
jae returner
|
||
|
call print_star
|
||
|
dec r10b
|
||
|
jmp print_stars_of_the_line
|
||
|
|
||
|
returner:
|
||
|
xor rdi, rdi
|
||
|
ret
|
||
|
print_star:
|
||
|
lea rsi, [text_star]
|
||
|
mov rdx, 1
|
||
|
call printf
|
||
|
xor rdi, rdi
|
||
|
ret
|
||
|
print_space:
|
||
|
lea rsi, [text_space]
|
||
|
mov rdx, 1
|
||
|
call printf
|
||
|
xor rdi, rdi
|
||
|
ret
|
||
|
print_new_line:
|
||
|
lea rsi, [text_new_line]
|
||
|
mov rdx, 1
|
||
|
call printf
|
||
|
xor rdi, rdi
|
||
|
ret
|
||
|
printf:
|
||
|
mov rax, 1
|
||
|
mov rdi, 1
|
||
|
syscall
|
||
|
xor rdi, rdi
|
||
|
ret
|
||
|
scanf:
|
||
|
mov rax, 0
|
||
|
mov rdi, 0
|
||
|
syscall
|
||
|
mov rax, 0
|
||
|
mov rdi, 0
|
||
|
mov rsi, [new_line_collector]
|
||
|
mov rdx, 1
|
||
|
syscall
|
||
|
xor rdi, rdi
|
||
|
ret
|