Скачиваний:
15
Добавлен:
11.04.2015
Размер:
23.21 Кб
Скачать
  1. Система команд ЭВМ.

МП имеет 92 типа команд. Их можно подразделить на семь функциональных групп:

• команды пересылки данных, осуществляющие обмен информацией между регистрами, ячейками памяти и портами ввода- вывода;

• арифметические команды, выполняющие арифметические операции над двоичными или 2 /10 (в формате BCD - binary coded decimal) числами;

• команды манипулирования битами, выполняющие сдвиг, циклический сдвиг и логические операции со значениями регистров и ячеек памяти;

• команды передачи управления. К ним относятся переходы к командам, вызов процедуры и возврат из неё;

• команды обработки строк, перемещающие, сравнивающие и сканирующие строки данных;

• команды прерывания, отвлекающие МП на обработку некоторых специфических ситуаций;

• команды управления процессором, устанавливающие и сбрасывающие флаги состояния, а также изменяющие режим функционирования МП.

Команды пересылки данных. Эти команды в свою очередь подразделяются на:

- команды общего назначения:

- команды ввода - вывода;

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

- команды пересылки флагов.

Команды общего назначения

Мнемо-код команды

Значение команды и её адресность

Флаги of df if tf sf zf af pf ef

Mov

Переслать значение (2-х адресная)

Команды

Push

Записать в стек (одно адресная)

Не

Pop

Прочесть из стека (одно адресная)

Изменяют

Xchg

Обменять значения (2-х адресная)

Флагов

Xlat

Выбрать значение из табл. (1-адр.)

Общая форма команды mov:

mov <приёмник>, <источник>

Содержимое источника пересылается в приёмник.

Нельзя использовать следующие сочетания операндов:

а) нельзя пересылать данное из памяти в память: если надо переслать данное из ячейки памяти с именем Р в ячейку W, надо поступить

так: mov ах, Р; Р -> ах

mov W, ах; ах -> W

б) нельзя непосредственно адресуемый операнд загрузить в регистр сегмента, надо поступить так:

mov ах, dseg

mov ds, ах

в) нельзя переслать непосредственно значение одного регистра сегмента в другой. Делать это можно только через регистр общего назначения.

в) нельзя переслать непосредственно значение одного регистра сегмента в другой. Делать это можно только через регистр общего назначения.

Команды push и pop. Эти команды работают со стеком. Указателем на адрес стека является регистр SP. Необходимо помнить, что при работе со стеком его адреса меняются от старшего к младшему. Старший адрес называется вершиной стека и заносится в sp. Команда push помещает содержимое регистра или ячейки памяти в стек, а команда pop извлекает содержимое с вершины стека и помещает его в регистр или ячейку памяти. Причём помещать в стек можно данное размером в слово или непосредственное значение, а извлекать - слово.

Общий вид стековых команд: PUSH <источник>

POP <приёмник>

Например:push si

push ds

push count

push 125

Так как стек после использования должен быть освобождён, то команд pop должно быть выполнено столько же, сколько было команд push. Указатель стека sp всегда указывает на вершину стека, т. е. на последнее значение, занесённое в стек, поэтому извлекать данные из стека надо в обратной последовательности по отношению к занесению их в стек. Понятно, что число, занесённое в стек, должно быть извлечено из стека и помещено либо в регистр, либо в ячейку памяти.

В нашем примере поместим его в регистр общего назначения ах. Итак:

pop ах ; 125-> ах

pop count

pop ds

pop si

Значение sp меняется следующим образом: прежде чем команда push занесёт значение в стек, от sp будет вычтена 2, т. е. sp=sp-2 и только после этого первое значение попадёт в стек, следующее значение наmдва байта ниже и т.д. При работе команды pop данное вначале выбирается и после этого, к sp прибавляется 2: sp = sp + 2.

Команды push и pop могут иногда заменять команду mov, правда, недостатком этой замены является то, что 2 команды mov выполняются за 4 цикла, a push - pop занимают 26 циклов тактового генератора.

Команда XCHG (exchange - обменять). Меняет между собой значения двух регистров или регистра и ячейки памяти. Однако не может обменять значений регистров сегментов и двух ячеек памяти. Может обменивать слова или байты.

Например: xchg ax, bx

xchg al, bl

xchg word_s, dx

xchg dl, byte_b

Команда XLAT (translate - определить). Извлекает значение по его номеру из таблицы байтов и загружает его в регистр al. Таблица может содержать до 256 элементов. Перед исполнением команды начальный адрес таблицы надо загрузить в регистр bх, а номер извлекаемого байта - в регистр al.

Пример: mov al, 5

mov bx, offset b_tab

xlat b_tab ; можно имя таблицы не указывать.

Команды ввода/вывода

Общая форма команд:

IN <аккумулятор>, <порт>

OUT <порт>, <аккумулятор>

где <аккумулятор> - регистр al при обмене байтами или регистр ах при обмене словами.

<порт> - в качестве порта можно использовать регистр dx, а значением <порт> может быть десятичное число от 0 до 255, что позволяет адресоваться к 256 устройствам.

Пример: in al, 200 ; ввести байт из порта 200 в al

in al, port_val ;ввести байт из порта port_val в al

in al, 61h ; ввести байт из порта 61h в al

out 61h, al; послать байт из al в порт 61h

out dx, ах ; послать слово из ах в порт, указанный в dx.

Команда загрузки исполнительного адреса

LEA (load effective address)

Общая форма:

LEA <регистр 16>,<память 16>

где <память16> должна иметь атрибут WORD. В отличие от команды mov с операцией offset, операнд <память 16> может быть индексирован, что даёт возможность осуществлять гибкую адресацию. Пусть di содержит 5, тогда LEA ВХ, TABLE[di] загрузит смещение адреса TABLE + 5 в регистр bх.

Команды загрузки флагов

LANF ( load АН from Flags ) - команда загружает все следующие флаги: cf, pf, af, zf, sf из регистра флагов в соответствующие биты регистра ah;

SANF (Store АН into Flags) - команда перегружает все флаги из регистра ah в регистр флагов.

Команды загрузки флагов в стек

PUSHF - команда помещает все флаги в стек;

POPF - команда извлекает все флаги из стека.

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

Арифметические команды могут выполняться над двоичными числами со знаком или без знака, над десятичными числами без знака (как упакованными, так и неупакованными). Есть команды для выполнения операции +,-,*,/ а также две дополнительные команды для действий над операндами с расширенным знаком, позволяющие оперировать со смешанными данными.

Форматы данных:

  • двоичные без знака от 0 до 255(6айты); от 0 до 65535 (слова);

  • двоичные со знаком от -128 до 127; от -32768 до 32767;

  • десятичные в формате BCD из двух цифр упакованный формат от 00- 99; код старшей цифры - 4 старших бита, младшей - 4 младших бита;

  • неупакованные BCD - код цифры - 4 младших бита, значение от 0 до 9;

При умножении и делении четыре старших бита должны быть нулевыми, а при сложении и вычитании их значения несущественны. Для МП все эти числа - двоичные. Программист - должен сам помнить, с какими данными он имеет дело.

Соседние файлы в папке Ответы по пунктам