Я хотел бы начать преобразование небольшого проекта nasm {synth.asm, synth_core.nh} в c, чтобы узнать немного больше об этом маленьком программном синтезаторе.C Реализация кода nasm
Проблема в моем знании asm очень очень ржавая, мне интересно, с чего начать. Я думал, что один декомпилятор может помочь мне, но я не нашел ничего открытого источника, способного конвертировать эти простые списки nasm в c.
Другой альтернативой будет делать преобразование asm-> с вручную, но я изо всех сил, чтобы понять одну из самых простых функций :(
т.е.
;distortion_machine
;---------------------------
;float a
;float b
;---------------------------
;ebp: distort definition
;edi: stackptr
;ecx: length
section distcode code align=1
distortion_machine:
pusha
add ecx, ecx
.sampleloop:
fld dword [edi]
fld dword [ebp+0]
fpatan
fmul dword [ebp+4]
fstp dword [edi]
scasd
loop .sampleloop
popa
add esi, byte 8
ret
сломанный попытка:
void distortion_machine(???) { // pusha; saving all registers
int ecx = ecx+ecx; // add ecx, ecx; this doesn't make sense
while(???) { // .sampleloop; what's the condition?
float a = [edi]; // fld dword [edi]; docs says edi is stackptr, what's the meaning?
float b = [ebp+0]; // fld dword [ebp+0]; docs says ebp is distort definition, is that an input parameter?
float c = atan(a,b); // fpatan;
float d = c*[ebp+4]; // fmul dword [ebp+4];
// scasd; what's doing this instruction?
}
return ???;
// popa; restoring all registers
// add esi, byte 8;
}
Я предполагаю, что приведенный выше список nasm - это очень простой цикл, искажающий простой звуковой буфер, но я не понимаю, какие из них являются входами и какие из них являются выходами. даже не понимают условия цикла: ')
Любая помощь с описанной выше процедурой и как продвигаться с этим небольшим учебным проектом будет действительно оценена.
'добавить ECX, ecx' просто означает умножить ECX на два, которые имеют смысл, если функция работает на, например,' образцы short' (так 2 байта), а длина выраженные в образцах. – Jack
Пожалуйста, задайте только один вопрос в сообщении. Я предполагаю, что вопрос: «Как я могу преобразовать сборку nasm в C». «Нужны предложения о том, как выполнить задание типа« »или« что делает этот код », вне темы. –
BadZen
@Jack Итак, предположим, что подпрограмма модифицирует «короткий» входной буфер, но «цикл» уменьшает ecx на 1, не так ли? Кроме того, в чем смысл 'ebp' и' edi' в этом контексте? – BPL