- •Содержание
- •1. Введение
- •2. Представление информации в эвм
- •2.1. Системы счисления
- •2.1.1. Основные понятия
- •2.1.2. Системы счисления, используемые в вычислительной технике
- •2.1.3. Перевод чисел из одной системы счисления в другую
- •2.2. Типы данных
- •2.2.1. Типы данных, используемых в эвм
- •2.2.2. Константы
- •2.2.3. Логические величины
- •2.2.4. Символьные величины
- •2.2.5. Целые числа
- •2.2.6. Вещественные числа
- •2.3. Форматы команд
- •3. Основы построения эвм
- •3.1. Немного истории
- •3.2. Особенности архитектуры современной вычислительной машины
- •3.2.1. Основные понятия
- •3.2.2. Структурная организация машины
- •3.3. Вариант структуры микроЭвм
- •3.3.1. Общая структура машины
- •3.3.2. Процессор
- •3.3.3. Оперативная память
- •3.3.4. Системная память
- •3.3.5. Система адресации
- •3.3.6. Виртуальная память
- •3.3.7. Таймер
- •3.3.8. Внешние устройства
- •3.3.9. Принципы обмена информацией с внешними устройствами
- •Некоторые вопросы программного обеспечения
- •4.1. О программном обеспечении
- •4.2. Процесс компиляции
- •4.3. Компиляция с языка Ассемблера
- •5. Особенности архитектуры эвм типа ibm-рс
- •5.1. Введение
- •5.2. Исторический обзор процессоров клона 80х86
- •5.3. Классификация процессоров Intel 80х86
- •5.4. Особенности периферийных устройств ibm-pc
- •5.5. Характеристики компьютера
- •5.6. Сегментная адресация
- •5.7. Особенности распределения адресного пространства в компьютерах ibm-pc
- •5.7.1. Стандартная оперативная память (Conventional memory)
- •5.7.2. Область верхней памяти (Upper Memory Area ‑ uma)
- •5.7.3. Область высшей памяти (High Memory Area ‑ hma)
- •5.7.4. Расширенная память (eXtended Memory Specification — xms)
- •5.7.5. Дополнительная память (Expanded Memory Specification — ems)
- •5.8. Обмен информацией с периферийными устройствами
- •5.8.1. Порты ввода/вывода
- •5.8.2. Использование адресного пространства памяти
- •5.8.3. Прямой доступ к памяти
- •5.9. Прерывания
- •5.10. Начальный запуск эвм
- •5.11. Регистры процессора
- •5.11.1. Регистры общего назначения
- •5.11.2. Указатель инструкций
- •5.11.3. Регистр флагов и управляющие регистры
- •5.11.4. Регистры сегментов и селекторов
- •5.11.5. Системные адресные регистры
- •5.11.6. Регистры отладки
- •5.11.7. Регистры тестирования и модельно-специфические регистры
- •6. Debug — средство непосредственной коррекции и отладки загрузочного кода программ
- •6.1. Введение
- •6.1.1. Команды без аргумента
- •Input I порт
- •6.1.2. Команды обращения к ячейкам
- •15D0:010c bfffff mov di,ffff
- •15D0:010f 57 push di
- •6.1.3. Команды запуска программы
- •6.1.4. Команды просмотра и модификации регистров
- •7. Методы адресации
- •7.1. Введение
- •7.2. Регистровый метод адресации
- •159B:0101 1e push ds
- •159B:0101 1e push ds
- •159B:0101 1e push ds
- •7.3. Непосредственный метод адресации
- •7.4. Прямая адресация
- •7.5. Косвенная регистровая адресация
- •159B:0100 not word ptr [bx]
- •159B:0102 e000 loopnz 0104
- •7.6. Адресация по базе
- •7.7. Косвенная регистровая адресация с индексированием
- •159B:0102 0e push cs
- •7.8. Адресация по базе с индексированием
- •7.9. Относительная адресация
- •7.10. Косвенная регистровая адресация с масштабированием
- •7.11. Адресация по базе с индексированием и масштабированием
- •8. Синтаксис ассемблера
- •8.1. Директивы определения данных
- •8.1.1. Определение переменных
- •Cимвольные строки
- •Числовые данные
- •Примеры:
- •8.2. Выражения
- •8.3. Непосредственные операнды
- •8.4. Структуры
- •8.5. Сегменты
- •8.6. Модели памяти и упрощенные директивы определения сегментов
- •8.7. Упрощенные директивы описания сегментов
- •8.8. Создание программы на ассемблере
- •8.9. Получение выполняемого файла
- •9. Система команд
- •9.1. Классификация команд по операндам
- •9.2. Классификация команд по действию
- •9.2.1. Команды пересылки данных
- •9.2.2. Арифметические команды
- •8.2.3. Команды манипуляции битами
- •9.2.4. Управление центральным процессором
- •9.2.4. Команды передачи управления
- •Iret, iretd
- •9.3. Краткий список команд с используемыми операндами
- •9.3.1. Условные обозначения:
- •9.3.2. Инструкции пересылки данных
- •9.3.3. Арифметические, логические и инструкции сдвига
- •9.3.4. Инструкции обработки строк
- •9.3.5. Инструкции передачи управления
- •9.3.6. Инструкции управления процессором
- •Литература
2.2. Типы данных
2.2.1. Типы данных, используемых в эвм
Вся информация, которой оперирует машина, представлена в двоичном коде. Это означает, что и команды, и данные, которые могут быть арифметическими, причем записанными в самых различных системах счисления, и логическими, и символьными (тексты), – все хранятся в ЭВМ в двоичном коде. Каким образом машина различает команды и данные, в том числе и их типы? Команды определяются счетчиком команд. Содержимое ячейки, адрес которой находится в СчК, машиной воспринимается как команда. Типы данных определяются исключительно программным путем.
Возможные типы данных для многих языков представлены на рис 2.1.
На первом уровне декомпозиции по типу использования в программе можно выделить константы, переменные, метки.
2.2.2. Константы
Константа — это величина, которая не меняет своего значения при выполнении программы, т.е. структура, значение которой зафиксировано:
15 — целое число, т.е. число, обозначенное символом 15, всегда будет иметь значение 15;
17.5 (17,5)— вещественное число;
А — символ А;
АВС — набор символов.
Рис 2.1
Переменная — это величина, обращение к которой производится по имени. В машине для данного имени выделяется ячейка памяти. Содержимое ячейки можно изменять, следовательно, имя (ему соответствует некоторый адрес в ОЗУ) содержит переменное наполнение.
Метки обеспечивают возможность обращения к требуемому оператору с различных точек программы. Метка — это имя, значение которого соответствует адресу помеченного оператора. При трансляции программы составляется таблица имен пользователя, в которой всем именам, введенным пользователем в программе, в том числе и меткам, устанавливаются соответствующие адреса.
Имя обычно определяется следующим образом:
<имя> = <буква> [ <буква> | <цифра> |<имя>]
Здесь в угловых скобках < > содержится понятие, скобки [ ] означают необязательную конструкцию. Символ | соответствует операции «или». Буква определяется так:
<буква> = A | B | C...Z | . | $ | &
Правильные имена:
А, B2, B104, MACRO, ADD.
Константы и переменные могут быть цифровыми, символьными и логическими.
Размер слова в рассматриваемой машине - 16 двоичных разрядов и состоит из двух байт (рис. 2.2).
15 |
14 |
14 |
13 |
12 |
11 |
10 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
Старший байт Младший байт
Рис. 2.2
2.2.3. Логические величины
Логические (Булевы) величины в математике имеют два значения: истина (1) и ложь (0). Допустимые операции над ними производятся в рамках Булевой алгебры. В языках высокого уровня логические величины описываются словами True и False. В языках низкого уровня операции над логическими величинами производятся поразрядно.
Широко используются логические операцииИ (& или /\ ), ИЛИ ( | или \/ ), НЕ (), Исключающее ИЛИ (). Рассмотрим таблицы истинности для этих операций. Обозначим через X первый операнд, Y — второй, а Z — результат операции.
Рассмотрим физический смысл логических операций на простых примерах. Операция ИЛИ. Пусть два студента выполняют лабораторные работы по изучению Ассемблера. Если на занятия не пришел ни один студент, то лабораторная работа не будет выполнена: 0 | 0 = 0. Если пришел первый студент или второй, или же оба студента вместе, то работа будет выполнена:
(0 | 1) = (1 | 0) = (1 | 1) = 1.
Операция И. Идет сдача зачета. Нет и первого студента и второго, зачет не сдан: 0 & 0 = 0. Преподаватель примет зачет по лабораторной работе, только если пришли и первый студент и второй: 1 & 1= 1& 1= 1.
Операция Исключающее ИЛИ. В магазине две девушки-продавщицы. Ни одна из них не пришла на работу — магазин закрыт: 0 0 = 0. Пришла любая из них и открыла магазин: 0 1 = 1, или 1 0 = 1. Пришли обе, закрыли магазин и пошли пить кофе: 1 1 = 0.
Операция НЕ или инверсия. Изменяет истину на ложь и обратно: «джигит» видит красный свет перед перекрестком и мчится, не останавливаясь, но тормозит на зеленый свет светофора.