; 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