Ассемблерные вопросы:биты и переходы
Переходы:как известно,циклы можно сделать неск. способами:
Lbl:
...
Loop Lbl,
Lbl
...
J(E)CXZ ExitLoop
Jmp Lbl,
Lbl:
...
J(проверка условия типа JC,JE и т.д.) Lbl
Кто из них самый быстрый по аппаратным таймингам?Я слышал,что Loop дольше,чем Jmp/Jxxx
Loop самый медленный.
JECXZ тоже медленный
Быстре
DEC CX
JNZ
но loop читабельнее, и можно сэкономить 1-2 байта
но лично я за
DEC CX
JNZ
но loop читабельнее, и можно сэкономить 1-2 байта
но лично я за
DEC CX
JNZ
Смотря на что ты хочешь оптимизировать цикл - если на размер - то loop, если на время выполнения, то dec cx, jnz...
Я за время выполнения
ROL/ROR всяк быстрее.
Как сказал бы наш физик Харлам(-ов В.Ф.)-"Ну вы даёте"
Описываю на примере(как известно(надеюсь,ассемблерщикам,кои мне отвечали(а особенно Ahilles'у),известно),биты в байте нумеруются справа налево начиная с 0)
1-й байт и его дружная семейка битов:
биты 76543210
байт 10010011
2-й байт и его дружная семейка битов:
биты 76543210
байт 10110010
Вдвигаем 7-й бит из 1-го байта с пом.,например,ShLD(байт 1 не меняется!!!-нам это нафиг нужно(в принципе,пофиг-надо/не надо,определится в контексте задачи))-берём бит в квадратных скобках
байт 2 байт 1
1<-0110010[1]<-[1]0010011
^
|
это сдвинутый с конца бит(значение байта 2 тоже не нужно-он будет заполнен 1-мы битами других 7-ми байт,вдвигаемых таким же образом)
Я за время выполнения
А не будет ли дольше выборка,декодирование и исполнение 2-х операций Dec CX/JNZ ... вместо одной только Loop?