home *** CD-ROM | disk | FTP | other *** search
- ;
- ; SYSLIB Module Name: SEVAL3
- ; Author: Richard Conn
- ; SYSLIB Version Number: 2.0
- ; Module Version Number: 1.0
- ; Module Entry Points:
- ; EVAL8
- ; Module External References:
- ; None
- ;
-
- ;
- ; EVAL8 --
- ; Convert the string of ASCII octal digits pointed to by HL
- ; into a binary value; string is converted until invalid digit is
- ; encountered.
- ; On return, HL points to error character, DE=value, A=E (low
- ; order 8 bits of value). BC not affected.
- ;
-
- EVAL8::
- PUSH B ; SAVE BC
- LXI D,0 ; SET DE=0 INITIALLY
-
- ; Get next digit and check for '0' - '9'
- E8L:
- MOV A,M ; GET BYTE
- SUI '0' ; CHECK FOR RANGE
- JC DONE
- CPI 8
- JNC DONE
-
- PUSH PSW ; SAVE VALUE
-
- ; Multiply DE by 8
- MUL8:
- PUSH H ; SAVE HL
- LXI H,0 ; ACC=0
- MVI B,8 ; 8 LOOPS
- MUL8L:
- DAD D ; HL=HL+DE
- DCR B ; COUNT DOWN
- JNZ MUL8L
- MOV D,H ; NEW DE
- MOV E,L
- POP H ; RESTORE HL
-
- ; Add in A
- POP PSW ; GET LATEST DIGIT
- ADD E ; A=A+E
- MOV E,A
- MOV A,D ; ADD TO D IF NECESSARY
- ACI 0
-
- ; Continue
- INX H ; PT TO NEXT CHARACTER
- JMP E8L
-
- ; Done -- Result already in DE; Set A=E
- DONE:
- MOV A,E ; A=E
- POP B ; RESTORE BC
-
- RET
-
- END
-