%include "CONSTANTS.h" section .data phrase: db `Hello world!`,0 strFmt: db `\"%s\"\n`,0 charFmt: db `\'%c\'\n`,0 section .bss esarhp: resb 100 section .text global main main: ; lcv (i) will be r12 ; i = 0 mov r12, 0; ; load phrase[i] into ra PushLoop: ; while phrase[i] != 0 mov rax, 0 mov al, byte [phrase + r12] cmp rax, 0 je .done ; s.push(phrase[i]) push rax mov rdi, charFmt mov rsi, rax call CallPrintf ; i++ inc r12 jmp PushLoop .done: mov r8, esarhp MoveLoop: ; store the reverse phrase in esarhp cmp r12, 0 je .done pop rax mov [r8], al mov rdi, charFmt mov rsi, rax call CallPrintf inc r8 dec r12 jmp MoveLoop .done: mov byte [r8], 0 mov rdi, strFmt mov rsi, phrase call CallPrintf mov rdi, strFmt mov rsi, esarhp call CallPrintf jmp Exit