
- •Конспект лекций по ассемблеру
- •Структурная схема эвм
- •Организация памяти
- •Порты ввода/вывода
- •Сегментация памяти
- •Логические и физические адреса памяти
- •Адресация команд
- •Адресация данных
- •Адресация сегмента стека
- •Перемещаемые программы
- •Структура микропроцессора
- •Назначение регистров микропроцессора
- •Регистр флагов
- •Ассемблер
- •Выражения
- •Структура машинного оператора
- •Директивы ассемблера
- •Директивы определения данных
- •Определение слова
- •Команды и способы адресации операндов
- •Режимы адресации
- •Команда сложения add
- •Команда сложения с переносом adc
- •Команда вычитания sub
- •Imul – команда умножения со знаком
- •Idiv – команда деления со знаком
- •Команда сравнения cmp
- •Команды безусловного перехода jmp
- •1. Короткий относительный переход
- •2. Внутрисегментный переход
- •Команды условных переходов
- •Знаковые
- •Беззнаковые
- •Специальные
- •Способы адресации
- •Двухоперандные команды
- •Косвенная адресация
- •Регистровая адресация
- •Прямая адресация с индексированием
- •Прямая адресация с базированием
- •Адресация по сумме d8 и индексный регистр
- •Адресация по сумме базового регистра и смещения
- •Адресация с базированием и индексированием
- •Прямая адресация с базированием и индексированием
- •Двухоперандная команда, в которой второй операнд непосредственный
- •Формат двухоперандных команд с акумулятором и но
- •Форматы команды inc
- •Форматы команд pop и push
- •Однобайтные команды без операндов
- •Команды передачи данных mov
- •Команда обмена xchg
- •Команда загрузки исполнительного адреса lea
- •Команды управления циклами команда цикла loop
- •Команды переходов loopz, loope
- •Команды вызова подпрограмм call
- •Структура подпрограммы
- •Команды возврата
- •Передача параметров в процедуру
- •Примеры на обработку матрицы
- •Функции ввода/вывода
- •Функция вызова команды int 21h
- •Вывод на экран дисплея
- •Ввод с клавиатуры
- •Процедура ввода числа форматом слово
Назначение регистров микропроцессора
Регистры делятся на группы:
Группа регистров общего назначения AX, BX, CX, DX могут использоваться для различного применения. В арифметико-логических командах – в качестве операндов, в командах пересылки – в качестве источников и приемников. Отличительная особенность этих регистров определяется возможностью использования раздельно левой (H) и правой (L) половины. Наряду с тем, что регистры имеют общее применение, некоторые команды используют эти регистры специальным образом, что отражено в их названии:
AX – аккумулятор. Является основным сумматором и применяется во всех операциях ввода/вывода, некоторых операциях над строками и некоторых арифметических операциях. Некоторые команды имеют более эффективный код, если они используют аккумулятор;
AL – аккумулятор младший;
AH – аккумулятор старший;
BX – база. Может содержать адрес начала поля (массива) в сегменте данных. Относительно этого адреса вычисляются адреса элементов поля;
CX – счётчик, необходим для управления числом повторений циклов и для операций сдвига;
CL – счетчик младший;
DX – регистр данных, используется для некоторых операций ввода/вывода и для операций умножения и деления.
Группа указательных и индексных регистров представлена регистрами:
SP – указатель стека. Указывает на вершину стека;
BP – указатель базы. Может содержать адрес начала поля (массива) в сегменте стека.
Относительно этого адреса вычисляются адреса элементов поля. По назначению отли-
чается от регистра BX тем, что определяет адрес относительно начала сегмента стека;
SI – индекс источника. Определяет адрес элемента поля, относительно базового адреса
(начала поля);
DI – индекс приемника. Определяет адрес элемента поля, относительно базового адре-
са (начала поля). Функции регистров DI и SI различаются при их использовании в ко-
мандах обработки строк.
Наряду со специальными функциями эти регистры могут использоваться и как общие регистры. Указательные и индексные регистры только 16-ти разрядные и на старшие и младшие половинки не делятся.
mov AX,B[SI]
{ AX:=B[SI] }
B ┌──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┐
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
└──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┘
0 1 2 3...................................FFFFh <- SI
B – вектор
SI – индекс (указывает на один из элементов вектора)
Третья группа регистров сегментов. Их назначение рассмотрено ранее.
Регистр IP – счётчик команд. Он определяет адрес выполняемой команды. Сосчитать значение IP или переслать в него новое значение не представляется возможным, поэтому IP – программно-недоступный регистр.
Регистр флагов
Регистр флагов определяет состояние МП и значение результата выполняемой операции. Не все биты регистра определены.
СТАРШИЙ БАЙТ МЛАДШИЙ БАЙТ
├<──────────────────────>┼<──────────────────────>┤
│┌──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┐│
│X │X │X │X │OF│DF│IF│TF│SF│ZF│X │AF│X │PF│X │CF│
└──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┘
15 13 11 9 7 5 3 1
14 12 10 8 6 4 2 0
Флаги делят на две группы. Первая группа флагов обычно получает значения при выполнении арифметических и логических команд. Значения флагов являются признаками результата выполненной команды:
1) AF – флажок вспомогательного переноса; фиксирует перенос (заём) из младшей тетрады в старшую 8-ми или 16-битного результата. Он необходим только в командах десятичной арифметики;
2) CF – фиксирует значение переноса (заёма), возникающего при сложении или вычитании байт или слов, а также при сдвиге операндов;
3) SF – повторяет значение старшего бита результата (0 - плюс, 1 - минус);
4) OF – переполнение при сложении (вычитании) (происходит потеря старшего бита результата);
5) PF – флажок паритета. Фиксирует наличие четного числа единиц в младших 8 битах результата операции (0 – чётный, 1 – нечётный);
6) ZF – сигнализирует о получении нулевого результата операции (0 – ненулевой, 1 – нулевой результат).
Три дополнительных флажка предназначены для управления некоторыми действиями микропроцессора:
1) DF – флажок направления, определяет порядок сканирования цепочек в строковых командах:
DF=0, от меньших адресов к большим;
DF=1, от больших адресов к меньшим;
2) IF – определяет реакцию микропроцессора на запросы внешних маскируемых прерываний по входу INT:
IF=0, запросы прерываний игнорируются;
IF=1, запросы прерываний обрабатываются;
3) TF – флажок трассировки. При его установке в состояние «1» МП переходит в пошаговый режим (покомандный).
Значение первых шести флагов используются в командах условных переходов. Для работы с последними тремя флагами предусмотрены специальные команды сброса и установки.