home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Shareware Overload
/
ShartewareOverload.cdr
/
progm
/
dpl.zip
/
_DEC.D
< prev
next >
Wrap
Text File
|
1988-07-11
|
2KB
|
68 lines
; Doug's Programming Language -- DPL, Version 2.22
; Copyright (c) 1988 Douglas S. Cody, All rights reserved.
;--------------------------------
; D E C O D E - CONVERT A SIGNED DECIMAL REPRESENATION
; STRING TO SIGNED INTEGER
;
; Entry conditions:
; SI points to the source string
; Exit conditions:
; AX holds the value
; SI points to the last character
; STATUS = 1, Bad character encountered
; STATUS = 0, End of string encountered
;
SUBPGM _DEC
BEGIN _DEC
MOV [STATUS],00 ; CLEAR THE RETURN STATUS
SUB CX,CX
SUB AX,AX
CMP BYTE PTR [SI],'-' ; CHECK FOR SIGN, NEGATIVE?
JNE @DE_05 ; NO
INC SI ; YES, MOVE PAST THE CHAR
MOV AL,0FFH ; SETUP A NEGATIVE FLAG
;
@DE_05:
PUSH AX
SUB AX,AX
MOV DX,3009H ; DH='0',DL=09
;
@DE_10:
MOV CL,[SI] ; GET THE CHARACTER
OR CL,CL ; END OF STRING?
JZ @DE_15 ; YES, CONTINUE ON...
SUB CL,DH ; LT 0?
JL @DE_12 ; YES, EXIT
CMP CL,DL ; GT 9?
JG @DE_12 ; YES, EXIT
SHL AX,1 ; * 2
MOV BX,AX
SHL AX,1 ; * 4
SHL AX,1 ; * 8
ADD AX,BX ; * 10
ADD AX,CX ; + NEW DECIMAL LOCATION
INC SI
JMP SHORT @DE_10 ; CONTINUE TILL DONE...
;
@DE_12:
POP BX ; FLUSH THE STACK
CMP CL,0FDH ; WAS IT A NEGATIVE SIGN?
JZ @DE_16 ; YES, EXIT GOOD
XOR AX,AX ; RETURN BAD
MOV [STATUS],01
RET
;
@DE_15:
POP BX ; GET THE NEGATIVE FLAG
OR BX,BX
JZ @DE_17
;
@DE_16:
NEG AX
;
@DE_17:
RETURN
;
ENDPGM _DEC
;