Prev: 12171 Up: Map Next: 12218
12187: THE 'PREPARE TO ADD' SUBROUTINE
Used by the routine at addition.
This subroutine is the first of four subroutines that are used by the main arithmetic operation routines - subtract, addition, multiply and division.
This particular subroutine prepares a floating-point number for addition, mainly by replacing the sign bit with a true numerical bit 1, and negating the number (two's complement) if it is negative. The exponent is returned in the A register and the first byte is set to 0 for a positive number and 255 for a negative number.
Input
HL Address of the first byte of the number
Output
A Exponent byte
PREP_ADD 12187 LD A,(HL) Transfer the exponent to A.
12188 LD (HL),0 Presume a positive number.
12190 AND A If the number is zero then the preparation is already finished.
12191 RET Z
12192 INC HL Now point to the sign byte.
12193 BIT 7,(HL) Set the zero flag for positive number.
12195 SET 7,(HL) Restore the true numeric bit.
12197 DEC HL Point to the first byte again.
12198 RET Z Positive numbers have been prepared, but negative numbers need to be two's complemented.
12199 PUSH BC Save any earlier exponent.
12200 LD BC,5 There are 5 bytes to be handled.
12203 ADD HL,BC Point one past the last byte.
12204 LD B,C Transfer the 5 to B.
12205 LD C,A Save the exponent in C.
12206 SCF Set carry flag for negation.
NEG_BYTE 12207 DEC HL Point to each byte in turn.
12208 LD A,(HL) Get each byte.
12209 CPL One's complement the byte.
12210 ADC A,0 Add in carry for negation.
12212 LD (HL),A Restore the byte.
12213 DJNZ NEG_BYTE Loop 5 times.
12215 LD A,C Restore the exponent to A.
12216 POP BC Restore any earlier exponent.
12217 RET Finished.
Prev: 12171 Up: Map Next: 12218