
5. Содержание отчета
Задание по лабораторной работе;
Текст программы с комментариями;
Входные данные для программы;
Краткий обзор команд сдвигов и обработки строк микропроцессора і8086;
Ответы на вопросы:
в чем отличие команд shl (shr) от sal (sar)?
в чем отличие команд rol (ror) от rcl (rcr)?;
6. Пример выполнения задания.
Задан массив А однобайтных чисел. Используя команду сдвига shr подсчитать количество bit = 1 в объявленных данных в каждой единице данных с i=5 по j=3 бит включительно. Результат подсчета для каждого элемента сохранять в массиве В. Для доступа к элементам массива источника и приемника использовать команды работы со строками. Обработку массива вести от последнего к первому элементу. В качестве исходного массива данных строка ‘Petrov’.
Входные данные для программы
Данные |
P |
e |
t |
|||||||||||||||||||||
Данные (h) |
50h |
65h |
74h |
|||||||||||||||||||||
Номер бита |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
Значение бита |
0 |
1 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
0 |
1 |
0 |
1 |
0 |
1 |
1 |
1 |
0 |
1 |
0 |
0 |
Данные задачи |
х |
х |
0 |
1 |
0 |
х |
х |
х |
х |
х |
1 |
0 |
0 |
х |
х |
х |
х |
х |
1 |
1 |
0 |
х |
х |
х |
Результат |
1 |
1 |
2 |
Данные |
r |
o |
v |
|||||||||||||||||||||
Данные (h) |
72h |
6Fh |
76h |
|||||||||||||||||||||
Номер бита |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
Значение бита |
0 |
1 |
1 |
1 |
0 |
0 |
1 |
0 |
0 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
0 |
1 |
1 |
0 |
Данные задачи |
х |
х |
1 |
1 |
0 |
х |
х |
х |
х |
х |
1 |
0 |
1 |
х |
х |
х |
х |
х |
1 |
1 |
0 |
х |
х |
х |
Результат |
2 |
2 |
2 |
;сегмент данных
A db 'Petrov' ; исходные данные
B db 6 dup (?) ; массив результатов
;сегмент кода
mov si,offset A+5 ; в SI адрес элемента-источника
mov di,offset B+5 ; в DI адрес элемента-приемника
std ; установка флага DF
mov cx,6 ; число элементов массива
cycle:
mov ah,0 ; в AH число bit = 1 в элементе массива
lodsb ; в AL загрузить элемент массива
shr al,1 ; сдвинуться к
shr al,1 ; первому
shr al,1 ; обрабатываемому биту
mov bl,3 ; число обрабатываемых бит
bit:
shr al,1 ; выдвинуть бит во флаг CF
jnc m ; если бит не равен 1 перейти к следующему
inc ah ; битов равных 1 на один больше
m:
dec bl ; число обрабатываемых бит на один меньше
jnz bit ; если не все обработаны перейти к обработке следующего бита
mov al,ah ; результат поместить в AL
stosb ; сохранить результат в массиве-приемнике
loop cycle ; перейти к обработке следующего элемента массива
end