Программирование на Ассемблере


         

10.1 Основные команды для работы с битами


Основные команды заданы в табл. 10.1

Таблица 10.1. Основные команды для работы с битами

Но-мер

Назначение

Код

Выполняемые действия

Формируемые флаги

1

Побитовое сложение

OR

оп1|=оп2

c=0, o=0, z, p, s

2

Побитовое умножение

AND

оп1&=оп2

c=0, o=0, z, p, s

3

Проверка

TEST

оп1&оп2

c=0, o=0, z, p, s

4

Побитовое

Отрицание

NOT

~оп1

Флаги не изменяются

5

Сложение по модулю 2

XOR

оп1^=оп2

c=0, o=0, z, p, s

Примеры использования команд.

Пример1. Записать команды для:

·        установки в 1 заданного бита в байте;

·        установки в 0 заданного бита в слове;

·        инвертирования заданного бита в двойном слове;

·        проверки заданного бита в двойном слове;

Пусть номер бита является константой

BitNumber  EQU  3

b        db      37h

w       dw     1234h

d1      dd      12345678h

d2      dd      12345678h

...

;        установка в 1 заданного бита в байте

OR    b, 1 SHL BitNumber

;        установка в 0 заданного бита в слове

AND  w, NOT (1 SHL BitNumber)

;        инвертирование заданного бита в двойном слове

XOR  d1, 1 SHL BitNumber

проверка заданного бита в двойном слове

TEST d2, 1 SHL BitNumber

jz       zero

...

zero:

Пример 2.

Задан массив байтов. Переписать в другой массив те байты первого массива, в которых биты 0 и 4 единичные, биты 1, 3, 7 - нулевые, значения остальных битов не имеет значения.

Для решения этой задачи сформируем маски для выделения требуемых битов и проверки заданных битов на 1. Первая маска может быть сформирована так:

(1 shl 0) or (1 shl 4) or (1 shl 1) or (1 shl 3) or (1 shl 7).

Вторая маска имеет вид:

(1 shl 0) or (1 shl 4).

Ideal

p386

model flat

extrn ExitProcess:proc

dataseg

a          db        11h, 12h, 23h, 34h, 56h, 78h, 90h, 0a1h, 0b2h, 0c3h, 0d4h, 0e5h




Содержание  Назад  Вперед