Представление real в 6 байт

Тема в разделе "WASM.ZEN", создана пользователем _jungle_, 7 окт 2005.

  1. _jungle_

    _jungle_ New Member

    Публикаций:
    0
    Регистрация:
    7 окт 2005
    Сообщения:
    21
    Адрес:
    Russia
    Как осуществляется?по битам что куда?в инете не нашел.плохо искал может, но все-таки???
     
  2. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    В дельфийском Object Pascal Guide в разделе Memory issue есть описание (щас у меня под рукой нет)

    А зачем тебе этот нестандартный формат, то здался ?
     
  3. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Хммм... Какой странный формат :) Не могу найти ни одной причины или случая когда он был бы удобен :)
     
  4. _BC_

    _BC_ БЦ

    Публикаций:
    0
    Регистрация:
    20 янв 2005
    Сообщения:
    759
    Должно быть, подразумевается TP'шный runtime.


    Код (Text):
    1.  
    2. ; Convert Real to Extended
    3. ; Вход: AX, BX, DX. Выход: ST(0)
    4. FRealExt:
    5.     OR  AL,AL
    6.     JE  @@1
    7.     XOR CL,CL
    8.     MOV CH,AH
    9.     MOV AH,DH
    10.     AND AH,80H
    11.     ADD AX,3F7EH
    12.     OR  DH,80H
    13.     PUSH    AX
    14.     PUSH    DX
    15.     PUSH    BX
    16.     PUSH    CX
    17.     XOR CX,CX
    18.     PUSH    CX
    19.     MOV BX,SP
    20.     FLD TBYTE PTR SS:[BX]
    21.     FWAIT
    22.     ADD SP,10
    23.     RETF
    24. @@1:    FLDZ
    25.     RETF
    26.  
    27. ; Convert Extended to Real
    28. ; Вход: ST(0). Выход: AX, BX, DX.
    29. FExtReal:
    30.     SUB SP,10
    31.     MOV BX,SP
    32.     FSTP    TBYTE PTR SS:[BX]
    33.     FWAIT
    34.     ADD SP,2
    35.     POP CX
    36.     POP BX
    37.     POP DX
    38.     POP AX
    39.     MOV DI,AX
    40.     AND AX,7FFFH
    41.     SUB AX,3F7EH
    42.     JBE @@2
    43.     OR  AH,AH
    44.     JNE @@4
    45.     MOV AH,CH
    46.     SHL CL,1
    47.     ADC AH,0
    48.     ADC BX,0
    49.     ADC DX,0
    50.     JC  @@3
    51. @@1:    SHL DX,1
    52.     SHL DI,1
    53.     RCR DX,1
    54.     RETF
    55. @@2:    XOR AX,AX
    56.     XOR BX,BX
    57.     XOR DX,DX
    58.     RETF
    59. @@3:    INC AL
    60.     JNE @@1
    61. @@4:    MOV AX,205
    62.     JMP HaltError
     
  5. _jungle_

    _jungle_ New Member

    Публикаций:
    0
    Регистрация:
    7 окт 2005
    Сообщения:
    21
    Адрес:
    Russia
    Да, это вариант tp:

    PUBLIC RealAdd,RealSub,RealMul,RealDiv,RealCmp

    PUBLIC RealFloat,RealTrunc



    ; The 6-byte real kernel routines operate on two floating point

    ; pseudo-registers, referred to as R1 and R2. Each pseudo-register

    ; is the concatenation of three 8086 registers. R1 is DX:BX:AX,

    ; and R2 is DI:SI:CX.



    собственное как собирается вещественное число из значений регистров DX:BX:AX???



    короче вот число 6.1 представляется как dx=4666h bx=6666h ax=6683h как так?
     
  6. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    Формат Real48:

    Младший байт - смещенный порядок (e-129)

    Следующие 39 бит - мантисса, старший разряд мантиссы не хранится, также как и в форматах single и double

    Старший бит числа - ес-но знак

    Поэтому преобразование в extended, приведенное _BC_, выглядит так:
    Код (Text):
    1. ;На входе:
    2. ;AL-порядок, AH - биты магтиссы 0..7
    3. ;BX - биты мантиссы 8..23
    4. ;DX - биты мантиссы 24..38 и знак
    5.     XOR     CL,CL    
    6.     MOV CH,AH    ;мантисса 0..7
    7.     MOV AH,DH    ;заменяем старший байт в AX для копирования знака
    8.     AND AH,80H   ;выделяем знак
    9.         ;теперь AX это порядок (e-129) и знак в старшем бите
    10.     ADD AX,3F7EH ;добавляем смещение порядка для extended
    11.     OR  DH,80H   ;добавляем старшую единичку мантиссы
    12.                       ;в real48 она не храниться, а в extended храниться явно
    Готово: теперь AX - старший word, затем DX,BX,CX и нулевой ворд младших разрядов мантиссы



    PS: ес-но как и во всех вещественных форматах биты мантиссы "выравнены" в сторону старших разрядов, а не младших как в целых числах. Например, число 5 как целое будет в двоичном виде x0..0101, а в Real48 x0010..0 10000011 (знак = 0, старшей единицы нет, затем 01, остальное нули, смещенный порядок = 2+129=131=83h)
     
  7. _jungle_

    _jungle_ New Member

    Публикаций:
    0
    Регистрация:
    7 окт 2005
    Сообщения:
    21
    Адрес:
    Russia
    Спасибо большое