; Collection of Assembly macros to make programming in assembly easier ; Include it with "%include 'macros.asm' section .data newline db 0xA,0x0 ; Macro to calculate string length and print to stdout %macro printStr 1 ;; Store previous data push rax push rbx push rcx push rdx push rdi push rsi ;; Move first arg to rax mov rax, %1 ;; push rax to stack push rax ;; move 0 to rbx for loop counter mov rbx,0 ;; counts letters %%printLoop: inc rax inc rbx mov cl,[rax] cmp cl,0 jne %%printLoop ;; sys_write mov rax,1 mov rdi,1 pop rsi mov rdx,rbx syscall ;; pop values back to registers pop rsi pop rdi pop rdx pop rcx pop rbx pop rax %endmacro %macro printStrLF 1 push rax mov rax,%1 printStr rax printStr newline pop rax %endmacro %macro printInt 1 push rax push rcx push rdx push rsi mov rax,%1 mov rcx, 0 %%divideLoop: inc rcx mov rdx, 0 mov rsi, 10 idiv rsi add rdx, 48 push rdx cmp rax, 0 jnz %%divideLoop %%printLoop: dec rcx mov rax, rsp printStr rax pop rax cmp rcx, 0 jnz %%printLoop pop rsi pop rdx pop rcx pop rax %endmacro %macro printIntLF 1 push rax mov rax, %1 printInt rax printStr newline pop rax %endmacro %macro exit 1 mov rax,60 mov rdi,%1 syscall %endmacro