Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МУ_II_05.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
501.25 Кб
Скачать

Расположение операндов и результатов при умножении

Сомножитель_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, а затем при следующем сдвиге занимает место младшего (старшего бита).

Составить программу, которая бы обеспечивала выполнение следующих действий:

  1. трижды бы складывала между собой значения операндов, приведенных в таблице 3.3.

  2. вычитала бы из полученной в пункте 1 суммы значение операнда_3

  3. умножала бы полученный результат в пункте 2 на значение суммы, полученное в пункте 1.

  4. делила бы полученный результат в пункте 3 на сумму первого и второго операнда.

  5. проверяла установлены ли биты в единицу (табл. 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. Содержание отчета

Титульный лист. Мнемоника программ с краткими комментариями к командам. Выводы по каждому пункту работы.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]