Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
вопросы - ответы 2010 финал.docx
Скачиваний:
5
Добавлен:
14.09.2019
Размер:
393.65 Кб
Скачать

2) Режимы адресации микропроцессора INTEL 8088.

Данные в МП могут располагаться в 3-х местах:

    1. Непосредственно в команде

    2. В регистре

    3. В оперативной памяти

Режимы адресации МП используются для указания места данных и способа их выборки.

Режим адресации

Способ выборки данных, формат записи операнда

Сегментный регистр по умолчанию

1.

Непосредственный операнд

Значение операнда находится в команде на месте операнда 2.

Пример: 50 20Н “B”

2.

Регистровая адресация

Данные находятся в регистре, а в команде указывается номер регистра.

Пример: Bx SI CH DS

Далее данные находятся в ОП, режимы адресации отличаются способом формирования адреса

3.

Прямая адресация

Смещение (Х) берется из команды.

Пример: [20H] [30] A

DS

4.

Косвенная адресация

Исполнительный адрес (смещение в сегменте) берется из регистра.

Пример: [Bx] [SI] [DI]

[BP]

←DS

←SS

5.

Базовая адресация

Исполнительный адрес формируется как сумма значений базового регистра и смещения, заданного в команде.

Пример: [Bx + 20H] [Bx + A]

[BP + A] [BP + 20]

←DS

←SS

6.

Индексная адресация

То же, что п.5, только индексные регистры.

Пример: [SI + 20H] [DI + A]

DS

7.

Базово-индексная адресация

Исполнительный адрес получается как сумма значений: базовый регистр + индексный регистр + смещение в команде

Пример: [Bx + SI + 20H]

[Bx + DI + A]

[BP + SI + 20H]

[BP + DI + A]

←DS

←SS

3.Язык Ассемблер. Константы. Определение двоичных данных.

Числовые константы используются для определения арифметических значений и адресов памяти. Константы определяются без кавычек. Для большинства директив определения данных ассемблер хранит сгенерированные байты в обратной последовательности справа налево.

Двоичные константы. Двоичный формат используется двоичные цифры 0 и 1, а числа в этом формате обозначаются указанием основания системы счисления В. Обычно двоичные формат используется для значений побитовых операций and, or, xor, test.

4. Язык Ассемблера.Определение десятичных данных.

Десятичный формат допускает десятичные цифры 0…9 и обозначается последней буквой D, которую можно не указывать. В объектном коде десят.число 125 преобразуется в шестнадц. 7D

Запись констант в Ассемблере

Форматы записи значений:

  • десятичные константы ([+][-] 510 [D], -20, 530);

  • 16-ричная константа - это последовательность 16-ричных чисел. Первая цифра от 0 до 9 (с буквы начинать нельзя, иначе это будет восприниматься как идентификатор) (20H, 0FAH, просто FAH нельзя, идентификатор);

  • двоичные числа - последовательность 0 и 1 с B на конце (01110Вб 1001В);

  • символьная константа, при записи берется в одинарные кавычки ('A', '2');

  • строковая константа ('УРА!' и т.д.).

db 1 байт

dw 2 байта = 1 слово

dd 4 байта = 2 слова

dt 10 байт = 5 слов

Упакованные десятичные числа

В упакованном формате каждая цифра занимает 4 бита. Пример записи числа 34 в 10-ной и 16-ричной системах:

Распакованный формат десятичных чисел

Каждая цифра занимает 1 байт.

5) Язык Ассемблера. Команды пересылки данных

В общем случае система команд процессора включает в себя следующие четыре основные группы команд:

  • команды пересылки данных;

  • арифметические команды;

  • логические команды;

  • команды переходов.

Команды пересылки данных не требуют выполнения никаких операций над операндами. Операнды просто пересылаются (точнее, копируются) из источника в приемник Источником и приемником могут быть внутренние регистры процессора, ячейки памяти или устройства ввода/вывода. АЛУ в данном случае не используется.

КПД выполняют следующие важнейшие функции:

  • загрузка (запись) содержимого во внутренние регистры процессора;

  • сохранение в памяти содержимого внутренних регистров процессора;

  • копирование содержимого из одной области памяти в другую;

  • запись в устройства ввода/вывода и чтение из устройств ввода/вывода.

1.1 Команда mov

Требования:

  • длина операндов должна быть одинаковая(байт → байт, слово → слово);

  • запрещена операция ОП→ОП !!! (потому что может быть задано только 1 смещение, а ОП→ОП требует 2).

Допустимые регистры: ALDH, AXDX, SI .. SP (регистры общего назначения)

Примеры:

MOV AX, 58 // (AX ← 58) РОН ← НО

MOV DL, CH // (DL ← CH) РОН ← РОН

MOV A, SI //(A ← SI)

1.2 Команда mov для сегментных регистров

Примеры:

MOV AX, 200H

MOV DS, AX

1.3 Команда загрузки адреса

LEA OП1, ОП2 //Адрес ОП2 → ОП1

РОН ОП

Примеры:

80 A DW 50H

MOV AX, A //AX = 50H

LEA BX, A //BX = 80H

