; stdio.asm MASM version 5.1
; Standard Input and Output Library
; Copyright(c) 1994 by Jackie Su.
.286
.model small
.data
public _numstr, _tonum, _ascii, _scan
.data
_numstr db 80 dup(0)
_tonum dw 0
_ascii db 0
_scan db 0
.code
public _clrscr, _gotoxy, _getvideomode, _getkey
public _printstr, _printchar, _printchar, _printline, _prnnewline
public _printint, _printhex, _printbin
public _itoa, _htoa, _btoa
public _atoi, _atoh
public _inputstr
public _fopen, _fclose, _fread, _fwrite, _fseek
public _fcreate
.code
_clrscr proc
pusha
mov al,0
mov bh,07H
mov cx,0
mov dh,24
mov dl,79
mov ah,06H
int 10H
mov dx,0
mov bh,0
mov ah,02H
int 10H
popa
ret
_clrscr endp
_gotoxy proc
push ax
push bx
dec dl
dec dh
mov bh,0
int 10H
pop bx
pop ax
ret
_gotoxy endp
_getvideomode proc
push bx
mov ah,0fH
int 10H
pop bx
ret
_getvideomode endp
_getkey proc
push ax
mov ah,0
int 16H
mov _ascii,al
mov _scan,ah
pop ax
ret
_getkey endp
_printstr proc
push ax
mov ah,09H
int 21H
pop ax
ret
_printstr endp
_printchar proc
push ax
mov ah,02H
int 21H
pop ax
ret
_printchar endp
_printline proc
push ax
mov ah,09H
int 21H
call _prnnewline
pop ax
ret
_printline endp
_prnnewline proc
push dx
mov dl,13
call _printchar
mov dl,10
call _printchar
pop dx
ret
_prnnewline endp
_itoa proc
pusha
mov cx,0
mov bx,10
@@divide:
mov dx,0
div bx
push dx
inc cx
cmp ax,0
jnz @@divide
lea bx,_numstr
@@output:
pop ax
add al,48
mov [bx],al
inc bx
loop @@output
mov byte ptr [bx],'$'
popa
ret
_itoa endp
_htoa proc
pusha
mov cx,4
@@convert:
mov dx,ax
and dx,000fH
push dx
shr ax,4
loop @@convert
mov cx,4
lea bx,_numstr
@@output2:
pop ax
cmp al,10
jae @@hex2
add al,48
jmp @@out2
@@hex2:
add al,55
@@out2:
mov [bx],al
inc bx
loop @@output2
mov byte ptr [bx],'$'
popa
ret
_htoa endp
_btoa proc
pusha
mov cx,16
@@convert3:
mov dx,ax
and dx,0001H
push dx
shr ax,1
loop @@convert3
mov cx,16
lea bx,_numstr
@@output3:
pop ax
add al,48
mov [bx],al
inc bx
loop @@output3
mov byte ptr [bx],'$'
popa
ret
_btoa endp
_atoi proc
pusha
mov bx,dx
mov di,0
mov si,0
mov ax,0
mov _tonum,0
cmp byte ptr [bx],'-'
jne @@getchar1
mov di,1
inc bx
@@getchar1:
mov al,[bx]
cmp al,'$'
je @@getok1
sub al,'0'
push ax
inc bx
inc si
jmp @@getchar1
@@getok1:
cmp si,0
jz @@exit1
mov cx,1
mov bx,10
@@multipli:
pop ax
mul cx
add _tonum,ax
mov ax,cx
mul bx
mov cx,ax
dec si
jnz @@multipli
cmp di,0
jz @@exit1
neg _tonum
@@exit1:
popa
ret
_atoi endp
_atoh proc
pusha
mov bx,dx
mov si,0
mov ax,0
mov _tonum,0
@@skip0:
cmp byte ptr [bx],'0'
jne @@getchar2
inc bx
jmp @@skip0
@@getchar2:
mov al,[bx]
cmp al,'$'
je @@getok2
cmp al,'A'
jae @@hex0
sub al,48
jmp @@hexok0
@@hex0:
cmp al,'a'
jae @@hex1
sub al,55
jmp @@hexok0
@@hex1:
sub al,87
@@hexok0:
push ax
inc bx
inc si
jmp @@getchar2
@@getok2:
cmp si,0
jz @@exit2
mov cx,1
mov bx,16
@@multipli1:
pop ax
mul cx
add _tonum,ax
mov ax,cx
mul bx
mov cx,ax
dec si
jnz @@multipli1
@@exit2:
popa
ret
_atoh endp
_printint proc
push dx
call _itoa
lea dx,_numstr
call _printstr
pop dx
ret
_printint endp
_printhex proc
push dx
call _htoa
lea dx,_numstr
call _printstr
pop dx
ret
_printhex endp
_printbin proc
push dx
call _btoa
lea dx,_numstr
call _printstr
pop dx
ret
_printbin endp
_inputstr proc
pusha
mov ah,0aH
int 21H
mov bx,dx
mov dx,0
inc bx
mov dl,[bx]
add bx,dx
inc bx
mov byte ptr[bx],'$'
popa
ret
_inputstr endp
_fopen proc
mov ah,03dH
int 21H
ret
_fopen endp
_fcreate proc
mov cx,0
mov ah,03cH
int 21H
ret
_fcreate endp
_fclose proc
push ax
mov ah,03eH
int 21H
pop ax
ret
_fclose endp
_fread proc
mov ah,03fH
int 21H
ret
_fread endp
_fwrite proc
mov ah,040H
int 21H
ret
_fwrite endp
_fseek proc
mov ah,042H
int 21H
ret
_fseek endp
end
; input.asm
.286
.model small
.stack
.data
demo db 'INPUT program Version 1.0 Copyright(c) 1994 by Brent Su.$'
prompt db 'input your name : $'
hello db 'Hello ! $'
strlen db 0
strsize db 0
string db 256 dup(0)
; Assembly Function
.code
clrscr proc
pusha
mov al,0
mov bh,07H
mov cx,0
mov dh,24
mov dl,79
mov ah,06H
int 10H
mov dx,0
mov bh,0
mov ah,02H
int 10H
popa
ret
clrscr endp
printstr proc
push ax
mov ah,09H
int 21H
pop ax
ret
printstr endp
printchar proc
push ax
mov ah,02H
int 21H
pop ax
ret
printchar endp
printline proc
pusha
mov ah,09H
int 21H
mov dl,10
call printchar
mov dl,13
call printchar
popa
ret
printline endp
prnnewline proc
push dx
mov dl,10
call printchar
mov dl,13
call printchar
pop dx
ret
prnnewline endp
inputstr proc
pusha
mov ah,0aH
int 21H
mov bx,dx
mov dx,0
inc bx
mov dl,[bx]
add bx,dx
inc bx
mov byte ptr[bx],'$'
popa
ret
inputstr endp
; main program
.code
start:
mov ax,@data
mov ds,ax
call clrscr
lea dx,demo
call printline
lea dx,prompt
call printstr
mov strlen,20
lea dx,strlen
call inputstr
call prnnewline
lea dx,hello
call printstr
lea dx,string
call printline
mov ax,4c00H
int 21H
end start