POV (02.11.2005 12:12, просмотров: 1) ответил bialix на Ответ:
В общем эти жалкие такты ничто по сравнению... с размерами кода "увеличения на 1 DWORD" на асм и то, что кейл сделал.
разница в разы, но... без этого но С вообще бы не пользовали.
не могу пока компактно вставить асм-кусок вида
clr a
inc m0
cjne a,m0,loop
inc m1
cjne a,m1,loop
inc m2
cjne a,m2,loop
inc m3
т.к. асм-у трубется указать явные адреса m0...m3 ячеек хранящих байты числа DWORD. Получилось только с использованием _at_:
extern DWORD counter;
BYTE *m0 _at_ cnt_replace;
void inc_DWORD()
{
m0 = &counter;
#pragma asm
push psw
push 0
mov r0,cnt_replace
inc @r0
cjne @r0,#0,loop
inc r0
inc @r0
cjne@r0,#0,loop
inc r0
inc @r0
cjne @r0,#0,loop
inc r0
inc @r0
loop:
pop 0
pop psw
#pragma endasm
}
Как-то грубова-то вышло и я пока еще на знаю как компилятор относится к этому _at_ - не потрёт-ли другими переменными? Да пока толькодобился компиляции без проверки работоспособности в реале.