Микропроцессор Intel 486

2.4. Список команд микропроцессора, используемых
в лабораторных заданиях

2.4.1. Команды, распознаваемые учебной моделью

A) Команды пересылки данных и загрузки адресов.
B) Арифметические команды и команды сравнения.
C) Логические команды.
D) Команды сдвига.
E) Команды работы со стеком.
F) Прочие команды.

Во всех нижеследующих обозначениях команд R обозначает регистр, М – ссылку на память (операнд с прямой адресацией), Im – непосредственный операнд, Ор1 и Ор2 – первый и второй операнды в команде.

A) Команды пересылки данных и загрузки адресов.

MOV Op1, Op2

Пересылка (Move) информации в направлении от второго операнда к первому. Допустимы следующие сочетания операндов:

    MOV R, R
    MOV R, M
    MOV R, Im
    MOV M, R
    MOV M, Im

Примеры:

    MOV AX, BX
    MOV CX, 5
    MOV DX, Data
……………
Data DW 50
; Директива определения переменной в памяти

Видно, что пересылки типа "память-память" недопустимы. Это особенность команды MOV для всех микропроцессоров фирмы Intel.

LEA R, M

Пример:
Stroka DB 'test'          ; Директива определения цепочки байтов в памяти
              LEA DX, Stroka; Загрузить начальный адрес цепочки байтов в регистр

B) Арифметические команды и команды сравнения.

ADD Op1, Op2

Сложение двух операндов с записью результата (суммы) на место первого операнда (который при этом теряется). Команда влияет на флаги CF, ZF, PF, AF, SF, OF. Допустимы следующие сочетания операндов:

    ADD R, R
    ADD R, M
    ADD R, Im

Пример:
    MOV AX, 10
    MOV BX, 20
    ADD AX, BX
   ; В регистре АХ – сумма (10+20)

SUB Op1, Oр2

Вычитание второго операнда из первого. Результат (разность) размещается на месте первого операнда (иными словами, Ор1 стрелка Ор1-Ор2). Допустимые сочетания операндов и влияние на флаги – то же, что и в команде ADD.

Пример:
     SUB AX, 15

MUL Op

Команда умножения. Манипулирует либо со словами, либо с байтами. В байтовом варианте команды множимое размещается в регистре AL, множитель задается операндом Ор. Результат (произведение) образуется в регистре АХ. В варианте работы со словами множимое располагается в АХ, множитель задается в помощью Ор, результат образуется как двойное слово в регистрах DX и AX. Допустимые операнды:

    MUL R
    MUL M

Влияние на флаги: OF=CF=1, если старшая половина произведения, находящаяся в регистрах AH или DX, отличается от нулевой (то есть разрядность результата превысила разрядность операндов). Состояния остальных флагов не определены.

Пример:
    MOV AL, 3    ; множимое
    MOV BL, 5    ; множитель
    MUL BL       ; производим умножение
    OUT 0, AX    ; результат выводим на индикатор в порту 0
    HLT

В результате запуска этой программы мы увидим на индикаторе порта 0 число 15.

DIV Op

Команда деления. Как и предыдущая команда, может работать со словами или байтами:

Разрядность операнда Делимое Делитель Частное Остаток
8 бит AH…AL Op AL AH
16 бит DX…AX Op AX DX

Допустимые операнды:

    DIV R
    DIV M

Состояния всех флагов не определены (произвольны). Если делитель равен нулю, то попытка выполнить команду приведет к возникновению прерывания номер 0.

Операции инкремента/декремента

    INC R
Увеличить содержимое регистра на единицу.

    DEC R
Уменьшить содержимое регистра на единицу.

Обе команды влияют на флаги ZF, PF, AF, SF, OF.

CMP Op1, Op2

Команда сравнения. Выполняет, как и команда SUB, вычитание Op1-Op2, но результат вычитания фиксируется лишь в одном из внутренних регистров АЛУ; оба операнда команды СМР не изменяются. Результат действия команды проявляется в том, что она так же влияет на флаги, как и команда SUB. Допустимые сочетания операндов:

    CMP R, R
    CMP R, M
    CMP R, Im
    CMP M, R
    CMP M, Im

C) Логические команды.

AND Op1, Op2 – поразрядное логическое И
OR Op1, Op2 – поразрядное логическое ИЛИ
XOR Op1, Op2 – поразрядное логическое ИСКЛЮЧАЮЩЕЕ ИЛИ

Допустимые сочетания операндов:
-- R, R
-- R, M
-- R, Im

NOT Ор – поразрядное логическое отрицание (функция НЕ).

В учебной модели микропроцессора i486 здесь разрешается использовать только регистровую адресацию.

Все логические команды действуют на флаги SF, ZF, PF и, кроме того, сбрасывают в ноль флаги CF и OF.

D) Команды сдвига.

SHR R, Im – арифметический сдвиг содержимого регистра вправо
SHL R, Im – арифметический сдвиг содержимого регистра влево

Количество сдвигов задается вторым операндом. Двоичный разряд, выдвигаемый за пределы слова (байта), заносится во флаг CF (и далее может быть использовано командами перехода типа JC или JNC).

Примеры:
    SHL AX, 1
    SHR BX, 2

E) Команды работы со стеком.

PUSH R
POP R

Первая из этих команд записывает в стек (см. п. 2.2) содержимое указанного регистра; значение в указателе стека SP при этом уменьшается на два (стек растет в сторону младших адресов). Вторая команда извлекает операнд из стека и записывает его в указанный регистр; значение в указателе стека увеличивается на два. Отметим, что стек работает только со словами; записать туда или прочитать из стека один байт нельзя. Эти команды особенно часто применяются для того, чтобы временно сохранить значение какого-либо регистра (перед тем, как его изменить), а затем вновь восстановить.

F) Прочие команды.

OUT Im, R

Команда вывода содержимого регистра в порт. Номер порта (Im) указывается либо константой, либо с помощью регистра DX (этот последний способ в учебной модели МП i486 не реализован).

Примеры:
     OUT 0, AX
     OUT 1, CX

Существует также команда ввода данных из порта (IN port, R), в данном лабораторном практикуме не рассматриваемая.

LOOP LABEL     (LABEL – это обозначение метки)

Очень важная в практическом программировании команда, реализующая цикл со счетчиком в регистре СХ. Работает она следующим образом: сначала содержимое СХ уменьшается на единицу, затем, если СХ не равен нулю, выполняется переход на метку. Далее цикл повторяется.

Пример:
     MOV CX, 3  ; Начальное значение
     M1:         ; Метка
     MOV AX, CX ; Для вывода в порт нужен именно регистр АХ
     OUT 0, AX   ; Вывод (последовательно) числовых констант 3, 2, 1 в порт номер 0
     LOOP M1     ; Команда цикла
     HLT         ; Останов

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

HLT – команда останова (прекращения работы).

Здесь эта команда используется лишь при работе с учебной программной моделью микропроцессора. Программа, написанная для реального компьютера, обычно завершается не командой HLT, а той или иной командой передачи управления операционной системе.


Назад Содержание Вперёд