![]() |
Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | |
|
Xor bl, bl; обнуление BL
LL: shl al, 1; сдвиг влево на один разряд
Jnc NO; переход, если нет переноса
Inc bl; иначе увеличить BL
NO: loop LL; возврат, если cx ¹0
Пример выполнения работы
Дан массив из 10 байт. Все байты имеют нулевые старшие биты. Необходимо каждый байт, содержащий единицу в нулевом бите, дополнить до четного числа единиц установкой седьмого бита. Текст решения представлен в листинге 4.1.
Листинг 4.1. Решение
Data segment
NB db 04h, 07h, 14h, 23h, 04h,38h, 3Fh, 2Ah0Dh, 34h
Data ends
Code segment
assume cs: code. ds:data
START: mov ax, data
Mov ds, ax; Загрузить сегментный адрес данных
Lea bx, NB; bx-текущий адрес массива NB
Mov cx, 10; cx-счетчик числа интераций
BEG: mov al, [bx]; считать очередной байт массива
test al, 1b; установлен ли бит 0?
Jz BITOCLR; нет, бит 0 сброшен
; бит 0 установлен
test al, 0ffh; четное число единиц?
Jp OK; да, больше ничего делать не надо
or al, 80h; нечетное дополнить до четного?
Jmp short OK
; бит 0 сброшен
BITOCLR: test al, 0ffh; четное число единиц?
Jnp OK; нет, больше ничего делать не нужно
Or al,80h; нечетное, дополнить до нечетного
OK: mov [bx], al; записать измененный байт массива
Loop BEG
QUIT: mov ax, 4c00h; Код завершения 0
Int 21h; Выход в DOS
Code ends
End START
Варианты заданий
Дата публикования: 2014-11-28; Прочитано: 428 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!