readint.asm

URL: https://mirkwood.cs.edinboro.edu/~bennett/class/cmsc3100/spring2026/notes/begin/code/readint.asm
 
%include "CONSTANTS.h"

section .data
     theInt: dq 0
     prompt: db `enter an integer => `,0
     strPrompt: db `enter a Phrase => `,0
     intInput: db `%d`,0
     intOutput: db `The number is %d (%d)\n`,0
     strInput: db `%s`,0
     strOutput: db `The string is "%s"\n`,0
     charOutput: db `%c\n`,0

section .bss
     BUFSIZE EQU 100
     anInt: resq 1  
     aStr: resb BUFSIZE  
     anInt2: resq 1  

section .text

global main
main:
    ; prompt for an integer and read it in
    ; cout << "Enter an integer"
    mov rdi, prompt
    call CallPrintf

    ; cin >> integer
    mov rdi, intInput
    mov rsi, anInt
    call CallScanf


    ; anInt2 = anInt
    mov rax, [anInt]
    mov [anInt2], rax

    ; cout << anInt
    mov rdi, intOutput
    mov rsi, [anInt]
    mov rdx, 1
    call CallPrintf

    ; cout << anInt2
    mov rdi, intOutput
    mov rsi, [anInt2]
    mov rdx, 2
    call CallPrintf


    ; cout << "Enter a string"
    mov rdi, strPrompt
    call CallPrintf
    mov rdi, 0
    call Flush
;
   ; buffer overflow, danger will robinson, danger will robinson
     ; cin >> string
;    mov rdi, strInput
;    mov rsi, aStr
;    call CallScanf
;

    ; read(string, 100)
    mov rax, SYS_READ
    mov rdi, STDIN
    mov rsi, aStr
    mov rdx, BUFSIZE
    syscall

    mov byte [aStr + rax -1], 0 

    ; store string size in r13
    mov r13, rax
    dec r13
    ; use r12 as my index
    mov r12, 0

loopTop:

    cmp r12, r13
    je outOfLoop

    mov rdi, charOutput
    mov rsi, [aStr +r12]
    call CallPrintf

    inc r12

    jmp loopTop

outOfLoop:

    ;cout << aStr
    mov rdi, strOutput
    mov rsi, aStr
    call CallPrintf

    ; cout << anInt
    mov rdi, intOutput
    mov rsi, [anInt]
    mov rdx, 1
    call CallPrintf

    ; cout << anInt
    mov rdi, intOutput
    mov rsi, [anInt2]
    mov rdx, 2
    call CallPrintf

    jmp Exit