
- •Конспект лекций по ассемблеру
- •Структурная схема эвм
- •Организация памяти
- •Порты ввода/вывода
- •Сегментация памяти
- •Логические и физические адреса памяти
- •Адресация команд
- •Адресация данных
- •Адресация сегмента стека
- •Перемещаемые программы
- •Структура микропроцессора
- •Назначение регистров микропроцессора
- •Регистр флагов
- •Ассемблер
- •Выражения
- •Структура машинного оператора
- •Директивы ассемблера
- •Директивы определения данных
- •Определение слова
- •Команды и способы адресации операндов
- •Режимы адресации
- •Команда сложения add
- •Команда сложения с переносом adc
- •Команда вычитания sub
- •Imul – команда умножения со знаком
- •Idiv – команда деления со знаком
- •Команда сравнения cmp
- •Команды безусловного перехода jmp
- •1. Короткий относительный переход
- •2. Внутрисегментный переход
- •Команды условных переходов
- •Знаковые
- •Беззнаковые
- •Специальные
- •Способы адресации
- •Двухоперандные команды
- •Косвенная адресация
- •Регистровая адресация
- •Прямая адресация с индексированием
- •Прямая адресация с базированием
- •Адресация по сумме d8 и индексный регистр
- •Адресация по сумме базового регистра и смещения
- •Адресация с базированием и индексированием
- •Прямая адресация с базированием и индексированием
- •Двухоперандная команда, в которой второй операнд непосредственный
- •Формат двухоперандных команд с акумулятором и но
- •Форматы команды inc
- •Форматы команд pop и push
- •Однобайтные команды без операндов
- •Команды передачи данных mov
- •Команда обмена xchg
- •Команда загрузки исполнительного адреса lea
- •Команды управления циклами команда цикла loop
- •Команды переходов loopz, loope
- •Команды вызова подпрограмм call
- •Структура подпрограммы
- •Команды возврата
- •Передача параметров в процедуру
- •Примеры на обработку матрицы
- •Функции ввода/вывода
- •Функция вызова команды int 21h
- •Вывод на экран дисплея
- •Ввод с клавиатуры
- •Процедура ввода числа форматом слово
Перемещаемые программы
Разбивка программы на сегменты обеспечивает создание перемещаемых программ. На этапах трансляции и редактирования формируются относительные адреса всех объектов программы. Это означает, что адреса любой команды или любого поля данных относительно начала соответствующего сегмента остаются неизменными в процессе выполнения программы и не зависят от адресов сегментов программы.
После расположения в памяти программы DOS записывает адреса сегментов программы в соответствующие сегментные регистры процессора и передает управление первой команде программы.
Структура микропроцессора
Операционное устройство (ОУ) Шинный интерфейс (ШИ)
┌─────┬─────┐ ┌───────┼─────────────┐
AX │ AH │ AL │ │ V
├─────┼─────┤ │ │ ┌─────┴────┐
BX │ BH │ BL │ │ │ CS │
├─────┼─────┤ │ │ ├──────────┤
CX │ CH │ CL │ │ │ DS │
├─────┼─────┤ │ │ ├──────────┤
DX │ DH │ DL │ │ │ SS │
├─────┴─────┤ │ │ ├──────────┤
│ BP │ │ │ ES │
├───────────┤ │ │ ├──────────┤
│ SP │ │ │ IP │
├───────────┤ │ │ ├──────────┤
│ SI │ │ │ РЕГИСТРЫ │
├───────────┤ │ │ │ СВЯЗИ │
│ DI │ │ └─┬──────┬─┘
└─────┬─────┘ │ │ V V
^ │ ┌───┴──┐ ┌─┴────┐
V V │ └┐ └─┘ ┌┘
═╤╤══════╤╧════════╤═════╧═╗ └┐СУМ.АДРЕСОВ┌┘
^^ ^ ^ ║ │ └─────┬─────┘
││ V V ║ │
││ ┌────┴───┐ ┌───┴────┐ ║ │ V
││ │БУФ.РЕГ.│ │БУФ.РЕГ.│ ║ ┌────┴────┐
││ └────┬───┘ └───┬────┘ ║ │ │ БЛОК │
││ V V ╟<────────────>┤УПРАВЛЕН.├ <────>
││ ┌───┴───┐ ┌───┴───┐ ║ │ │ ШИНАМИ │
││ └┐ └─┘ ┌┘ ║ └────┬────┘
││ └┐ АЛУ ┌┘ ║ │ └────────────┐
││ └──────┬──────┘ ║ │
│└──────────>V ║ │ ┌───────────────────┐ │
│ ┌──────┴──────┐ ╟<─┬──┼──┤ ОЧЕРЕДЬ КОМАНД ├<──┘
│ │ РЕГ.ФЛАГОВ │ │ └───────────────────┘
│ └──────┬──────┘ ┌───┐ │ │
│ V │БУ ├<┘
└────────────┘ └─┬─┘ │
V Yi
│
ОУ – осуществляет обработку информации. Шинный интерфейс служит для обмена процессора с памятью и устройствами ввода/вывода. Шинный интерфейс (ШИ) формирует адрес команды и выбирает ее в регистр команд. Блок управления (БУ) дешифрирует команду и формирует последовательность управляющих сигналов Yi, обеспечивающих ее выполнение.
Пример:
ADD AX,B При выполнении этой команды необходим
{AX:=AX+B} цикл обращения к памяти для выборки переменной В.
При запуске программы регистр CS содержит адрес сегмента кода а IP = 0. ШИ складывает CS и IP формируя адрес первой команды программы и обращается к памяти для выборки этой команды.
Команды процессора имеют длину 1-6 байт, поэтому регистр команд имеет длину 6 байт и работает по принципу очереди FIFO – First in, First out.
Одновременно в регистре команд может находиться одна или несколько команд.
Сумматор вычисляет физический адрес памяти, который с его выхода поступает на внешнюю шину.
В процессоре организована параллельная работа ОУ и ШИ. Как только БУ выбирает из регистра команд команду, он начинает её выполнение. Если команда не требует обращения к памяти (IDIV BX {AX:=(DX:AX)/BX}), то при ее выполнении к памяти обращаться не требуется. Команда выполняется несколько тактов и в это время ШИ свободен. Для повышения производительности в этом случае организуется параллельная работа ШИ и ОУ.
ОУ выполняет команду.
ШИ пополняет очередь команд в циклах чтения из памяти. При этом выборка из памяти идет по значению IP. Таким образом, предполагается естественный линейный порядок следования команд. При этом в большинстве случаев ОУ не ожидает выборки команд. Когда ОУ выполняет команду передачи управления, ШИ сбрасывает очередь, выбирает команду по новому адресу и заполняет очередь команд.