- •Команды языка ассемблера
- •3.2.1 Программные сегменты. Директива assume
- •6. Арифметические команды ……………………………………………….
- •Архитектура пк.
- •Регистры.
- •Регистры общего назначения.
- •1.1.2. Сегментные регистры
- •1.1.3 Регистр флагов
- •Организация памяти.
- •1.3. Представление данных
- •1.3.1 Типы данных
- •1.3.2 Представление символов и строк
- •Операторы программы на ассемблере
- •2.1 Команды языка ассемблера
- •2.2. Режимы адресации и форматы машинных команд
- •3. Псевдооператоры
- •3.1 Директивы определения данных
- •3.2 Структура программы на ассемблере
- •3.2.1 Программные сегменты. Директива assume
- •Начальная загрузка сегментных регистров
- •Упрощенная директива сегментации
- •4. Ассемблирование и компоновка программы.
- •5. Команды пересылки данных
- •5.1 Команды общего назначения
- •5.2 Команды работы со стеком
- •4.3 Команды ввода-вывода
- •5.4 Команды пересылки адреса
- •5.5 Команды пересылки флагов
- •6. Арифметические команды
- •Арифметические операции над целыми двоичными числами.
- •6.1.1 Сложение и вычитание.
- •6.1.2 Команды приращения и уменьшения приемника на единицу
- •6.2 Умножение и деление.
- •6.3 Изменение знака.
- •7. Логические операции
- •8. Сдвиги и циклические сдвиги
- •9. Строковые операции
- •10. Логика и организация программ
- •10.1 Безусловные переходы
- •10.2 Условные переходы
- •10.3 Циклы
- •10.4 Процедуры в языке ассемблера
- •10.5 Прерывания int
- •10.6 Системное программное обеспечение
- •10.6.1.1 Чтение клавиатуры.
- •10.6.1.2 Вывод символов на экран.
- •10.6.1.3 Завершение программ.
- •10.6.2.1 Выбор режимов дисплея.
- •11. Дисковая память
- •11.1 Оглавление диска (каталог)
- •11.2 Таблица распределения файлов
- •11.3 Операции ввода-вывода на диск
- •11.3.1 Запись файла на диск
- •11.3.1.1 Данные в формате asciiz
- •11.3.1.2 Файловый номер
- •11.3.1.3 Создание дискового файла
- •Чтение дискового файла
5.2 Команды работы со стеком
Для временного сохранения данных (содержимого регистра или ячейки памяти) удобно использовать стек. Для работы со стеком есть две команды PUSH (поместить слово в стек) и POP (извлечь слово из стека).
Команда PUSH помещает содержимое регистра или ячейки памяти размером в слово на вершину стека. Команда POP, наоборот, снимает слово с вершины стека и помещает его в регистр или ячейку памяти.
Команды PUSH и POP имеют следующие форматы:
PUSH источник
POP приемник.
Будучи взаимно обратными командами, PUSH и POP обычно используются парами, т.е. каждой команде PUSH в программе должна соответствовать команда POP.
Вершина стека – это ячейка в сегменте стека, адрес которой содержится в указателе стека SP. Регистр SP всегда указывает на слово, помещенное в стек последним. Следовательно, команда PUSH вычитает 2 из значения указателя стека, а затем пересылает операнд-источник в стек.
4.3 Команды ввода-вывода
Команды ввода-вывода используются для взаимодействия с периферийными устройствами системы. Они имеют формат:
IN аккумулятор,порт
OUT порт,аккумулятор
Где аккумулятор – регистр AL при обмене байтами или регистр AX при обмене словами. Операндом порт может быть десятичное число от 0 до 255, что позволяет адресоваться к 256 устройствам.
В качестве операнда порт можно использовать регистр DX, что позволяет легко изменять номер порта, например, при необходимости пересылать одни и те же данные несколько различных портов.
IN AL,200 ;ввести байт из порта 200
IN AL,PORT_VAL ;или из порта указанного константой
OUT 30H,AX ; вывести слово в порт 30H
OUT DX,AX ; или в порт, указанный в DX.
5.4 Команды пересылки адреса
Команды пересылки адреса передает не содержимое переменных, а их адреса. Команда LEA (load effective address – загрузить эффективный адрес) пересылает смещение ячейки памяти в любой 16-битовый регистр общего назначения, регистр указателя или индексный регистр. Она имеет формат:
LEA регистр16,память16
Где операнд память16 должен иметь атрибут WORD.
Операнд память16 в команде LEA может быть индексирован, что дает возможность осуществить гибкую адресацию. Например, если регистр DI содержит 2, то команда
LEA BX,TABLE[DI]
Загрузит смещение адреса TABLE+2 в регистр BX.
Команда LDS (load poINTer uSIng DS – загрузить указатель с использованием регистра DS) считывает из памяти 32-битовое двойное слово и загружает первые 16 битов в заданный регистр, а следующие 16 битов – в регистр сегмента данных DS. Она имеет формат:
LDS регистр16,память32,
Где регистр16 – любой 16-битовый регистр общего назначения, а память32 ячейка памяти с атрибутом типа DOUBLEWORD.
Команда LES (load poINTer uSIng ES – загрузить указатель с использованием регистра ES) идентична команде LDS, но загружает номер блока в регистр ES, а не в DS.
5.5 Команды пересылки флагов
Команды пересылают содержимое регистра флагов в стек и обратно. PUSHF сохраняет флаги в стеке, POPF извлекает флаги из стека. Как и в случае с PUSH и POP эти команды всегда используются парами.