title   Conversie Atom -> Intel8 floating point

CSEG    SEGMENT PARA PUBLIC 'CODE'
        ASSUME CS:CSEG, DS:CSEG, ES:CSEG, SS:CSEG
        ORG 100H

START   PROC NEAR
        JMP  ATEL

ATOM    DB  080H,0D6H,0D6H,077H,070H
INTEL   DQ  0

ATEL:   MOV     AH,BYTE PTR ATOM[1]     ; ATOM MANTISSA NAAR AX:BX
        MOV     AL,BYTE PTR ATOM[2]
        MOV     BH,BYTE PTR ATOM[3]
        MOV     BL,BYTE PTR ATOM[4]
        XOR     DX,DX                   ; DX MAAKT DEEL UIT VAN INTEL MANTISSA
        MOV     CX,0BH                  ; LAADT TELLER
LB1:    SHR     AX,1                    ; SCHUIF MANTISSA DRIE BITS RECHTS
        RCR     BX,1
        RCR     DX,1
        LOOP    LB1
        MOV     CL,BYTE PTR ATOM[1]     ; LAADT SIGN BIT IN CL7
        SHL     AX,1                    ; MAAK PLAATS VOOR SIGN BIT IN AX
        SHL     CL,1                    ; ZET SIGN BIT IN CARRY
        RCR     AX,1                    ; SCHUIF SIGN BIT IN AX
        AND     AX,1000000000001111B    ; EXPONENT MOET NOG BEREKEND WORDEN
        MOV     CL,BYTE PTR ATOM[0]     ; LAADT EXPONENT IN CL
        XOR     CL,80H                  ; INVERTEER BIAS BIT
        XCHG    AX,CX                   ; WISSEL AX EN CX VOOR BEWERKING
        CBW
        XCHG    AX,CX                   ; WISSEL AX EN CX WEER
        ADD     CX,1022                 ; BEREKEN INTEL'S EXPONENT
        SHL     CX,1                    ; RESULTAAT VIER POSITIES OPSCHUIVEN
        SHL     CX,1
        SHL     CX,1
        SHL     CX,1
        XOR     AX,CX                   ; EXPONENT AAN DE REST TOEVOEGEN
        MOV     WORD PTR INTEL[6],AX    ; BERG RESULTAAT OP IN WERKRUIMTE
        MOV     WORD PTR INTEL[4],BX
        MOV     WORD PTR INTEL[2],DX
        RET

START   ENDP

CSEG    ENDS
        END     START
