Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Mov cx, b ; число сдвигов



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 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.006 с)...