Category : Assembly Language Source Code
Archive   : RHSTDLIB.ZIP
Filename : LSIZE.ASM
assume cs:stdlib
;
; LSize- Returns the number of print positions required by an integer value.
; On Input:
; DX:AX- Integer to get the size of.
;
; On Output:
; AX: Digit count for the integer.
;
public sl_LSize
sl_LSize proc far
push dx
cmp dx, 0
jge LSize2
;
; Negate DX:AX
;
neg dx
neg ax
sbb dx, 0
;
call GetULSize
inc ax
pop dx
ret
;
LSize2: call GetULSize
pop dx
ret
sl_LSize endp
;
; USize- Same as above, except for unsigned numbers.
;
public sl_ULSize
sl_ULSize proc far
call GetULSize
ret
sl_ULSize endp
;
; GetUSize- Does the actual size comparison.
;
GetULSize proc near
cmp dx, 0
jne GUSA
;
cmp ax, 10
ja GUS1
mov ax, 1
ret
;
GUS1: cmp ax, 100
ja GUS2
mov ax, 2
ret
;
GUS2: cmp ax, 1000
ja GUS3
mov ax, 3
ret
GUS3: cmp ax, 10000
ja GUS4
mov ax, 4
ret
;
GUS4: mov ax, 5
ret
;
GUSA: sub ax, 86a0h ;Low (100,000)
sbb dx, 1 ;High(100,000)
jb GUS5
sub ax, 0bba0h ;Low (900,000)
sbb dx, 0dh ;High(900,000)
jb GUS6
sub ax, 5440h ;low (9,000,000)
sbb dx, 89h ;high(9,000,000)
jb GUS7
sub ax, 4a80h ;low (90,000,000)
sbb dx, 55dh ;high(90,000,000)
jb GUS8
sub ax, 0e900h ;low (900,000,000)
sbb dx, 35a4h ;high(900,000,000)
jb GUS9
mov ax, 10
ret
;
GUS5: mov ax, 5
ret
;
GUS6: mov ax, 6
ret
;
GUS7: mov ax, 7
ret
;
GUS8: mov ax, 8
ret
;
GUS9: mov ax, 9
ret
;
GetULSize endp
;
stdlib ends
end
Very nice! Thank you for this wonderful archive. I wonder why I found it only now. Long live the BBS file archives!
This is so awesome! 😀 I’d be cool if you could download an entire archive of this at once, though.
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/