- •Конспект лекций по ассемблеру
- •Структурная схема эвм
- •Организация памяти
- •Порты ввода/вывода
- •Сегментация памяти
- •Логические и физические адреса памяти
- •Адресация команд
- •Адресация данных
- •Адресация сегмента стека
- •Перемещаемые программы
- •Структура микропроцессора
- •Назначение регистров микропроцессора
- •Регистр флагов
- •Ассемблер
- •Выражения
- •Структура машинного оператора
- •Директивы ассемблера
- •Директивы определения данных
- •Определение слова
- •Команды и способы адресации операндов
- •Режимы адресации
- •Команда сложения add
- •Команда сложения с переносом adc
- •Команда вычитания sub
- •Imul – команда умножения со знаком
- •Idiv – команда деления со знаком
- •Команда сравнения cmp
- •Команды безусловного перехода jmp
- •1. Короткий относительный переход
- •2. Внутрисегментный переход
- •Команды условных переходов
- •Знаковые
- •Беззнаковые
- •Специальные
- •Способы адресации
- •Двухоперандные команды
- •Косвенная адресация
- •Регистровая адресация
- •Прямая адресация с индексированием
- •Прямая адресация с базированием
- •Адресация по сумме d8 и индексный регистр
- •Адресация по сумме базового регистра и смещения
- •Адресация с базированием и индексированием
- •Прямая адресация с базированием и индексированием
- •Двухоперандная команда, в которой второй операнд непосредственный
- •Формат двухоперандных команд с акумулятором и но
- •Форматы команды inc
- •Форматы команд pop и push
- •Однобайтные команды без операндов
- •Команды передачи данных mov
- •Команда обмена xchg
- •Команда загрузки исполнительного адреса lea
- •Команды управления циклами команда цикла loop
- •Команды переходов loopz, loope
- •Команды вызова подпрограмм call
- •Структура подпрограммы
- •Команды возврата
- •Передача параметров в процедуру
- •Примеры на обработку матрицы
- •Функции ввода/вывода
- •Функция вызова команды int 21h
- •Вывод на экран дисплея
- •Ввод с клавиатуры
- •Процедура ввода числа форматом слово
Организация памяти
Предположим, что память состоит из 4-х ячеек.
┌─ ┌───────────────────┐ Адрес
│ │ │ 0h = 00b
│ ├───────────────────┤
│ │ │ 1h = 01b
N=4 < ├───────────────────┤
│ │ │ 2h = 10b
│ ├───────────────────┤
│ │ │ 3h = 11b
└─ └───────────────────┘
Количество бит в адресе = КБА = ] log2 N [. Квадратные скобки ][ указывают на то, что дробное значение доопределяется до ближайшего целого. Например, КБА = ] log2 5[= ]2,34[ = 3.
N = 2КБА – этой формулой удобно пользоваться при определении адресного пространства ЭВМ:
1) КБА = 10 N = 2^10 = 1024 = 1Кб.
2) КБА = 16 N = 2^16 = 64 Кб.
3) КБА = 20 N = 2^20 = 1 Мб (80086-80186).
4) КБА = 24 N = 2^24 = 16 Мб (80286).
5) КБА = 32 N = 2^32 = 4 Гб (80386-80586).
Современные микропроцессоры Intel могут адресовать 16 Гб и это не предел.
Информация в памяти представлена байтами, словами, двойными словами или полями байтов. Любые два смежных байта памяти представляют собой слово, младший байт слова имеет меньший адрес. В поле двойного слова младший байт идет первым, а старший байт - последним. Так как в словах или двойных словах обычно записаны числа, то при чтении чисел из памяти необходимо учитывать, что байты числа располагаются в обратном порядке.
АДР. 7 0
┌────┐
0 │ 4E │ БАЙТ 4Eh
├────┤\
1 │ C2 │ │
├────┤ │ СЛОВО 1EC2h
2 │ 1E │ │
├────┤/
3 │ 1B │ БАЙТ 1Bh
├────┤\
4 │ 12 │ │
├────┤ │ ДВОЙНОЕ СЛОВО 581F6E12h
5 │ 6E │ │
├────┤ │
6 │ 1F │ │
├────┤ │
7 │ 58 │ │
├────┤/
8 │ │
....
Слово может располагаться с четного или нечетного адресов. Если слова расположены с четных адресов, то в шестнадцатиразрядных микропроцессорах за 1 цикл чтения из памяти выбирается все слово. Для слов, расположенных с нечетных адресов, выбирается сначала младший байт, а затем старший байт. Поэтому слова целесообразно располагать с четного адреса. Такие слова называются выровненными на границе слова. При программировании задач информация может располагаться в памяти в формате двойного или четверного слова, или в поле байтов. Адресом поля считается его младший байт.
Порты ввода/вывода
Различают системные порты (стандартных периферийных устройств), которые имеют адреса от 0h – 3FFh. Порты с адресами 400h – FFFFh зарезервированы для нестандартных периферийных устройств.
Порты также можно рассматривать состоящими из ячеек памяти размером 1 байт. Запись и чтение информации в порты выполняется аналогично работе с памятью. Для адреса порта используются младшие 16 разрядов шины адреса, 216 = 64К. Запись в порт инициируется сигналом процессора IOW, а чтение сигналом IOR. Обмен с портами выполняется байтами или словами.
В качестве портов обычно используются регистры. При записи данных в порт от процессора они появляются на выходе порта и доступны контроллеру периферийного устройства (ПУ). От ПУ данные могут записываться в порт, а затем будут считаны из порта процессором.
Однако чаще порты обеспечивают однонаправленную передачу данных, то есть процессор может производить только запись в порт, или только чтение из порта.
Порт – это устройство, с помощью которого ЭВМ общается с внешней средой, наподобие морских портов на суше (натуральных).
┌─────────┐
│ БЕРЕГ │ - КОМПЬЮТЕР
└─────────┘
│
│ ПЕРЕДАЧА ДАННЫХ
^ ОТ ПРОЦЕССОРА │ ^
V И ОБРАТНО V │
┌────┴────┐ ┌────┴────┐ ┌────┴────┐
│ REG │ <- ПОРТЫ -> │ REG V │ │ REG ^ │
└────┬────┘ └────┬────┘ └────┬────┘
^ ПЕРЕДАЧА ДАННЫХ │ ^
▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
V ОТ КОНТРОЛЛЕРА ПУ V │
│ И ОБРАТНО
┌────────┐
│ МОРЕ │ - ВНЕШНИЕ УСТРОЙСТВА
└────────┘
Порты предназначены для связи процессора с ПУ. Если ОЗУ или ПЗУ располагаются компактно на отдельных платах или компактно на общей системной плате, то порты установлены в контроллерах ПУ и конструктивно принадлежат контроллерам.
Для работы с портами специально существует 2 команды:
IN – ввод;
OUT – вывод.
