Category : Assembly Language Source Code
Archive   : ASM_SUBR.ZIP
Filename : SGND16IN

 
Output of file : SGND16IN contained in archive : ASM_SUBR.ZIP
;-------------------------sgnd16in routine begins--------------------------+
; from BLUEBOOK OF ASSEMBLY ROUTINES FOR IBM PC & XT.
; page : 78
;
; NAME SGND16IN
; ROUTINE FOR Conversion From ASCII Signed Decimal To Binary
;
; FUNCTION: This routine accepts a signed decimal number from the std
; input device and converts it to internal signed two's complement 16-bit
; binary form.
;
; INPUT: Individual digits of the signed decimal number are received in
; ASCII through a call to a std input routine. The sign (+/-) is optional
; and the valid digits are 0 through 9. An ASCII code other than that for
; the sign and the valid digits terminates the routine.
;
; OUTPUT: A signed two's complement 16-bit binary number is returned in the
; DX register.
;
; REGISTERS USED: AX and CX are modified. DX is used for output.
; SEGMENTS REFERENCED: None
; ROUTINES CALLED: STDIN
; SPECIAL NOTES: None
;
; ROUTINE TO CONVERT FROM ASCII SIGNED DECIMAL TO INTERNAL TWO'S COMPLEMENT
; 16-BIT BINARY.
;
sgnd16in proc far
;
mov dx,0 ; initialize dx
mov ch,0 ; sign flag
;
call stdin ; look for sign
cmp al,'-' ; was it minus ?
jz sgnd16in1 ; yes... store it
cmp al,'+' ; was it a plus ?
jz sgnd16in2 ; ignore pluses
jmp sgnd16in3 ; anything else is a number
;
sgnd16in1:
; set sign as a negative
mov ch,0FFh ; 0FFh is -1 in two's complement
;
sgnd16in2
; normal loop
call stdin ; receive a digit in AL
;
sgnd16in3:
; already have a digit
sub al,30h ; reduce from ASCII
jl sgnd16in4 ; check if too low
cmp al,9
jg sgnd16in4 ; check if too high
cbw ; convert to word
;
push cx ; save sign
push ax ; save digit
mov ax,dx
mov cx,10 ; multiplier of ten
mul cx ; multiply
mov dx,ax ; result in dx
pop ax ; restore digit
;
add dx,ax ; add in digit
pop cx ; restore count
jmp sgnd16in2
;
sgnd16in4:
; resolve the sign
cmp ch,0 ; is it there ?
je sgnd16in5 ; no... skip it
;
neg dx ; was negative
;
sgnd16in5:
;
ret ; return
;
sgnd16in endp
;-------------------------sgnd16in routine ends---------------------------+


  3 Responses to “Category : Assembly Language Source Code
Archive   : ASM_SUBR.ZIP
Filename : SGND16IN

  1. Very nice! Thank you for this wonderful archive. I wonder why I found it only now. Long live the BBS file archives!

  2. This is so awesome! 😀 I’d be cool if you could download an entire archive of this at once, though.

  3. But one thing that puzzles me is the “mtswslnkmcjklsdlsbdmMICROSOFT” string. There is an article about it here. It is definitely worth a read: http://www.os2museum.com/wp/mtswslnk/