И инструкция

маска
Как да научите английски

В днешно време всеки трябва да знае английски. Особено програмист. Тъй като доста голяма част от документацията съществува само на английски език. А един професионалист не може да чака някой да му преведе документацията. Той трябва да може бързо да получава необходимата информация и да я използва, независимо дали е на английски или български език. Връзки към курсове на английски език.

ИнструкциятаИ изпълнява логическо И между всички битове на двата операнда. Резултатът се записва в първия операнд. Синтаксис:

И НОМЕР 1, НОМЕР 2

NUMBER1 може да бъде едно от следните:

  • Област на паметта (MEM)
  • Регистър с общо предназначение (REG)

NUMBER2 може да бъде едно от следните:

  • Област на паметта (MEM)
  • Регистър с общо предназначение (REG)
  • Незабавна стойност (IMM)

При спазване на ограниченията, описани по-горе, комбинациите от NUMBER1-NUMBER2 могат да бъдат както следва:

Както споменахме, инструкцията И изпълнява логическа операция И между всички битове на две числа. Таблицата на истината за логическата операция И изглежда така:

Защо се нарича таблица на истината? Тъй като показва резултатите от изпълнението на функция с различни параметри. И тези резултати могат да приемат само една от двете стойности: TRUE (логическа 1) или FALSE (логическа 0).

Логическо И е операция за логическо умножение. За да улесните запомнянето на таблицата на истината за логическо И, запомнете математиката:

Какво е битова маска

За какво се използват логически операции като логическо умножение? И защо в командите на асемблера,като И?

Факт е, че доста често трябва да сравнявате някакво число с така наречената битова маска. И в зависимост от резултата извършете някои действия.

С други думи, често се случва да трябва да знаете състоянието на единичен бит (или няколко бита) в число.

Например, нерационално е да изразходвате цял байт, за да съхраните там някаква логическа стойност (например сигнал на някакъв вход на процесора). Следователно в такива случаи 8 логически сигнала обикновено се пакетират в байт, където всеки отделен бит съответства на някаква логическа стойност.

Нека си представим, че имаме някакво устройство с 8 входа. И сигналите от тези входове по някакъв начин се пакетират в един байт, където всеки бит съответства на отделен вход (от 0 до 7).

И сега въпросът е - как да разберем има ли сигнал на вход 3 или не? Тоест, третият бит настроен ли е на 1 или се нулира на 0?

И за това са битовите маски.

Ако имаме нужда, например, да знаем състоянието на третия вход (броене от нула, отдясно наляво), тогава битовата маска за проверка на състоянието на 3-тия бит ще бъде както следва:

Сега, с помощта на логически операции, можем да сравним числото с тази битова маска и да получим резултата.

Това се прави просто - ако след извършване на логическата операция И резултатът е нула, тогава интересуващият ни бит се нулира (т.е. равен на 0). Ако резултатът НЕ е нула (равен на маската), тогава битът е зададен (равен на 1).

Нека се опитаме да сравним числото 150 (1001 0110 в двоична система) с нашата битова маска. Както можете да видите, в номер 150, третият бит е нулиран. И така (7-мият бит е най-отгоре):

Резултатът е 0, така че заключаваме, че бит 3 е нулиран, тоест също е 0.

И сега с номер 159(1001 1111)

Резултатът НЕ е равен на 0, така че заключаваме, че бит 3 е зададен, тоест той е равен на 1.

След като изпълните командата AND, можете например да изпълните вече познатата ни команда CMP и след това, използвайки някоя от инструкциите за условен преход, да насочите изпълнението на програмата в посоката, от която се нуждаем.

Например, ако създавате програма за микроконтролер, тогава можете да прочетете състоянието на входните портове и да ги опаковате в байт за по-нататъшна обработка (може да е необходима по-нататъшна обработка в случаите, когато например работата на устройството зависи от комбинация от състояния на входовете).

След това сравнявате байта с битовата маска и предприемате действие въз основа на резултата.

Инструкцията AND може да се използва и за други цели. Например, ето този код:

преобразува малка буква а в голяма.

Пример за използване на инструкцията И:

Как работи инструкцията MOV в този пример е описано подробно тук.

Обикновено давам декодирането на съкращението на инструкцията. Това обаче не е задължително в този случай, тъй катоAND се превежда катоAND.