Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Известный пример необычного использования этой команды — самый компактный вариант преобразования шестнадцатеричной цифры в ASCII-код соответствующего символа (более длинный и очевидный вариант этого преобразования рассматривался в описании команды XLAT):
cmp al,10
sbb al,96h
das
И время на промахи кэша, что очень дорого.
Особенно один случай, как у моего товарища С-шный компилятор сгенерировал более эффективный код, чем он сам написал после всех оптимизаций и долгого изучения мануалов по ассемблеру: на одну инструкцию короче и примерно на 20% быстрее.
А у вас в вариантах с циклами возможны промахи предсказания ветвлений, а в остальных — сложности конвейеризации. Так что всё тоже не так однозначно.
Таблица большая, но если операция делается один раз, то оптимизировать её не имеет смысла, значит, вы будете гонять её очень много раз, логично?
mov rsi, timep +15
mov rdi,msgh
mov rcx,16
mi8:
xor rax,rax
std
lodsb
mov rax,[rax*2+convertt]
cld
stosw
loop mi8
ret
convertt:
dw '00','01','02','03','04','05','06','07','08','09','0A','0B','0C','0D','0E','0f'
...
Новые решения старой задачи