В дельфийском Object Pascal Guide в разделе Memory issue есть описание (щас у меня под рукой нет) А зачем тебе этот нестандартный формат, то здался ?
Должно быть, подразумевается TP'шный runtime. Код (Text): ; Convert Real to Extended ; Вход: AX, BX, DX. Выход: ST(0) FRealExt: OR AL,AL JE @@1 XOR CL,CL MOV CH,AH MOV AH,DH AND AH,80H ADD AX,3F7EH OR DH,80H PUSH AX PUSH DX PUSH BX PUSH CX XOR CX,CX PUSH CX MOV BX,SP FLD TBYTE PTR SS:[BX] FWAIT ADD SP,10 RETF @@1: FLDZ RETF ; Convert Extended to Real ; Вход: ST(0). Выход: AX, BX, DX. FExtReal: SUB SP,10 MOV BX,SP FSTP TBYTE PTR SS:[BX] FWAIT ADD SP,2 POP CX POP BX POP DX POP AX MOV DI,AX AND AX,7FFFH SUB AX,3F7EH JBE @@2 OR AH,AH JNE @@4 MOV AH,CH SHL CL,1 ADC AH,0 ADC BX,0 ADC DX,0 JC @@3 @@1: SHL DX,1 SHL DI,1 RCR DX,1 RETF @@2: XOR AX,AX XOR BX,BX XOR DX,DX RETF @@3: INC AL JNE @@1 @@4: MOV AX,205 JMP HaltError
Да, это вариант 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 как так?
Формат Real48: Младший байт - смещенный порядок (e-129) Следующие 39 бит - мантисса, старший разряд мантиссы не хранится, также как и в форматах single и double Старший бит числа - ес-но знак Поэтому преобразование в extended, приведенное _BC_, выглядит так: Код (Text): ;На входе: ;AL-порядок, AH - биты магтиссы 0..7 ;BX - биты мантиссы 8..23 ;DX - биты мантиссы 24..38 и знак XOR CL,CL MOV CH,AH ;мантисса 0..7 MOV AH,DH ;заменяем старший байт в AX для копирования знака AND AH,80H ;выделяем знак ;теперь AX это порядок (e-129) и знак в старшем бите ADD AX,3F7EH ;добавляем смещение порядка для extended OR DH,80H ;добавляем старшую единичку мантиссы ;в real48 она не храниться, а в extended храниться явно Готово: теперь AX - старший word, затем DX,BX,CX и нулевой ворд младших разрядов мантиссы PS: ес-но как и во всех вещественных форматах биты мантиссы "выравнены" в сторону старших разрядов, а не младших как в целых числах. Например, число 5 как целое будет в двоичном виде x0..0101, а в Real48 x0010..0 10000011 (знак = 0, старшей единицы нет, затем 01, остальное нули, смещенный порядок = 2+129=131=83h)