LEA BX, [BX + 2] //BX = 82H

MOV BX, OFFSET A //BX = 80H

В некоторых процессорах (например, в процессоре 8086) специально выделяются функции обмена с устройствами ввода/вывода. Команда IN используется для ввода (чтения) информации из устройства ввода/вывода, а команда OUT используется для вывода (записи) в устройство ввода/вывода. Обмен информацией в этом случае производится между регистром-аккумулятором и устройством ввода/вывода. В более продвинутых процессорах этого же семейства (начиная с процессора 80286) добавлены команды строчного (цепочечного) ввода (команда INS) и строчного вывода (команда OUTS). Эти команды позволяют пересылать целый массив (строку) данных из памяти в устройство ввода/вывода (OUTS) или из устройства ввода/вывода в память (INS). Адрес памяти после каждого обращения увеличивается или уменьшается (как и в случае с командой MOVS). Часто выделяются специальные команды для сохранения в стеке и для извлечения из стека (PUSH — сохранить в стеке, POP — извлечь из стека). Эти команды выполняют пересылку с автоинкрементной и с автодекрементной адресацией (даже если эти режимы адресации не предусмотрены в процессоре в явном виде). Может быть предусмотрен обмен информацией между внутренними регистрами, между двумя половинами одного регистра (SWAP) или между регистром и ячейкой памяти.

6. Язык ассемблера. Операции сложения с двоичным данными.

Add – команда сложения; Adc – команда сложения с переносом

Команды сложения формулируют все флаги.

MOV BX, 20 //BX=20

ADD BX, 15 //BX=35

ADD A, BX //A=A+BX

Команда формирует все флаги. Предназначена для сложения длинных чисел (т.е. длиной больше 2 байт).

Также к к-м сложения относится команды INC (инкремент)

INC ОП1, ОП1+1ОП1

Операндами могут быть POМ и ОП.

Команда формирует все флаги, кроме CF, который сохраняет свое значение.

INC исп-ся для изменения адресных регистров.

7. Язык Ассемблера. Операции сложения с десятичными данными.

Существуют два формата представления десятичных чисел:

  • упакованный;

  • распакованный.

Выполняется в два действия: 1) сложение двоичных чисел, 2) десятичная коррекция.

Коррекция выполняется с помощью команд : DAA – для упакованных. AAA – для распакованных

Пример:

35+28

A db 35H

B db 28H

MOV AL, A ; 35 = 53 дес.

ADD AL, B ; 28 = 40 дес.

DAA ; 5D= 93 дес.

Во время десятичной коррекции если результат больше 99, ТОО флаг Cf уст-ся в1 и в регистр АH записывается 1.

Пример 2: распак-е числа.

При выполнении сложения коррекции старший полубайт игнорируется.

A db ‘8’

B db ‘5’

MOV AL, A ; 38

ADD AL, B ; 35

AAA ; 6D

01

03

AH

AL

CF=1

9.Операции вычитания с десятичными данными.

Для выполнения правильного вычитания используется команда коррекции DAS. Если эту команду выполнять сразу после SUB(SBB DEC)и в регистре ал находятся разность двух упакованных двоично-десятичных чисел, то в результате в ал запишется упакованное двоично - десятичное число которое должно быть правильный результат. Данная команда выполняет следующие действия:

- если младшие четыре бита AL больше 9 или флаг AF =1то AL уменьшатся на 6, CF устанавливается, если при вычитании произошел заем, и Af устанавливается в 1.

- если теперь старшие четыре бита AL больше 9 или CF = 1то AL уменьшится на 60h и CF установится в 1

-иначе CF=0

10. Язык Ассемблера. Операции умножения.

Умножение выполняется 2-мя командами: MUL и IMUL.

MUL – умножение беззнаковых чисел

mul ОП1

Команда выполняет умножение двух операндов без учета знаков. Алгоритм зависит от формата операнда команды и требует явного указания местоположения только одного сомножителя, который может быть расположен в памяти или в регистре. Местоположение второго сомножителя фиксировано и зависит от размера первого сомножителя:

  • если операнд, указанный в команде — байт, то второй сомножитель должен располагаться в al;

  • если операнд, указанный в команде — слово, то второй сомножитель должен располагаться в ax;

  • если операнд, указанный в команде — двойное слово, то второй сомножитель должен располагаться в eax.

Результат умножения помещается также в фиксированное место, определяемое размером сомножителей:

  • при умножении байтов результат помещается в ax;

  • при умножении слов результат помещается в пару dx:ax;

  • при умножении двойных слов результат помещается в пару edx:eax.

IMUL – умножение знаковых чисел

imul ОП1

Умножение может выполняться по двум схемам:

AL*ОП1(1байт)=AH|AL

AX*ОП1(2байтa)=DX|AX

Выбор схемы умножения осуществляется по длине ОП1

Команда формирует 2 флага и устанавливает их в одно значение.

Флаги CF и OF равны 1, если значение превысило длину операнда.

A db 0FEH

MOV AL,2

MUL A AX:01FC (508) CF,OF=1

MOV AL,2

IMUL A AX:FFFC (-4) CF,OF=0