Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка по МО.doc
Скачиваний:
51
Добавлен:
01.06.2015
Размер:
354 Кб
Скачать
☆

3. Пример выполнения работы

Дан массив из 10 байтов. Все байты имеют нулевые старшие биты. Необходимо каждый байт, содержащий 1 в 0-м бите, допол­нить до четного числа единиц установкой 7-го бита байта, каждый байт, содержащий 0 в 0-м бите, дополнить до нечетного числа единиц установкой 7-го бита байта.

Текст программы:

model SMALL

stack 100h

dataseg

MB db 04h,07h,11h,23h,04h,38h,3Fh,2Ah,0Dh,34h

codeseg

startupcode

lea BX, MB ; BX - текущий адрес массиваMB

mov CX, 10 ; CX - счетчик числа итераций

BEG:

mov AL, [BX] ; считать очередной байт массива

test AL, 00000001b; установлен-ли бит0 ?

jz BIT0CLR ; нет, бит 0 сброшен

; бит 0 установлен

test AL, 0FFh ; четное число единиц?

jp OK ; да, больше ничего делать не надо

or AL, 80h ; нечетное, дополнить до четного

jmp short OK

BIT0CLR: ; бит 0 сброшен

test AL, 0FFh ; четное число единиц?

jnp OK ; нет, больше ничего делать не нужно

or AL, 80h ; четное, дополнить до нечетного

OK:

mov [BX], AL ; записать измененный байт массива

inc BX ; BX<-адрес очередн. элемента массива

loop BEG

;Конец работы

QUIT: exitcode 0

end

4. Варианты заданий

  1. Дан массив из 10 байтов. Посчитать количество байтов, в которых сброшены 6 и 4 биты.

  2. Дан массив из 8 байтов. Рассматривая его как массив из 64 бит, посчитать количество единиц.

  3. Дан массив из 8 байтов. Рассматривая его как массив из 64 бит, посчитать длину самой длинной последовательности единиц.

  4. Дан массив из 8 байтов. Рассматривая его как массив логиче­ских значений x0 x1 x2 x3 x4 x5 x6 x7 (true – есть ненулевые биты в байте, false – все биты нулевые), вычислить логическую фор­мулу f = (x7&~x6&x3&x1) V (x6&x4&x2&x1&~x0) V (~x7&x6&x3&x1) .

  5. Дан массив из 5 байтов. Рассматривая его как массив из 10 тетрад, найти «исключающее или» всех 10 тетрад.

  6. Дан массив из 10 байтов. Посчитать количество байтов, в кото­рых сброшены 5 или 1 биты.

  7. Рассматривая байт как набор логических значений x7 x6 x5 x4 x3 x2 x1 x0 (true – 1, false – 0), вычислить логиче­скую формулу f = (x7&~x6&x3&x1) V (x6&x4&x2&x1&~x0) V (~x7&x6&x3&x1) .

  8. Дан массив из 10 байтов. Посчитать количество байтов, в кото­рых установлены 3 и 7 биты.

5. Контрольные вопросы

  1. В чем отличие команд test DST, SRC и and DST, SRC ?

  2. Как сбросить 5-й бит переменной – байта ВВ ?

  3. Как установить 5-й бит переменной – байта ВВ ?

  4. Как проинвертировать 5-й бит переменной – байта ВВ ?

  5. Как проверить, установлен ли 5-й бит переменной – байта ВВ ?

  6. Как проверить, четным или нечетным является количество установленных бит в переменной-байте ВВ ?

  7. Какие флаги условий модифицируются после выполнения команд and, or, xor ?

  8. В чем основное отличие команд логических и арифметических сдвигов ?

  9. Укажите максимальное число двоичных разрядов, на которое можно сдвинуть операнд с помощью одной команды сдвига ?

  10. В паре строк mov CL, 8 "сдвиг" BL, CL какие команды можно подставить вместо "сдвиг", чтобы содержимое BL не изменилось ?

  11. В паре строк "сдвиг влево" BL, 1 "сдвиг вправо" BL, 1 какие команды можно подставить вместо "сдвиг влево" и "сдвиг вправо", чтобы содержимое BL не изменилось ?