Input Floating-point registers contain the two numbers to be added. Output Accumulator contains accumulator + operand. Description Does a floating-point add on the accumulator and operand registers. When adding two numbers of equal exponent, the register mantissas are added (or the smaller mantissa subtracted from the larger if the signs are not the same). The exponent is incremented by 1 if the result overflows, and decremented if underflow occurs in subtraction. If the exponents differ, the mantissa of the register with the smaller exponent is shifted to the right (downwards in memory) by n digits where n is the difference between the two exponents. The shifted mantissa is then added to or subtracted from the other. The larger exponent is taken as the exponent of the result after adjusting for over- or underflow as above. The alignment and addition/subtraction of mantissas are always done on the full 7 bytes of the register mantissas, ie. to 14 digit accuracy. If the result requires more than 12 digits of precision, the guard digits are used to round the least significant digit accordingly. Example To add 1.0E+11 and 202.88, the following constants can be set up: ``` FP_CONST1: DB 0,0,0,0,0,10h ;mantissa DB 11 ;exponent DB 0 ;positive sign DUMMY_GUARD_BYTE: DB 0 FP_CONST2: DB 0,0,0,80h,28h,20h ;mantissa DB 2 ;exponent DB 0 ;sign ``` and the following code executed (taking advantage of the fact that the operand follows immediately after the accumulator in memory): ``` LDD #MTT_AMAN+1 ;D -> byte above guard digit LDX #2*8+1 ;length to move STX UTW_S0 LDX #FP_CONST1 OS UT\$CPYB ;copy constants into registers OS MT\$FADD ``` then after the mantissas have been aligned they will contain the following: ``` Mantissa Guard Digit Accumulator: 10 00 00 00 00 00 00 Operand: 00 00 00 00 02 02 88 Result after adding: 10 00 00 00 02 02 88 ``` Before returning this is rounded up and the guard digit cleared to give: ``` 10 00 00 00 02 03 00 ``` Errors 253 - exponent overflow