; CIS-261
; ATOI_ITOA_DEMO.ASM
; ATOI and ITOA usage demo program
; @topic W080091 IO.H and IO.ASM usage demo
; @brief <a href="http://www.c-jump.com/bcc/c261c/MLabs/M08console/M08console.html" target="_blank">Console Input/Output</a> ATOI and ITOA usage
; 

.386                ; Tells MASM to use Intel 80386 instruction set.
.MODEL FLAT         ; Flat memory model
option casemap:none ; Treat labels as case-sensitive

INCLUDE IO.H        ; header file for input/output

.CONST          ; Constant data segment
    TXTPROMPT   BYTE    "Please enter a number between -32768 and +32767: ", 0
    TXTENTERED  BYTE    "You've entered: ", 0
    ENDL        BYTE    13, 10, 0
    OVERFLOW    BYTE    "*** Bad number, please try again!", 0

.STACK 100h     ; (default is 1-kilobyte stack)

.DATA           ; Begin initialized data segment
    buffer      BYTE    8 DUP (?), 0

.CODE           ; Begin code segment
_main PROC      ; Beginning of code

@@:
    output  TXTPROMPT        ; Please enter a number...
    input   buffer, 8        ; Read zero to 6 ASCII characters
    atoi    buffer           ; Convert string to 2's complement number
    jno     @F               ; Check the overflow flag
    ; Handle input error:
    output  OVERFLOW         ; print error message
    output  ENDL             ; print new line
    jmp     @B               ; back to the prompt
@@:
    ; Success: result of conversion is in AX
    itoa    buffer, ax       ; Convert 16-bit signed integer to string
    output  TXTENTERED       ; You've entered...
    output  buffer           ; print result
    output  ENDL             ; print new line
 
    ret
    
_main ENDP
END _main        ; Marks the end of the module and sets the program entry point label
