И инструкция
![]() | Как да научите английски |
В днешно време всеки трябва да знае английски. Особено програмист. Тъй като доста голяма част от документацията съществува само на английски език. А един професионалист не може да чака някой да му преведе документацията. Той трябва да може бързо да получава необходимата информация и да я използва, независимо дали е на английски или български език. Връзки към курсове на английски език.
ИнструкциятаИ изпълнява логическо И между всички битове на двата операнда. Резултатът се записва в първия операнд. Синтаксис:
И НОМЕР 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.