50 lines
744 B
ArmAsm
50 lines
744 B
ArmAsm
%define DEF_BUFFER_LEN 4096
|
|
%define INPUT_LENGTH 64
|
|
|
|
; rax -- syscall
|
|
|
|
; type widths
|
|
|
|
section .data
|
|
message: db "Hello World!", 0xA, 0 ; hello
|
|
message_length: equ $-message
|
|
|
|
section .bss
|
|
arr: resb DEF_BUFFER_LEN
|
|
|
|
section .text
|
|
global _start
|
|
|
|
print_string:
|
|
push rbp
|
|
push rdx
|
|
mov rbp, rsp ; set up stack frame
|
|
|
|
mov rax, 1 ; sys_write
|
|
|
|
pop rdx
|
|
pop rbp
|
|
|
|
exit:
|
|
mov rax, 60
|
|
syscall
|
|
|
|
strlen:
|
|
push rcx
|
|
xor rcx, rcx
|
|
.loop:
|
|
cmp byte [rdi + rcx], 0
|
|
jz .done
|
|
inc rcx
|
|
jmp .loop
|
|
.done:
|
|
mov rax, rcx
|
|
pop rcx
|
|
ret
|
|
|
|
_start:
|
|
mov rdi, message ; prepare first arg -> string addr to rdi
|
|
call strlen
|
|
mov rdi, rax
|
|
call exit
|