home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Shareware BBS: 10 Tools
/
10-Tools.zip
/
wunderki.zip
/
DINT.ASM
< prev
next >
Wrap
Assembly Source File
|
1993-08-16
|
2KB
|
157 lines
; *******************************************************
; * *
; * Turbo Pascal Run-time Library *
; * Integer Binary/Decimal Routines *
; * *
; * Copyright (c) 1988,92 Borland International *
; * *
; *******************************************************
TITLE DINT
INCLUDE SE.ASM
CODE SEGMENT BYTE PUBLIC
ASSUME CS:CODE
; Publics
PUBLIC Int2Str,Str2Int
; Convert integer to string
; In DX:AX = Value
; ES:DI = String end pointer
; Out CX = String length
; ES:DI = String pointer
Int2Str:
MOV CX,DI
MOV SI,10
MOV BX,DX
OR BX,BX
JNS @@1
NEG BX
NEG AX
SBB BX,0
CALL @@1
DEC DI
MOV ES:[DI].b0,'-'
INC CX
RET
@@1: XOR DX,DX
XCHG AX,BX
DIV SI
XCHG AX,BX
DIV SI
ADD DL,'0'
CMP DL,'0'+10
JB @@2
ADD DL,'A'-'0'-10
@@2: DEC DI
MOV ES:[DI],DL
MOV DX,AX
OR DX,BX
JNE @@1
SUB CX,DI
RET
; Convert string to integer
; In CX = String length
; ES:DI = String pointer
; Out DX:AX = Value
; CX = Remaining characters
; ES:DI = Pointer past string
; CF = 1 if error
Str2Int:
XOR AX,AX
XOR DX,DX
XOR SI,SI
JCXZ @@6
CMP BYTE PTR ES:[DI],'+'
JE @@1
CMP BYTE PTR ES:[DI],'-'
JNE @@2
DEC SI
@@1: INC DI
DEC CX
JE @@6
@@2: CMP BYTE PTR ES:[DI],'$'
JE @@7
@@3: MOV BL,ES:[DI]
SUB BL,'0'+10
ADD BL,10
JNC @@4
TEST DH,0F0H
JNE @@6
PUSH BX
SHL AX,1
RCL DX,1
PUSH DX
PUSH AX
SHL AX,1
RCL DX,1
SHL AX,1
RCL DX,1
POP BX
ADD AX,BX
POP BX
ADC DX,BX
POP BX
XOR BH,BH
ADD AX,BX
ADC DX,0
INC DI
LOOP @@3
@@4: MOV BX,AX
OR BX,DX
JE @@5a
OR SI,SI
JNS @@5
NEG DX
NEG AX
SBB DX,0
@@5: XOR SI,DX
JS @@6
@@5a: RET
@@6: STC
RET
@@7: INC DI
DEC CX
JE @@6
@@8: MOV BL,ES:[DI]
CMP BL,'a'
JB @@9
SUB BL,32
@@9: SUB BL,'0'+10
ADD BL,10
JC @@10
SUB BL,7+16
ADD BL,6
JNC @@4
ADD BL,10
@@10: MOV BH,4
@@11: SHL AX,1
RCL DX,1
JC @@6
DEC BH
JNE @@11
OR AL,BL
INC DI
LOOP @@8
OR SI,SI
JNS @@12
NEG DX
NEG AX
SBB DX,0
@@12: CLC
RET
CODE ENDS
END