Как запихнуть в регистр 4х-байтовое float число?

Тема в разделе "WASM.BEGINNERS", создана пользователем kernel16, 22 мар 2011.

  1. kernel16

    kernel16 Human Vl

    Публикаций:
    0
    Регистрация:
    29 окт 2010
    Сообщения:
    316
    MASM32
    как запихнуть в регистр\кинуть в стек(обычный, не FPU) 4х-байтовое число с плавающей запятой?
    пробовал так:
    mov eax,real4 ptr 45.4f
    mov eax,real4 ptr 45.4
    mov eax,45.1
    mov eax,45.1f
    mov eax,dword ptr 45.1f
    mov eax,dword ptr 45.1
    пишет, мол ошибка, нэ знает, что это.(в эттаче скрин)
    можно засунуть в переменную, но это на 4 байта больше... и медленнее, и писать не удобно
    какой синтаксис должен быть?
     
  2. SII

    SII Воин против дзена

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    1.483
    Адрес:
    Подмосковье
    Насколько помню, МАСМ не поддерживает загрузку вещественных чисел в РОНы, т.е. подходящего для решения этой задачи синтаксиса нет. Единственный выход -- ручками перевести в двоичное представление и грузить как обычную целую константу.
     
  3. kernel16

    kernel16 Human Vl

    Публикаций:
    0
    Регистрация:
    29 окт 2010
    Сообщения:
    316
    а какой ассемблер поддерживает? (нормальный)
     
  4. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.568
    Адрес:
    Russia
    kernel16
    FASM умеет.
    Код (Text):
    1.     mov eax, 4.0f
     
  5. kernel16

    kernel16 Human Vl

    Публикаций:
    0
    Регистрация:
    29 окт 2010
    Сообщения:
    316
    а под масм макроса какого-нибудь нет? типа mov eax,float4, 32,44
     
  6. edemko

    edemko New Member

    Публикаций:
    0
    Регистрация:
    25 ноя 2009
    Сообщения:
    454
  7. kernel16

    kernel16 Human Vl

    Публикаций:
    0
    Регистрация:
    29 окт 2010
    Сообщения:
    316
    edemko
    xor ecx,ecx
    dec ecx
    @1:
    thanks
    loop @1
    retn 0
    хотя бы в ручную переводить не надо...
     
  8. s_d_f

    s_d_f New Member

    Публикаций:
    0
    Регистрация:
    15 май 2008
    Сообщения:
    342
    Только макросами это решается.
    Попробуй так.
    Код (Text):
    1. movr macro Register:REQ,Float4:REQ
    2.     mov Register,0
    3.     org $-4
    4.     REAL4 Float4
    5. endm
    6.  
    7.  
    8. movr edx,7.7e4
     
  9. edemko

    edemko New Member

    Публикаций:
    0
    Регистрация:
    25 ноя 2009
    Сообщения:
    454
    kernel16
    or ecx,-1 короче
     
  10. LShadow77

    LShadow77 New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2010
    Сообщения:
    36
    У меня есть решение! Для подобных целей когда-то написал макрос FLT(). Вот пример использования:
    Код (Text):
    1.                 mov             eax,FLT(0.472)
    2.                 invoke          glColor3f, FLT(0.23, 0.75),eax
    3.                 mov             ecx,FLT(-0.056E+23)
    А вот и сам макрос (так и быть, пользуйтесь, дарю:) ):
    Код (Text):
    1. ;===============================================================
    2. ;Реализация макроса FLT() (фрагмент макробиблиотеки kdvbase.inc)
    3. ;Автор: LShadow77
    4. ;===============================================================
    5.  
    6. __?DigitsLine equ <0123456789>                  ;строка десятичных цифр
    7. __?SignLine equ <-+>                            ;знаки числа
    8.  
    9. ;===============================================================
    10. ;Макрос: INT2FLT()
    11. ;Назначение: приводит целую константу со знаком к формату FLOAT
    12. ;Параметры:
    13. ;  IntNum - целое число со знаком
    14. ;===============================================================
    15. INT2FLT MACRO  IntNum:REQ
    16.   __?FltResult = 0
    17.   IF (IntNum) NE 0
    18.     IF (IntNum) NE 80000000h
    19.       __?FltSPart = (IntNum) SHR 31
    20.       __?FltTempNum = IntNum
    21.       IF __?FltSPart EQ 1
    22.         __?FltTempNum = -__?FltTempNum
    23.       ENDIF
    24.       __?FltAbsNum = __?FltTempNum
    25.       __?FltQPart = -1
    26.       WHILE __?FltTempNum NE 0
    27.         __?FltTempNum = __?FltTempNum SHR 1
    28.         __?FltQPart = __?FltQPart+1
    29.       ENDM
    30.       IF __?FltQPart LT 24
    31.         __?FltMPart = (__?FltAbsNum SHL (23-__?FltQPart)) AND 007fffffh
    32.       ELSE
    33.         __?FltMPart = (__?FltAbsNum SHR (__?FltQPart-23)) AND 007fffffh
    34.       ENDIF
    35.       __?FltResult = (__?FltSPart SHL 31) OR ((__?FltQPart+127) SHL 23) OR __?FltMPart
    36.     ELSE
    37.       __?FltResult = 0CF000000h
    38.     ENDIF
    39.   ENDIF
    40.   EXITM <__?FltResult>
    41. ENDM
    42.  
    43. ;===============================================================
    44. ;Макрос: @Raw25Mul24r()
    45. ;Назначение: перемножает две 24-битные мантиссы числа и возвращает
    46. ;            старшие 25 бита произведения, а так же вычисляет бит
    47. ;            коррекции на округление в зависимости от старшего из
    48. ;            потеряных 23 бит результата
    49. ;Параметры:
    50. ;  Num1 - первый множитель
    51. ;  Num2 - второй множитель
    52. ;===============================================================
    53. @Raw25Mul24r MACRO  Num1:REQ,Num2:REQ
    54.   __?Num1Lo = (Num1) AND 0fffh
    55.   __?Num1Hi = (Num1) SHR 12
    56.   __?Num2Lo = (Num2) AND 0fffh
    57.   __?Num2Hi = (Num2) SHR 12
    58.   __?Result = (__?Num1Lo*__?Num2Lo) SHR 12
    59.   __?Result = (__?Result+__?Num1Hi*__?Num2Lo+__?Num1Lo*__?Num2Hi) SHR 10
    60.   __?RoundBit = __?Result AND 1
    61.   __?Result = __?Result SHR 1
    62.   __?Result = __?Result+((__?Num1Hi*__?Num2Hi) SHL 1)
    63.   EXITM <__?Result>
    64. ENDM
    65.  
    66. ;===============================================================
    67. ;Макрос: @FltMul()
    68. ;Назначение: перемножает два вещественных 32-битных числа
    69. ;Параметры:
    70. ;  FltNum1 - первый множитель
    71. ;  FltNum2 - второй множитель
    72. ;Примечание: неопределенность INF*0 трактуется как 0
    73. ;===============================================================
    74. @FltMul MACRO  FltNum1:REQ,FltNum2:REQ
    75.   __?FltResult = ((FltNum1) AND 80000000h) XOR ((FltNum2) AND 80000000h)
    76.   IF ((FltNum1) AND 7fffffffh) NE 0
    77.     IF ((FltNum2) AND 7fffffffh) NE 0
    78.       IF ((FltNum1) AND 7f800000h) NE 7f800000h
    79.         IF ((FltNum2) AND 7f800000h) NE 7f800000h
    80.           __?FltQPart = ((FltNum1) SHR 23) AND 0ffh
    81.           __?FltQPart = __?FltQPart+(((FltNum2) SHR 23) AND 0ffh)-127
    82.           __?FltMPart = ((FltNum1) AND 007fffffh) OR 00800000h
    83.           __?FltMPart = @Raw25Mul24r(__?FltMPart,((FltNum2) AND 007fffffh) OR 00800000h)
    84.           IF (__?FltMPart AND 01000000h) NE 0
    85.             __?FltQPart = __?FltQPart+1
    86.             __?RoundBit = __?FltMPart AND 1  ;new round correction
    87.             __?FltMPart = __?FltMPart SHR 1
    88.           ENDIF
    89.           __?FltMPart = __?FltMPart+__?RoundBit
    90.           IF __?FltQPart GT 0
    91.             IF __?FltQPart LT 255
    92.               __?FltResult = __?FltResult OR (__?FltQPart SHL 23) OR \
    93.                                              (__?FltMPart AND 007fffffh)
    94.             ELSE
    95.               __?FltResult = __?FltResult OR 7f800000h
    96.             ENDIF
    97.           ENDIF
    98.         ELSE
    99.           __?FltResult = __?FltResult OR ((FltNum2) AND 7fffffffh)
    100.         ENDIF
    101.       ELSE
    102.         __?FltResult = __?FltResult OR ((FltNum1) AND 7fffffffh)
    103.       ENDIF
    104.     ENDIF
    105.   ENDIF
    106.   EXITM <__?FltResult>
    107. ENDM
    108.  
    109. ;===============================================================
    110. ;Таблицы степеней десяти для 32-битных вещественных чисел
    111. ;===============================================================
    112. __?FltTenPow0      equ          3F800000h  ;1.0e0
    113. __?FltTenPow1      equ          41200000h  ;1.0e1
    114. __?FltTenPow2      equ          42C80000h  ;1.0e2
    115. __?FltTenPow3      equ          447A0000h  ;1.0e3
    116. __?FltTenPow4      equ          461C4000h  ;1.0e4
    117. __?FltTenPow5      equ          47C35000h  ;1.0e5
    118. __?FltTenPow6      equ          49742400h  ;1.0e6
    119. __?FltTenPow7      equ          4B189680h  ;1.0e7
    120. __?FltTenPow8      equ          4CBEBC20h  ;1.0e8
    121. __?FltTenPow9      equ          4E6E6B28h  ;1.0e9
    122. __?FltTenPow10     equ          501502F9h  ;1.0e10
    123. __?FltTenPow11     equ          51BA43B7h  ;1.0e11
    124. __?FltTenPow12     equ          5368D4A5h  ;1.0e12
    125. __?FltTenPow13     equ          551184E7h  ;1.0e13
    126. __?FltTenPow14     equ          56B5E621h  ;1.0e14
    127. __?FltTenPow15     equ          58635FA9h  ;1.0e15
    128. __?FltTenPow16     equ          5A0E1BCAh  ;1.0e16
    129. __?FltTenPow17     equ          5BB1A2BCh  ;1.0e17
    130. __?FltTenPow18     equ          5D5E0B6Bh  ;1.0e18
    131. __?FltTenPow19     equ          5F0AC723h  ;1.0e19
    132. __?FltTenPow20     equ          60AD78ECh  ;1.0e20
    133. __?FltTenPow21     equ          6258D727h  ;1.0e21
    134. __?FltTenPow22     equ          64078678h  ;1.0e22
    135. __?FltTenPow23     equ          65A96816h  ;1.0e23
    136. __?FltTenPow24     equ          6753C21Ch  ;1.0e24
    137. __?FltTenPow25     equ          69045951h  ;1.0e25
    138. __?FltTenPow26     equ          6AA56FA6h  ;1.0e26
    139. __?FltTenPow27     equ          6C4ECB8Fh  ;1.0e27
    140. __?FltTenPow28     equ          6E013F39h  ;1.0e28
    141. __?FltTenPow29     equ          6FA18F08h  ;1.0e29
    142. __?FltTenPow30     equ          7149F2CAh  ;1.0e30
    143. __?FltTenPow31     equ          72FC6F7Ch  ;1.0e31
    144. __?FltTenPow32     equ          749DC5AEh  ;1.0e32
    145. __?FltTenPow33     equ          76453719h  ;1.0e33
    146. __?FltTenPow34     equ          77F684DFh  ;1.0e34
    147. __?FltTenPow35     equ          799A130Ch  ;1.0e35
    148. __?FltTenPow36     equ          7B4097CEh  ;1.0e36
    149. __?FltTenPow37     equ          7CF0BDC2h  ;1.0e37
    150. __?FltTenPow38     equ          7E967699h  ;1.0e38
    151.  
    152. __?FltTenPowInv1   equ          3DCCCCCDh  ;1.0e-1
    153. __?FltTenPowInv2   equ          3C23D70Ah  ;1.0e-2  
    154. __?FltTenPowInv3   equ          3A83126Fh  ;1.0e-3  
    155. __?FltTenPowInv4   equ          38D1B717h  ;1.0e-4  
    156. __?FltTenPowInv5   equ          3727C5ACh  ;1.0e-5  
    157. __?FltTenPowInv6   equ          358637BDh  ;1.0e-6  
    158. __?FltTenPowInv7   equ          33D6BF95h  ;1.0e-7  
    159. __?FltTenPowInv8   equ          322BCC77h  ;1.0e-8  
    160. __?FltTenPowInv9   equ          3089705Fh  ;1.0e-9  
    161. __?FltTenPowInv10  equ          2EDBE6FFh  ;1.0e-10  
    162. __?FltTenPowInv11  equ          2D2FEBFFh  ;1.0e-11  
    163. __?FltTenPowInv12  equ          2B8CBCCCh  ;1.0e-12  
    164. __?FltTenPowInv13  equ          29E12E13h  ;1.0e-13  
    165. __?FltTenPowInv14  equ          283424DCh  ;1.0e-14  
    166. __?FltTenPowInv15  equ          26901D7Dh  ;1.0e-15  
    167. __?FltTenPowInv16  equ          24E69595h  ;1.0e-16  
    168. __?FltTenPowInv17  equ          233877AAh  ;1.0e-17  
    169. __?FltTenPowInv18  equ          219392EFh  ;1.0e-18  
    170. __?FltTenPowInv19  equ          1FEC1E4Ah  ;1.0e-19  
    171. __?FltTenPowInv20  equ          1E3CE508h  ;1.0e-20  
    172. __?FltTenPowInv21  equ          1C971DA0h  ;1.0e-21  
    173. __?FltTenPowInv22  equ          1AF1C901h  ;1.0e-22  
    174. __?FltTenPowInv23  equ          19416D9Ah  ;1.0e-23  
    175. __?FltTenPowInv24  equ          179ABE15h  ;1.0e-24  
    176. __?FltTenPowInv25  equ          15F79688h  ;1.0e-25  
    177. __?FltTenPowInv26  equ          14461206h  ;1.0e-26  
    178. __?FltTenPowInv27  equ          129E74D2h  ;1.0e-27  
    179. __?FltTenPowInv28  equ          10FD87B6h  ;1.0e-28  
    180. __?FltTenPowInv29  equ          0F4AD2F8h  ;1.0e-29  
    181. __?FltTenPowInv30  equ          0DA24260h  ;1.0e-30  
    182. __?FltTenPowInv31  equ          0C01CEB3h  ;1.0e-31  
    183. __?FltTenPowInv32  equ          0A4FB11Fh  ;1.0e-32  
    184. __?FltTenPowInv33  equ          08A6274Ch  ;1.0e-33  
    185. __?FltTenPowInv34  equ          0704EC3Dh  ;1.0e-34  
    186. __?FltTenPowInv35  equ          0554AD2Eh  ;1.0e-35  
    187. __?FltTenPowInv36  equ          03AA2425h  ;1.0e-36  
    188. __?FltTenPowInv37  equ          02081CEAh  ;1.0e-37  
    189.  
    190. ;===============================================================
    191. ;Макрос: FLTCAST()
    192. ;Назначение: возвращает двоичное значение вещественной
    193. ;            32-битной константы (ядро преобразований)
    194. ;Параметры:
    195. ;  FltValue - вещественное число в десятичной записи
    196. ;===============================================================
    197. FLTCAST MACRO  _FltValue:REQ
    198.   __?FltValue textequ <@CatStr(_FltValue)> ;для устранения некоторых глюков MASM32
    199.   __?FltValueLen sizestr __?FltValue
    200.   IF __?FltValueLen NE 0
    201.     __?FltCurChar substr __?FltValue,__?FltValueLen,1
    202.     IFIDNI __?FltCurChar,<f>
    203.       __?FltValueLen = __?FltValueLen-1
    204.       IF __?FltValueLen NE 0
    205.         __?FltValue substr __?FltValue,1,__?FltValueLen
    206.       ENDIF
    207.     ENDIF
    208.   ENDIF
    209.   __?FltCastResult = 0
    210.   IF __?FltValueLen NE 0
    211.     __?FltIndex = 1
    212.     __?FltBcdBuf textequ <>
    213.     __?FltCurChar substr __?FltValue,1,1
    214.     IFIDN __?FltCurChar,<->
    215.       __?FltCastResult = 80000000h
    216.       __?FltIndex = 2
    217.     ELSE
    218.       IFIDN __?FltCurChar,<+>
    219.         __?FltIndex = 2
    220.       ENDIF
    221.     ENDIF
    222.     __?FltCastState = 0
    223.     IF __?FltIndex EQ 2
    224.       IF __?FltValueLen EQ 1
    225.         __?FltCastState = 0ffh  ;error
    226.       ENDIF
    227.     ENDIF
    228.     IF __?FltCastState NE 0ffh
    229.       __?FltCurChar substr __?FltValue,__?FltIndex,1
    230.       IF @InStr(1,%__?DigitsLine,%__?FltCurChar) EQ 0
    231.         IFIDN __?FltCurChar,<.>
    232.           IF __?FltValueLen GT __?FltIndex
    233.             __?FltCurChar substr __?FltValue,__?FltIndex+1,1
    234.             IF @InStr(1,%__?DigitsLine,%__?FltCurChar) EQ 0
    235.               __?FltCastState = 0ffh  ;error
    236.             ENDIF
    237.           ELSE
    238.             __?FltCastState = 0ffh  ;error
    239.           ENDIF
    240.         ELSE
    241.           __?FltCastState = 0ffh  ;error
    242.         ENDIF
    243.       ENDIF
    244.     ENDIF
    245.     __?FltIsPoint = 0
    246.     __?FltNumPower = 0
    247.     WHILE __?FltCastState LT 80h
    248.       IF __?FltIndex LE __?FltValueLen
    249.         __?FltCurChar substr __?FltValue,__?FltIndex,1
    250.       ELSE
    251.         __?FltCurChar textequ <__EOL__>
    252.       ENDIF
    253.       IF __?FltCastState EQ 0  ;skip zeros
    254.         IFDIF __?FltCurChar,<0>
    255.           IFIDN __?FltCurChar,<.>
    256.             IF __?FltIsPoint EQ 0
    257.               __?FltIsPoint = 1
    258.             ELSE
    259.               __?FltCastState = 0ffh  ;error
    260.             ENDIF
    261.           ELSE
    262.             IF @InStr(2,%__?DigitsLine,%__?FltCurChar) NE 0
    263.               __?FltBcdBuf textequ __?FltCurChar
    264.               __?FltDigitCount = 1
    265.               __?FltNumPower = __?FltNumPower-__?FltIsPoint
    266.               __?FltCastState = 1  ;read digits
    267.             ELSE
    268.               IFIDNI __?FltCurChar,<E>
    269.                 __?FltCastState = 2  ;start get exp part
    270.               ELSE
    271.                 IFIDN __?FltCurChar,<__EOL__>
    272.                   __?FltCastState = 80h  ;end of number read
    273.                 ELSE
    274.                   __?FltCastState = 0ffh  ;error
    275.                 ENDIF
    276.               ENDIF
    277.             ENDIF
    278.           ENDIF
    279.         ELSE
    280.           __?FltNumPower = __?FltNumPower-__?FltIsPoint
    281.         ENDIF
    282.       ELSEIF __?FltCastState EQ 1  ;read digits
    283.         IF @InStr(1,%__?DigitsLine,%__?FltCurChar) NE 0
    284.           IF __?FltDigitCount LT 8
    285.             __?FltBcdBuf catstr __?FltBcdBuf,__?FltCurChar
    286.             __?FltDigitCount = __?FltDigitCount+1
    287.             __?FltNumPower = __?FltNumPower-__?FltIsPoint
    288.           ELSE
    289.             IF __?FltIsPoint EQ 0
    290.               __?FltNumPower = __?FltNumPower+1
    291.             ENDIF
    292.           ENDIF
    293.         ELSE
    294.           IFIDN __?FltCurChar,<.>
    295.             IF __?FltIsPoint EQ 0
    296.               __?FltIsPoint = 1
    297.             ELSE
    298.               __?FltCastState = 0ffh  ;error
    299.             ENDIF
    300.           ELSE
    301.             IFIDNI __?FltCurChar,<E>
    302.               __?FltCastState = 2  ;start get exp part
    303.             ELSE
    304.               IFIDN __?FltCurChar,<__EOL__>
    305.                 __?FltCastState = 80h
    306.               ELSE
    307.                 __?FltCastState = 0ffh  ;error
    308.               ENDIF
    309.             ENDIF
    310.           ENDIF
    311.         ENDIF
    312.       ELSEIF __?FltCastState EQ 2  ;start get exp part
    313.         IF @InStr(1,%__?DigitsLine,%__?FltCurChar) NE 0
    314.           __?FltExpBuf textequ __?FltCurChar
    315.           __?FltDigitCount = 1
    316.           __?FltCastState = 3  ;get exp part
    317.         ELSE
    318.           IF __?FltIndex LT __?FltValueLen
    319.             __?FltDigitCount = 0
    320.             IFIDN __?FltCurChar,<->
    321.               __?FltExpBuf textequ <->
    322.               __?FltCastState = 3
    323.             ELSE
    324.               IFIDN __?FltCurChar,<+>
    325.                 __?FltExpBuf textequ <+>
    326.                 __?FltCastState = 3
    327.               ELSE
    328.                 __?FltCastState = 0ffh  ;error
    329.               ENDIF
    330.             ENDIF
    331.           ELSE
    332.             __?FltCastState = 0ffh  ;error
    333.           ENDIF
    334.         ENDIF
    335.       ELSEIF __?FltCastState EQ 3  ;get exp part
    336.         IF @InStr(1,%__?DigitsLine,%__?FltCurChar) NE 0
    337.           IF __?FltDigitCount LE 9
    338.             __?FltExpBuf catstr __?FltExpBuf,__?FltCurChar
    339.             __?FltDigitCount = __?FltDigitCount+1
    340.           ELSE
    341.             __?FltCastState = 1ffh  ;error - exp part too big
    342.           ENDIF
    343.         ELSE
    344.           IFIDN __?FltCurChar,<__EOL__>
    345.             __?FltNumPower = __?FltNumPower+(__?FltExpBuf)
    346.             __?FltCastState = 80h
    347.           ELSE
    348.             __?FltCastState = 0ffh  ;error
    349.           ENDIF
    350.         ENDIF
    351.       ENDIF
    352.       __?FltIndex = __?FltIndex+1
    353.     ENDM
    354.     IF __?FltCastState EQ 80h
    355.       IFNB __?FltBcdBuf
    356.         __?FltAbsNum = INT2FLT(__?FltBcdBuf)
    357.         IF __?FltNumPower GE 0
    358.           WHILE __?FltNumPower GT 38
    359.             __?FltAbsNum = @FltMul(__?FltAbsNum,__?FltTenPow38)
    360.             __?FltNumPower = __?FltNumPower-38
    361.           ENDM
    362.           __?FltAbsNum = @FltMul(__?FltAbsNum,@CatStr(__?FltTenPow,%__?FltNumPower))
    363.         ELSE
    364.           __?FltNumPower = -__?FltNumPower
    365.           WHILE __?FltNumPower GT 37
    366.             __?FltAbsNum = @FltMul(__?FltAbsNum,__?FltTenPowInv37)
    367.             __?FltNumPower = __?FltNumPower-37
    368.           ENDM
    369.           __?FltAbsNum = @FltMul(__?FltAbsNum,@CatStr(__?FltTenPowInv,%__?FltNumPower))
    370.         ENDIF
    371.         __?FltCastResult = __?FltCastResult OR __?FltAbsNum
    372.         IF __?FltAbsNum EQ 7f800000h
    373.           .err <FLTCAST: number is out of range>
    374.         ELSEIF __?FltAbsNum EQ 0
    375.           .err <FLTCAST: number is out of range>
    376.         ENDIF
    377.       ENDIF
    378.     ELSEIF __?FltCastState EQ 0ffh
    379.       .err <FLTCAST: syntax error>
    380.     ELSE  ;__?FltCastState EQ 1ffh
    381.       .err <FLTCAST: exponential part too long>
    382.     ENDIF
    383.   ELSE
    384.     .err <FLTCAST: need for number>
    385.   ENDIF
    386.   __?FltResult = __?FltCastResult
    387.   EXITM <__?FltResult>
    388. ENDM
    389.  
    390. ;===============================================================
    391. ;Макрос: FLT() - наша цель :)
    392. ;Назначение: возвращает двоичное значение вещественной
    393. ;            32-битной константы, или список значений
    394. ;Параметры:
    395. ;  FltValue1 - первое вещественное число в десятичной записи
    396. ;  [FltValues] - остальные числа для списка
    397. ;===============================================================
    398. FLT MACRO  _FltValue1:REQ,_FltValues:VARARG
    399.   __?FltArgsResult textequ <_FltValue1>
    400.   __?FltArgsResult textequ %FLTCAST(__?FltArgsResult)
    401.   __?FltValues textequ <_FltValues>
    402.   IFNB __?FltValues
    403.     %FOR CurFltValue,<__?FltValues>
    404.       __?FltArgsResult catstr __?FltArgsResult,<,>,%FLTCAST(CurFltValue)
    405.     ENDM
    406.   ENDIF
    407.   EXITM __?FltArgsResult
    408. ENDM
    Как-нибудь планирую выложить весь файл kdvbase.inc. Там много других полезных макросов, например DBL()
     
  11. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.914
    kernel16
    именно в EAX? тогда так
    Код (Text):
    1. db 0B8h; ecx=0B9h,edx=0BAh,ebx=0BBh,esp=0BCh,ebp=0BDh,esi=0BEh,edi=0BFh
    2. dd 45.4
     
  12. LShadow77

    LShadow77 New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2010
    Сообщения:
    36
    Mikl___
    Читай пост выше, зачем флудить?
     
  13. paralvic

    paralvic Пархоменко Александр Викторович

    Публикаций:
    0
    Регистрация:
    20 ноя 2010
    Сообщения:
    294
    Адрес:
    Нижний Новгород
    Код (Text):
    1. .586
    2. .model flat, stdcall
    3. option casemap:none ; надо же хоть что-то в заголовке написать. потом пригодится.
    4.  
    5. ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    6. ; ЭТОТ МАКРОС ЕСТЬ В openGL исходниках на WASM.RU
    7. ; есть другие типы данных и их взаимный перевод
    8. ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    9. literal_float       macro   lit_float
    10.             local   local_float
    11.  
    12.             .data
    13. local_float     real4   lit_float
    14.  
    15.             .code
    16.             exitm   <local_float>
    17.             endm
    18.  
    19. CFLT            macro   lit_float
    20.             exitm   <literal_float(lit_float)>
    21.             endm
    22. ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    23. .code
    24. start:
    25. mov eax,CFLT(45.4) ;и пихайте куда хотите, в регистр
    26. push CFLT(45.4)      ;\в стек
    27. end start