
- •Конспект лекций по ассемблеру
- •Структурная схема эвм
- •Организация памяти
- •Порты ввода/вывода
- •Сегментация памяти
- •Логические и физические адреса памяти
- •Адресация команд
- •Адресация данных
- •Адресация сегмента стека
- •Перемещаемые программы
- •Структура микропроцессора
- •Назначение регистров микропроцессора
- •Регистр флагов
- •Ассемблер
- •Выражения
- •Структура машинного оператора
- •Директивы ассемблера
- •Директивы определения данных
- •Определение слова
- •Команды и способы адресации операндов
- •Режимы адресации
- •Команда сложения add
- •Команда сложения с переносом adc
- •Команда вычитания sub
- •Imul – команда умножения со знаком
- •Idiv – команда деления со знаком
- •Команда сравнения cmp
- •Команды безусловного перехода jmp
- •1. Короткий относительный переход
- •2. Внутрисегментный переход
- •Команды условных переходов
- •Знаковые
- •Беззнаковые
- •Специальные
- •Способы адресации
- •Двухоперандные команды
- •Косвенная адресация
- •Регистровая адресация
- •Прямая адресация с индексированием
- •Прямая адресация с базированием
- •Адресация по сумме d8 и индексный регистр
- •Адресация по сумме базового регистра и смещения
- •Адресация с базированием и индексированием
- •Прямая адресация с базированием и индексированием
- •Двухоперандная команда, в которой второй операнд непосредственный
- •Формат двухоперандных команд с акумулятором и но
- •Форматы команды inc
- •Форматы команд pop и push
- •Однобайтные команды без операндов
- •Команды передачи данных mov
- •Команда обмена xchg
- •Команда загрузки исполнительного адреса lea
- •Команды управления циклами команда цикла loop
- •Команды переходов loopz, loope
- •Команды вызова подпрограмм call
- •Структура подпрограммы
- •Команды возврата
- •Передача параметров в процедуру
- •Примеры на обработку матрицы
- •Функции ввода/вывода
- •Функция вызова команды int 21h
- •Вывод на экран дисплея
- •Ввод с клавиатуры
- •Процедура ввода числа форматом слово
Команда сравнения cmp
CMP OP1,OP2
Работает аналогично команде вычитания, однако результат формируется, но не записывается в поле ОР1. По значению результата взводятся все 6 флагов. Позволяет сравнивать знаковые и беззнаковые операнды. Обычно после этой команды стоит команда условного перехода.
Команды безусловного перехода jmp
JMP MET
Рассмотрим два формата этой команды из 5 существующих.
1. Короткий относительный переход
Осуществляет переход в пределах от -128..127
Формат:
┌───────┐ ┌───────┐
│ KOP │ │ dispL │ – смещение
└───────┘ └───────┘
Для работы этой команды требуются метки.
0308 m1: mov al,cl
.......................
.......................
0321 jmp m1 ; 2 байта
0323 jmp m2 ; 2 байта
0325 mov al,5
.......................
.......................
033f m2: add al,cl
Рассмотрим формирование поля disp jmp m1
Команда занимает 2 байта
disp = ( адрес m1 )-( адрес след. команды )
0308h Короткий переход формируется, если число
- 0323h расположено в пределах от -128..127. В
-------- этом случае знаковый разряд младшего байта поля disp и все биты
f f e5h старшего байта совпадают
┌┬┬┬┬┬┬┬──────┐
┌────────┐ ┌────────┐
│11111111│ │11100101│
└────────┘ └────────┘
Старший байт disp содержит распространение знакового разряда и поэтому может не использоваться.
В данном случае disp = e5h, это число отрицательное, следовательно переход будет выполняться назад.
Рассмотрим алгоритм выполнения команды:
JMP M1
1) IP = IP +2=0321+2 =0323h
2)disp = E5h – команда вычисляет адрес перехода, который всегда 16-ти разрядный, поэтому необходимо выполнить расширение смещения до слова, как это делает команда CBW.
При расширении:
┌───┬───┐
disp │ FF│ E5│
└───┴───┘
IP = 0323h +
Disp=FFE5h
-----
033Fh = IP
Результат заносится в регистр IP.
Следующая команда выбираться по адресу 033Fh. Все команды перехода изменяют естественный порядок следования команд.
В командах переходов используется относительная адресация: адрес перехода вычисляется относительно адреса следующей команды.
Напомним определение адресации.
АДРЕСАЦИЯ – это способ вычисления адреса перехода или адреса операндов. В арифметико-логических командах вычисления – адреса операндов, а в командах перехода и управления – адреса переходов.
Покажем, как транслятор ассемблера вычисляет поле смещения команды JMP M2
JMP M2
┌───────┐ ┌───────┐
│ KOП │ │ disp │
└───────┘ └───────┘
1)P = IP +2=0323+2 =0325
адрес М2 033Fh
адрес команды -0325h
--------------------
disp = 001Ah
Старший байт disp содержит распространение знакового разряда и поэтому может не использоваться. В данном случае disp = 1Аh.
Выполнение команды:
JMP M2
1) IP = IP +2=0323+2 =0325h
2)disp = 1А h – команда вычисляет адрес перехода, который всегда 16-ти разрядный, поэтому необходимо выполнить расширение смещения до слова, как это делает команда CBW.
При расширении:
┌───┬───┐
disp │ 00│ 1А│
└───┴───┘
IP = 0325h +
Disp=001Аh
-----
0308h = IP
Результат заносится в регистр IP.
Следующая команда выбираться по адресу 0308h.