asm2C: DIV-ы

Тема в разделе "WASM.BEGINNERS", создана пользователем noonv, 3 авг 2005.

  1. noonv

    noonv Member

    Публикаций:
    0
    Регистрация:
    19 июл 2005
    Сообщения:
    209
    Адрес:
    Russia
    перевести программу с асм-а на С:

    mov ecx, ccptr

    mov ebx, FSOUND_MixRate

    mov eax, freq

    xor edx, edx

    div ebx

    mov [ecx].speedhi, eax

    div ebx

    mov [ecx].speedlo, eax

    а то я уже с div-ами запарился :))
     
  2. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    А div_t div(int numer, int denom); не поможет?
     
  3. noonv

    noonv Member

    Публикаций:
    0
    Регистрация:
    19 июл 2005
    Сообщения:
    209
    Адрес:
    Russia
    нет - что-то не помогает :dntknw:(((
     
  4. noonv

    noonv Member

    Публикаций:
    0
    Регистрация:
    19 июл 2005
    Сообщения:
    209
    Адрес:
    Russia
    // ccptr - это структура

    _структура_* c = ccptr;

    int b = FSOUND_MixRate;

    int a = freq;

    int d=a%b; // сохраняем остаток от деления

    a/=b;

    c->speedhi=a;

    d<<16;

    a|=d;

    a/=b;

    c->speedlo=a;



    но код работает как-то не так :dntknw:(((((((((((((

    в чём трабл?
     
  5. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    Делимое должно быть 64-битным, т.е. нужно так:
    Код (Text):
    1. _int64 a,d;
    2. // ***
    3. d<<32;
    4. a &= 0xFFFFFFFF;
    5. a |= d;
    6. a /= b;


    Но этот код не будет работать, т.к. ANSI C не имеет стандартных 64-битных типов. Хотя VC и поддерживает _int64, но логические операции над ними врядли будут корректно работать.



    Вы решили портировать minifmod и нужен чистый C? А как же FPU ramp? - там ассемблерного кода куда больше.
     
  6. noonv

    noonv Member

    Публикаций:
    0
    Регистрация:
    19 июл 2005
    Сообщения:
    209
    Адрес:
    Russia
    ;а вот такой код:

    ;------------

    mov eax, srcptr

    fld [eax]

    add srcptr, 4

    fistp val

    ;------------

    // в такой:

    //

    float * a=srcptr;

    float var= *a;

    a++;



    :))))))))
     
  7. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine


    Неправильно!
    Код (Text):
    1. int val = (int)(*srcptr);


    srcptr указывает на float.
     
  8. noonv

    noonv Member

    Публикаций:
    0
    Регистрация:
    19 июл 2005
    Сообщения:
    209
    Адрес:
    Russia
    2Quantum

    >Вы решили портировать minifmod и нужен чистый C? А как же >FPU ramp? - там ассемблерного кода куда больше.

    так точно! а что делать :derisive:

    этим уже кто-нибудь занимался? что посоветуете?
     
  9. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    noonv



    Значит портируете... Кроме FPU ramp есть ещё 2 проблемы:

    1. Если вы портируете в не-Win32 среду (а так оно, видимо, и есть), то придётся вам разобраться с WINMM (звук через эту АПИ идёт) и поискать эквивалент WINMM для той платформы, в которую собираетесь портировать. Кстати, minifmod давно есть для Линукса (GCC).

    2. Если вы портируете в не-x86 архитектуру, то перевод на чистый C вам не поможет, т.к. в коде полно зависимостей от little endian и вообще он расчитан на то, что int должен быть 32-битным.





    Кое-кто занимается противоположной задачей - портирование этой либы в чистый asm.
     
  10. noonv

    noonv Member

    Публикаций:
    0
    Регистрация:
    19 июл 2005
    Сообщения:
    209
    Адрес:
    Russia
    Quantum

    Линуксовый порт есть. Но он не поможет ибо там тоже есть asm.

    По поводу вопросов.

    1. Здесь проблем не предвидется. Для нашей платформы соответствующий апи есть. Прикрутить его будет не слишком сложно.

    2. Целевая платформа работает на SPARC процессорах. int 32 битный. Используется little endian.
     
  11. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    Не хочу показаться пессимистом, но я бы "ниасилил" перевод FPU ramp на чистый C.