@HexUserHex

Пример использования логических операций AND, OR, TEST в ассемблере?

Приветствую,

Можно пример использования логических операций в ассемблере?
Насколько я понимаю они используются что бы производить инверсию битов, НО я не понимаю когда это может быть нужно в реальных задчачах и для чего(буду рад примеру)?

Если есть люди свободно владеющие асмом то объясните :)
  • Вопрос задан
  • 80 просмотров
Решения вопроса 1
fox_12
@fox_12
Расставляю биты, управляю заряженными частицами
Пример - хранение флагов неких состояний.
Чтобы не использовать для хранения одного состояния (0 или 1) целого байта - берем байт, и устанавливаем некий флаг - к примеру в определенном бите:

mov ah, myflag
or ah, b00001000 # установили флаг
mov myflag, ah   # обратно сохранили в переменную
...
mov ah, myflag  # берем обратно нашу переменную
and ah, b00001000 # и проверяем наше состояние
jz прыгнули_ если_флаг_равен_0
...
mov ah, myflag  # берем обратно нашу переменную
and ah, b00000010 # проверяем наше состояние в каком-то другом бите
jz прыгнули_ если_флаг_равен_0

Таким образом - в одном байте мы храним 8 состояний
А эти состояния - могут быть к примеру - некая двумерная матрица - к примеру для игры в морской бой 10x10 где 1-это наличие корпуса корабля в клетке 0 -отсутствие
И вместо хранения 10*10 = 100 байт мы будем хранить 10*10//8 = 12+1 = 13 байт с учетом остатка
13 байт против 100 байт - экономия существенная, особенно если у нас ограничение по ресурсам (микроконтроллеры)
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
15432
@15432
Системный программист ^_^
самое частое - логические условия, объединение нескольких условий

if((var & 1) == 1) {} ... может стать TST

if(var1 == 0 && var2 == 1) может использовать AND

и так далее
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы