Поддерживаю данную корректировку. Извините, но статья не интересна.
1. Если пишите на асме вставки, обязаны знать способ передачи параметров
1-ый EAX, 2-ой EDX, 3-ий ECX, дальше стек, а MulRolMix по кругу гоняет mov edx, edx.
2. Если пишите на асме, обязаны знать, как располагаются переменные в стеке, где база, и по какому смещению (-/+) обращаться к переменным.
Если игнорировать эти обязательства, то блок asm .. end; не более, чем для красоты. В ином случае, совсем не трудно будет решать такие задачи, как обратные вызовы с вложенными процедурами. Которые компилятор не в состоянии решить, а у некоторых гуру вызывает разрыв шаблона.
Автор поставил целью сделать это медленно, задачу выполнил, нареканий нет.
Вот результат из цели "Давайте сделаем это быстро" (кстати, неплохое название для Вашей следующей статьи ;)):
function Compare1(A,B:Integer):Integer;beginif A > B then
Result :=0else
Result :=-1;end;function Compare2(A,B:Integer):Integer;asm
cmp EAX, EDX
sbb EAX, EAX
end;
rxt
Поддерживаю данную корректировку. Извините, но статья не интересна.
1. Если пишите на асме вставки, обязаны знать способ передачи параметров
1-ый EAX, 2-ой EDX, 3-ий ECX, дальше стек, а MulRolMix по кругу гоняет mov edx, edx.
2. Если пишите на асме, обязаны знать, как располагаются переменные в стеке, где база, и по какому смещению (-/+) обращаться к переменным.
Если игнорировать эти обязательства, то блок asm .. end; не более, чем для красоты. В ином случае, совсем не трудно будет решать такие задачи, как обратные вызовы с вложенными процедурами. Которые компилятор не в состоянии решить, а у некоторых гуру вызывает разрыв шаблона.
Автор поставил целью сделать это медленно, задачу выполнил, нареканий нет.
Вот результат из цели "Давайте сделаем это быстро" (кстати, неплохое название для Вашей следующей статьи ;)):