Я бы делал как-то так:
Код:
push esi
mov bx, CRC_st //bX - Result
mov ecx, len
mov esi, buf
cld
@loop1:
lodsb
xor bl, al
mov edx, 8 //цикл 8 раз
@loop2:
shr bx, 1
jc @m2
xor bx, CRC_1
@m2:
dec edx
jnz @loop2
dec ecx
Jnz @loop1
mov ax, bx
pop esi
Насколько я знаю, lodsb нехило прокачан - всегда одни и те же регистры и не надо считать адрес. xor двух регистров опять же быстрее, чем xor с памятью. Так что вполне мб это скажется лучше.
Но в любом случае, inc и cmp надо было убирать любыми методами. Это самое медленное в коде.
А вариант с
Цитата:
mov al, byte ptr [buf+ESI-ECX] //на самом деле не mov a xor ну не важно, принцып
|
не прокатит, регистр нельзя вычитать в адресе.
Цитата:
Слушайте, зачем весь этот изврат с сокращением кода? Не так уж и критично если будет на паскале написана ф-я.
|
Вот если бы сравнивать студию и самопальный асм, то разницы не было бы вообще (0-2 команды). А вот делфа умеет компилить так, что разница по качеству в пользу самопала может быть в два-три раза. Если считать надо ну очень часто, это может сказаться на общей скорости процентов на 5. Когда я писал одну прогу, 5 процентов были двумя-тремя секундами.