Команды сдвигов.
Д
ействия
команд сдвигов показаны на рисунке 1.
Поле операнда всех команд имеет вид mem/reg,count. Здесь mem/reg обычным образом адресует общий регистр или ячейку памяти, содержащие байт или слово, а счетчик count определяет число сдвигов. Счетчик может быть указан как константа 1 (статический сдвиг на один бит) или как регистр CL (динамический сдвиг, в котором число сдвигов определяется содержимым CL). С помощью команд сдвигов осуществляется циклические (кольцевые) и «обычные» сдвиги. В циклических сдвигах выдвигаемый бит помещается на место освобождающегося бита. Команды RCL и RCR называются циклическими сдвигами через перенос, так как в кольцо сдвига включен флаг CF. «Обычные» сдвиги, в которых выдвигаемый бит теряется, подразделяются на логические (команды SHL и SHR) и арифметические (команды SAL и SAR) сдвиги. В арифметическом сдвиге вправо знаковый бит не сдвигается, а копируется в соседний справа бит.
При использовании команд сдвигов флаги модифицирует следующим образом:
флаг CF всегда содержит значение последнего выдвинутого бита; состояние флага AF всегда не определено;
в статическом сдвиге OF=l, если знаковый бит операнда изменился, а в динамическом сдвиге состояние OF не определено;
в «обычных» сдвигах флаги SF, ZF и PF модифицируются в соответствии с полученным результатом.
2. Задание для домашней подготовки.
Повторить команды сдвигов микропроцессора і8086;
Повторить команды обработки цепочек микропроцессора і8086;
Повторить назначение флагов регистра флагов микропроцессора і8086;
Повторить адресацию операндов в командах микропроцессора і8086;
Повторить типы данных для микропроцессора і8086;
3. Порядок выполнения работы.
Ознакомиться с заданием и проанализировать его.
Составить программу согласно заданию в кодах.
Набрать текст составленной программы в текстовом редакторе отладчика.
Выполнить трансляцию программы (в случае возникновения ошибок исправить их).
Сделать пошаговое выполнение программы и убедиться в правильности ее работы (в случае неправильности внести исправления в текст программы и повторить п.4-5)
4. Задание по лабораторной работе.
Задан массив А однобайтных чисел. Используя команду сдвига command подсчитать количество bit в объявленных данных в каждой единице данных с i по j бит включительно (i>j). Результат подсчета для каждого элемента сохранять в массиве В. Для доступа к элементам массива источника и приемника использовать команды работы со строками. Для четных вариантов обработку массива вести от последнего к первому элементу, для нечетных – от первого к последнему. В качестве массива данных взять строку ‘Фамилия_студента’, для четных вариантов bit=0, для нечетных bit=1.
Таблица 1/ Таблица вариантов заданий.
вариант |
command |
i |
j |
вариант |
command |
i |
j |
1 |
shl |
7 |
5 |
17 |
shl |
5 |
0 |
2 |
shr |
7 |
4 |
18 |
shr |
4 |
2 |
3 |
sal |
7 |
3 |
19 |
sal |
4 |
1 |
4 |
sar |
7 |
2 |
20 |
sar |
4 |
0 |
5 |
rol |
7 |
1 |
21 |
rol |
3 |
1 |
6 |
ror |
7 |
0 |
22 |
ror |
3 |
0 |
7 |
rcl |
6 |
5 |
23 |
rcl |
7 |
5 |
8 |
rcr |
6 |
4 |
24 |
rcr |
7 |
4 |
9 |
shl |
6 |
3 |
25 |
shl |
7 |
3 |
10 |
shr |
6 |
2 |
26 |
shr |
7 |
2 |
11 |
sal |
6 |
1 |
27 |
sal |
7 |
1 |
12 |
sar |
6 |
0 |
28 |
sar |
7 |
0 |
13 |
rol |
5 |
4 |
29 |
rol |
6 |
5 |
14 |
ror |
5 |
3 |
30 |
ror |
6 |
4 |
15 |
rcl |
5 |
2 |
31 |
rcl |
6 |
3 |
16 |
rcr |
5 |
1 |
32 |
rcr |
6 |
2 |
