classReverse.asm

URL: https://mirkwood.cs.edinboro.edu/~bennett/class/cmsc3100/spring2026/notes/functions/code/classReverse.asm
 

%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