; CIS-77
; M08.ASM
; Demo program of IO.H and IO.ASM 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 up to 10 characters of text: ", 0
TXTENTERED BYTE " You've entered: ", 0
TXTLENGTH BYTE " Number of characters entered: ", 0
INPROMPT BYTE " Please enter an integer: ", 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 12 DUP (?)
dtoa_buffer BYTE 11 DUP (?)
atoa_buffer BYTE 6 DUP (?)
.CODE ; Begin code segment
_main PROC ; Beginning of code
output TXTPROMPT ; Please enter up to 10 characters of text...
input buffer, 12 ; ...read zero to 10 ASCII characters
output TXTENTERED ; ...You've entered...
output buffer ; ...print the input
output ENDL ; new line
szlen buffer ; Calculate length of user input, put result in eax
dtoa dtoa_buffer, eax ; convert 32-bit signed integer to string
output TXTLENGTH ; Number of characters entered...
output dtoa_buffer ; ...print numeric result
output ENDL ; new line
itoa atoa_buffer, ax ; Convert 16-bit signed integer to string
output TXTLENGTH ; Number of characters entered...
output atoa_buffer ; ...print numeric result
output ENDL ; new line
@@:
output INPROMPT ; Please enter an integer...
input buffer, 12 ; ...read zero to 10 ASCII characters
atoi buffer ; convert "[+/-]123" to 2's complement (result in AX)
jno @F ; check overflow flag
output OVERFLOW ; print error message
output ENDL ; new line
jmp @B ; back to the prompt
@@:
itoa atoa_buffer, ax ; Convert 16-bit signed integer to string
output TXTENTERED ; ...You've entered...
output atoa_buffer ; print result
output ENDL ; new line
ret
_main ENDP
END _main ; Marks the end of the module and sets the program entry point label