Приветствую всех гуру! у меня периодически возникают сложности в понимании некоторых кусков кода, прошу помощи в их переводе на русский язык. заранее благодарю! Код (Text): 00558A9E |> /31DB /XOR EBX, EBX ; PROG.0041B600 00558AA0 |. |88C3 |MOV BL, AL 00558AA2 |. |AC |LODS BYTE PTR DS:[ESI] 00558AA3 |. |32D8 |XOR BL, AL 00558AA5 |. |66:D1E3 |SHL BX, 1 00558AA8 |. |01FB |ADD EBX, EDI 00558AAA |. |66:8B1B |MOV BX, WORD PTR DS:[EBX] 00558AAD |. |32DC |XOR BL, AH 00558AAF |. |66:89D8 |MOV AX, BX 00558AB2 |.^\E2 EA \LOOPD SHORT PROG.00558A9E
В чем вопрос то ? Обьяснить каждую инструкцию надо ? Сказал бы хотя бы откуда этот кусок вырезан.. Может кто и ответит.
подсчет контрольной суммы табличным способом. на входе: ESI - начало блока данных, для которого считается сумма ECX - размер блока EDI - адрес таблицы (размер таблицы - 512 байт) AX - Какое-либо начальное значение контрольной суммы () на выходе в AX - рассчитанное значение контрольной суммы. ------------ Код (Text): WORD CalcChecksum(BYTE* Data, DWORD Length, WORD* Table, WORD Initial) { WORD wChecksum = Initial; for (DWORD i = 0; i<Length; i++) { wChecksum = Table[ Data[i] ^ (wChecksum & 0xFF) ] ^ (wChecksum >> 8); } return wChecksum; }