перевести программу с асм-а на С: 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-ами запарился )
// 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; но код работает как-то не так ((((((((((((( в чём трабл?
Делимое должно быть 64-битным, т.е. нужно так: Код (Text): _int64 a,d; // *** d<<32; a &= 0xFFFFFFFF; a |= d; a /= b; Но этот код не будет работать, т.к. ANSI C не имеет стандартных 64-битных типов. Хотя VC и поддерживает _int64, но логические операции над ними врядли будут корректно работать. Вы решили портировать minifmod и нужен чистый C? А как же FPU ramp? - там ассемблерного кода куда больше.
;а вот такой код: ;------------ mov eax, srcptr fld [eax] add srcptr, 4 fistp val ;------------ // в такой: // float * a=srcptr; float var= *a; a++; )))))))
2Quantum >Вы решили портировать minifmod и нужен чистый C? А как же >FPU ramp? - там ассемблерного кода куда больше. так точно! а что делать этим уже кто-нибудь занимался? что посоветуете?
noonv Значит портируете... Кроме FPU ramp есть ещё 2 проблемы: 1. Если вы портируете в не-Win32 среду (а так оно, видимо, и есть), то придётся вам разобраться с WINMM (звук через эту АПИ идёт) и поискать эквивалент WINMM для той платформы, в которую собираетесь портировать. Кстати, minifmod давно есть для Линукса (GCC). 2. Если вы портируете в не-x86 архитектуру, то перевод на чистый C вам не поможет, т.к. в коде полно зависимостей от little endian и вообще он расчитан на то, что int должен быть 32-битным. Кое-кто занимается противоположной задачей - портирование этой либы в чистый asm.
Quantum Линуксовый порт есть. Но он не поможет ибо там тоже есть asm. По поводу вопросов. 1. Здесь проблем не предвидется. Для нашей платформы соответствующий апи есть. Прикрутить его будет не слишком сложно. 2. Целевая платформа работает на SPARC процессорах. int 32 битный. Используется little endian.