
- •Федеральное агентство по образованию
- •Лабораторная работа №1 Исследование внутренней структуры логических элементов
- •Лабораторная работа №2
- •Лабораторная работа №3
- •Расположение операндов и результатов при умножении
- •Расположение операндов и результатов при делении
- •Лабораторная работа №4 Изучение команд управления программой
Расположение операндов и результатов при умножении
Сомножитель_1 |
Сомножитель_2 |
Результат |
байт |
al |
16 бит в ax: в al – младшая часть результата; ah – старшая часть результата |
слово |
ax |
32 бит в паре dx:ax: в ax – младшая часть результата; dx – старшая часть результата |
двойное слово |
eax |
64 бит в паре edx:eax: в eax – младшая часть результата; edx – старшая часть результата |
Для умножения чисел со знаком предназначена команда imul сомножитель_1. Эта команда выполняется точно так же как и mul. Отличительной ее особенностью является только формирование знака. Если результат мал и умещается в одном регистре, то содержимое другого регистра (старшей части) является расширением знака – все его биты равны старшему биту (знаковому разряду) младшей части результата.
Для деления чисел без знака предназначена команда div делитель. Делитель может находиться в памяти или в регистре и иметь размер 8, 16 или 32 бит. Местонахождение делимого фиксировано и так же, как и в команде умножения, зависит от размера операнда. Результатом выполнения команды деления являются значения частного и остатка. Варианты местоположения и размеров операции деления приведены в таблице 3.2.
Таблица 3.2
Расположение операндов и результатов при делении
Делимое |
Делитель |
Частное |
Остаток |
Слово 16 бит в регистре ах |
байт – регистр или ячейка памяти |
байт в регистре al |
байт в регистре ah |
32 бит dx – старшая часть ax – младшая часть |
Слово16 бит – регистр или ячейка памяти |
Слово 16 бит в регистре ax |
Слово 16 бит в регистре dx |
64 бит edx – старшая часть eax – младшая часть |
Двойное слово 32 бит – регистр или ячейка памяти |
Двойное слово 32 бит в регистре eax |
Двойное слово в регистре edx |
После выполнения команды деления состояния флагов не определено, но возможно возникновение прерывания с номером 0, называемого «деление на ноль». Этот вид прерывания относится к так называемым исключениям. Эта разновидность прерываний возникает внутри микропроцессора из-за некоторых аномалий во время вычислительного процесса. Исключение «деление на ноль» при выполнении команды div может возникнуть по одной из следующих причин:
делитель равен нулю;
частное не входит в отведенную под него разрядную сетку.
Логическое сложение выполняется с помощью команды or, логическое умножение and, инверсия с помощью команды not, исключающее или с помощью команды xor над содержимым регистров ах, bx, cx, dx и ячейкой памяти. Все команды сдвига перемещают биты в поле операнда влево или вправо, в зависимости от кода операции, и имеют одинаковую структуру: коп операнд, счетчик_сдвигов. Логический сдвиг осуществляется командами shl (Shift Logical Left) и shr (Shift Logical Right). В этих командах старший (младший) бит операнда переносится во флаг переноса (cf), а при следующем сдвиге теряется. Причем младший (старший) бит при каждом сдвиге заполняется нулями. Арифметический сдвиг осуществляется командами sal (Shift Arifmetic Left) и sar (Shift Arifmetic Right). Команда sal фактически дублирует команду shl, а команда sar во время операции сдвига все время будет сохранять значение старшего значащего бита операнда.
Команды циклического сдвига подразделяются на две подгруппы – команды простого циклического сдвига и команды циклического сдвига через флаг переноса. К командам простого циклического сдвига относятся команда rol (Rotate Left) и ror (Rotate Right). При их применении старший (младший) бит операнда при сдвиге занимает место младшего (старшего) бита и его копия так же помещается во флаг cf. К командам циклического сдвига через флаг переноса относятся команды rlc(Rotate through Carry Left) и rcr (Rotate through Carry Right). При применении этих команд старший (младший) бит операнда сначала помещается во флаг cf, а затем при следующем сдвиге занимает место младшего (старшего бита).
Составить программу, которая бы обеспечивала выполнение следующих действий:
трижды бы складывала между собой значения операндов, приведенных в таблице 3.3.
вычитала бы из полученной в пункте 1 суммы значение операнда_3
умножала бы полученный результат в пункте 2 на значение суммы, полученное в пункте 1.
делила бы полученный результат в пункте 3 на сумму первого и второго операнда.
проверяла установлены ли биты в единицу (табл. 3.3).
Таблица 3.3
Исходные данные к программе
№ |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
Оп_1 |
4E (ax) |
8A |
1B (ah) |
22 (ch) |
90 (al) |
FF |
A0 (dx) |
34 |
80 (cl) |
8D |
90 (ah) |
67 |
09 (cl) |
76 |
50 (cl) |
Оп_2 |
20 |
AA (cx) |
6A (bl) |
B4 (cl) |
10 (ah) |
EE |
67
|
56 (bx) |
FE (dl) |
5F (ax) |
11 (bh) |
1A (ah) |
1E (al) |
FD (ax) |
78 (ax) |
Оп_3 |
67 (bx) |
D4 (dx) |
14 (cx) |
D4 (dl) |
12 (bl) |
DD |
9E (bx) |
90 (cx) |
C1 (bl) |
9E (cl) |
DE
|
B0 (bx) |
AF (bh) |
90 |
80 |
Номера бит |
1,3 |
0,1 |
0,3 |
1,2 |
1,3 |
2 |
0,1 |
2,3 |
1,3 |
1,4 |
2,4 |
0,1 |
3 |
2 |
1 |
3.4. Содержание отчета
Титульный лист. Мнемоника программ с краткими комментариями к командам. Выводы по каждому пункту работы.