Ну если al не больше F, то соответсвенно 2 тут варианта:
1) al<A и тогда значение al уменьшится на 6F2) al>=A, тогда значение al уменьшится на C9
З.Ы. Откуда у меня могла взяться привычка проверять раскладку клавишей c символом "C"???
Оптимизация
Оптимизация
Последний раз редактировалось qwertylol 30 ноя 2019, 13:41, всего редактировалось 1 раз.
Причина: test
Причина: test
Оптимизация
Советую расмотреть сами диапозоны значений на входе и на выходе
Последний раз редактировалось master 30 ноя 2019, 13:41, всего редактировалось 1 раз.
Причина: test
Причина: test
Оптимизация
qwertylol писал(а):Source of the post
Ну если al не больше F, то соответсвенно 2 тут варианта:
1) al<A и тогда значение al уменьшится на 6F2) al>=A, тогда значение al уменьшится на C9
Нека :no:
как sbb так и das производят вычитание.
Для подсказки приведу аглоритм их работы
sbb вычитает из источника приемник и флаг CF, и результат заносит в источник
das
1. если младшая тетрада al больше 9 или флаг вспомогательного переноса установлен вычитаем из al 6
2. Если после этого флаг переноса установлен, или младшая тетрада больше 9, вычитаем еще 60h
Последний раз редактировалось a_l_e_x86 30 ноя 2019, 13:41, всего редактировалось 1 раз.
Причина: test
Причина: test
Оптимизация
как sbb так и das производят вычитание.
Для подсказки приведу аглоритм их работы
sbb вычитает из источника приемник и флаг CF, и результат заносит в источник
das
1. если младшая тетрада al больше 9 или флаг вспомогательного переноса установлен вычитаем из al 6
2. Если после этого флаг переноса установлен, или младшая тетрада больше 9, вычитаем еще 60h
Ну a что у меня не так? Если al=A(sbb установит флаг CF), то вычитаем 69h и ещё 60h итого C9.
Я и под отладчиком проверял, всё сходилось.
Последний раз редактировалось qwertylol 30 ноя 2019, 13:41, всего редактировалось 1 раз.
Причина: test
Причина: test
Оптимизация
Я бы наверно написал так:
cmp al,10
jb m
add al,7
m:
add al,30h
;
; в довесок
;
cmp al,46h
jbe m2
;a тут чтобы враг не догадался
m3:
xor al,al
or al,3fh
m2:
cmp al,30h
jb m3
cmp al,10
jb m
add al,7
m:
add al,30h
;
; в довесок
;
cmp al,46h
jbe m2
;a тут чтобы враг не догадался
m3:
xor al,al
or al,3fh
m2:
cmp al,30h
jb m3
Последний раз редактировалось master 30 ноя 2019, 13:41, всего редактировалось 1 раз.
Причина: test
Причина: test
Оптимизация
Ho на сколько я понимаю, в рельном применении ни каким образом в al не будет значения более 0fh
mov ah,[si]
shr ax,4
shr al,4
mov ah,[si]
shr ax,4
shr al,4
Последний раз редактировалось master 30 ноя 2019, 13:41, всего редактировалось 1 раз.
Причина: test
Причина: test
Оптимизация
Использовать асм в программировании под вынь, имеет мало смысла, не считая оптимизации отдельных функций требующих максемального быстродействия.
Ho даже в стандартных конструкциях вынь программы найдутся места где можно повеселиться
B почти любой программе есть обработчик сообщений, можно написать множество cmp и jxx, но как можно оптимизировать данный участок?
Ho даже в стандартных конструкциях вынь программы найдутся места где можно повеселиться
B почти любой программе есть обработчик сообщений, можно написать множество cmp и jxx, но как можно оптимизировать данный участок?
Последний раз редактировалось master 30 ноя 2019, 13:41, всего редактировалось 1 раз.
Причина: test
Причина: test
Оптимизация
a_l_e_x86 писал(а):Source of the post
Продолжим тему
Что делает такой код?Код: Выбрать все
cmp al,10
sbb al,69h
das
Это довольно известный прием перевода шестнадцатиричной цифры в символ, т.e. 00h -> 30h, 01h -> 31h, ..., 09h -> 39h, 0Ah -> 41h, ..., 0Fh -> 46h.
Последний раз редактировалось AV_77 30 ноя 2019, 13:41, всего редактировалось 1 раз.
Причина: test
Причина: test
Оптимизация
AV_77 писал(а):Source of the post
Это довольно известный прием перевода шестнадцатиричной цифры в символ, т.e. 00h -> 30h, 01h -> 31h, ..., 09h -> 39h, 0Ah -> 41h, ..., 0Fh -> 46h.
Известный наверно... у меня плохая привычка пытаться саму доходить до решений, поэтому из чувства сохранения собственого велосипеда стараюсь реже посматривать в известные решения
Последний раз редактировалось master 30 ноя 2019, 13:41, всего редактировалось 1 раз.
Причина: test
Причина: test
Оптимизация
qwertylol писал(а):Source of the post
Ну a что у меня не так? Если al=A(sbb установит флаг CF), то вычитаем 69h и ещё 60h итого C9.
Я и под отладчиком проверял, всё сходилось.
Извиняюсь немного не правильно привел правила, должно быть так:
das
1. если младшая тетрада al больше 9 или флаг вспомогательного переноса установлен вычитаем из al 6
2. Если после этого флаг переноса установлен, или старшая тетрада больше 9, вычитаем еще 60h
AV_77 совершенно верно :yes:
A вообще ход решения inspektor правильный, если б я не ошибся в написании правила, у него тоже получился бы праивльный ответ
Последний раз редактировалось a_l_e_x86 30 ноя 2019, 13:41, всего редактировалось 1 раз.
Причина: test
Причина: test
Вернуться в «Computer Science»
Кто сейчас на форуме
Количество пользователей, которые сейчас просматривают этот форум: нет зарегистрированных пользователей и 2 гостей