- •Глава 1. Предисловие Основные принципы построения вычислительных машин и систем
- •Пример современной многоуровневой вычислительной машины с шестью уровнями
- •Уровни детализации структуры вычислительной машины
- •Принципы построения вычислительной машины
- •Принцип двоичного кодирования
- •Принцип программного управления
- •Принцип однородности памяти
- •Принцип адресности
- •Структура фон-неймановской архитектуры вычислительной машины
- •Типы структур вычислительных машин и систем
- •Структуры вычислительных машин
- •Структуры вычислительных систем
- •Перспективы совершенствования архитектуры вм и вс
- •Технологические и экономические аспекты
- •Тенденции развития больших интегральных схем
- •Перспективные направления исследований в области архитектуры
- •Глава 2. Цифровой логический уровень
- •Представление информации в вычислительных системах
- •Представление числовых данных в вм.
- •Числа в форме с фиксированной точкой.
- •Числа в форме с плавающей точкой
- •Размещение числовых данных в памяти
- •Представление нечисловой информации в вм
- •Символьная информация
- •Видеоинформация
- •Аудиоинформация
- •Система кодирования чисел.
- •Прямой код.
- •Обратный код.
- •Модифицированные коды.
- •Код с исправлением ошибок
- •Коды Хемминга
- •Физическое представление информации в вм.
- •Вентили, интегральные схемы.
- •Основные элементы эвм
- •Триггер.
- •Сумматоры
- •Тактовые генераторы.
- •Микросхемы процессоров и шины
- •Микросхемы процессоров. Цоколевка типичного цп
- •Архитектура и набор команд.
- •Типы процессоров
- •Регистры процессора
- •Типы шин Системные шины. Локальные шины
- •Системные шины
- •Локальные шины
- •Иерархия шин
- •Вычислительная машина с одной шиной
- •Вычислительная машина с двумя видами шин.
- •Вычислительная машина с тремя видами шин
- •Арбитраж шин
- •Принципы работы шины
- •Глава 3 Функциональная организация фон - неймановской вычислительной машины
- •Функциональная схема фон-неймановской вычислительной машины
- •Узлы уу
- •Узлы алу
- •Основная память.
- •Модуль ввода/вывода
- •Цикл команды.
- •Пример выполнения программы.
- •Система прерываний.
- •Глава 4. Память.
- •Организация памяти.
- •Основные принципы.
- •Основные технические характеристики зу.
- •Иерархическая структура памяти.
- •Основная память.
- •Классификация устройств основной памяти.
- •Блочная организация основной памяти
- •Организация микросхем памяти
- •Режимы работы памяти.
- •Основные запоминающие устройства
- •Стековая память
- •Ассоциативная память
- •Полностью ассоциативная кэш-память.
- •Постоянное запоминающее устройство
- •Виртуальная память
- •Понятие виртуальной памяти
- •Страничная организация памяти
- •Сегментно-страничная организация памяти.
- •Внешняя память
- •Магнитные диски
- •Оптическая память
- •Магнитные ленты
- •Глава 5 Язык Ассемблер
- •Структура программы на языке Ассемблер
- •Основные типы операндов
- •Типы операторов
- •Режимы адресации
- •Директивы ассемблера
- •Инструкции пересылки данных и двоичной арифметики
- •Запись программ на языке Ассемблер
- •Пример вычисления арифметического выражения
- •Циклические и разветвляющиеся программы
- •Примеры использования операторов переходов и цикла при работе с массивами чисел
- •Применение логических инструкций
- •Логические инструкции
- •Примеры использования логических команд
- •Пример выполнения работы
- •Обработка символьной информации с помощью функций dos
- •Программные прерывания и системные вызовы
- •Описание функций работы с клавиатурой и дисплеем диспетчера функций ms dos
- •Функции 01н
- •Функции 02н
- •Функция 09н
- •Функция оан
- •Функция 0Bh
- •Пример выполнения работы
- •Глава 6 Типы вычислительных систем и их архитектурные особенности
- •Классификация вычислительных платформ и архитектур
- •Классификация Флинна.
- •Классификация Хокни
- •Классификация Хэндлера
- •Параллелизм и конвейеризация вычислений. Параллелизм на уровне команд
- •Конвейеры
- •6.2.2 Суперскалярная архитектура.
- •Мультипроцессоры с памятью совместного использования.
- •Основные классы вс
- •Машины класса simd
- •Машины класса mimd
- •Основные направления развитие архитектуры вычислительных машин
- •Суперспекулятивная архитектура
- •Трассирующая архитектура
- •Многопотоковый процессор
- •Многоядерная архитектура
- •«Плиточная» архитектура
- •Многоэтажная архитектура
- •Оптическая (фотонная) архитектура
- •Квантовая архитектура
- •Нейроархитектура
Режимы адресации
Регистровая прямая - операнд находится в регистре.
Обозначение - <регистр>,
< регистр > - АХ, ВХ, СХ, DX, SI, DI, BP, SP, AL, BL, СL, DL, AH, BH, CH, DH.
mov АХ,SI ; переслать содержимое регистра SI в регистр АХ.
Непосредственная - непосредственный операнд (константа) присутствует в команде.
Обозначение - < константное выражение > .
mov AX, 093Ah ; занести константу 093Ah в регистр АХ.
Прямая - исполнительный адрес операнда присутствует в команде.
Обозначение - < переменная >+/-< константное выражение >.
mov AX, WW ; переслать в АХ слово памяти с именем WW
mov BX, WW+2 ; переслать в ВХ слово памяти отстоящее от
; переменной с именем WW на 2 байта.
Регистровая косвенная - регистр содержит адрес операнда.
Обозначение - [< регистр >],
< регистр > - ВХ, ВР, SI, DI.
mov [ BX ], CL ; переслать содержимое регистра CL по адресу,
; находящемуся в регистре ВХ.
Регистровая относительная - адрес операнда вычисляется как сумма содержимого регистра и смещения.
Обозначение - < переменная >[< регистр >] или [< регистр >]< константное выражение >,
< регистр > - SI или DI индексная адресация, ВХ или ВР - базовая адресация.
mov АХ, WW[SI] ; переслать в АХ слово из памяти, адрес которого
;вычисляется как сумма содержимого регистра SI и смещения WW.
Индексно - базовая - адрес операнда вычисляется как сумма содержимых базового и индексного регистров и смещения.
Обозначение - [< базов. регистр>][< индексн. регистр>] или <переменная >[<базов. регистр >][< индекс. регистр >] или [<базов. регистр >][< индекс. регистр >]< константное выражение,
где < индекс. регистр > - SI или DI, < базов. Регистр > - ВХ или ВР.
mov [BX+ SI+ 2], CL ; переслать содержимое регистра CL по адресу,
; вычисляемому как сумма содержимого регистров ВХ, SI и константы 2.
Директивы ассемблера
Ассемблер имеет ряд операторов, которые позволяют управлять процессом ассемблирования и формирования листинга. Эти операторы называются псевдокомандами или директивами. Они действуют только в процессе ассемблирования программы и не генерируют машинных кодов.
Директивой называется команда транслятору для выполнения определённых данной директивой действий, сама директива в текст транслированной программы не включается.
Директива задания исходных данных:
[<имя>] d<тип> <константа>[,<константа>, <константа>, . . .]
<имя> - имя массива данных, по которому к ним можно обратиться из команды;
d (define) – определяет начало массива данных;
<тип> - размер констант, входящих в массив:
-
b
–
байт,
w
–
слово (два байта),
d
–
двойное слово,
q
–
учетверённое слово,
t
–
десять байтов;
<константа> - числовой или символьный элемент массива данных.
В ассемблере используется несколько типов констант:
десятичные – последовательность цифр от 0 до 9;
шестнадцатеричные – последовательность шестнадцатеричных цифр от 0 до 9 и от А или а до F или f завершающаяся буквой H или h, первой должна быть десятичная цифра или 0;
восьмеричные – последовательность цифр от 0 до 7, завершающаяся буквами Q или q;
двоичные – последовательность цифр от 0 до 1, завершающаяся буквой B или b;
символьные – символ или группа символов, заключённые в кавычки.
знак ? – используется для резервирования места для данных.
Например,
data1 db 123, 0a2h, 75q, 110011b, 'a', 'пример', ?, ?
Для заполнения больших массивов используется директива dup (duplicate):
<число повторений> dup(<образец>)
<число повторений> - задаёт количество размещаемых в памяти данных, определяемых образцом;
<образец> - любая допустимая группа констант.
Например,
data2 db 23 dup(1, 2, 'x')
выделяет в памяти 23 · 3 = 69 байтов и заносит в них образец 1, 2, 'x', 1, 2, 'x', … .
Директива использования сегментных регистров по умолчанию:
assume <имя сегментного регистра>:<имя сегмента или nothing>[, <имя сегментного регистра>:<имя сегмента или nothing>, …]
Для задания адреса в памяти требуется два регистра, один из них всегда сегментный, поэтому в команде при обращении к памяти приходиться набирать имя сегментного регистра, часто одного и того же. Директива assume позволяет избежать этого. Транслятор сопоставляет имя массива данных и автоматически подставляет сегментный регистр, заданный для сегмента, в котором расположен данный массив. Слово nothing показывает, что данный сегментный регистр не адресуется по умолчанию. Директива assume может использоваться в программе при каждом изменении сегмента для данного сегментного регистра, но обязательно в начале сегмента, где она задаёт по умолчанию сегментный регистр для сегмента кодов.
Например,
assume cs:code, ds:data1, es:nothing
Здесь code и data1 – имена сегментов кодов и данных, соответственно.
Для простых программ, содержащих по одному сегменту для кода, данных и стека в трансляторы MASM и TASM ввели возможность использования упрощенных директив сегментации. Но здесь возникла проблема, связанная с тем, что необходимо было как-то компенсировать невозможность напрямую управлять размещением и комбинированием сегментов. Для этого совместно с упрощенными директивами сегментации стали использовать директиву указания модели памяти MODEL, которая частично стала управлять размещением сегментов и выполнять функции директивы ASSUME (поэтому при использовании упрощенных директив сегментации директиву ASSUME можно не использовать). Эта директива связывает сегменты, которые в случае использования упрощенных директив сегментации имеют предопределенные имена, с сегментными регистрами (хотя явно инициализировать ds все равно придется).
Использование упрощенных директив сегментации
.model small ;модель памяти
.data ;сегмент данных
message db 'Введите две шестнадцатеричные цифры,$'
.stack ;сегмент стека
db 256dup ('?') ;сегмент стека
.code ;сегмент кода
main: ;начало процедуры main
mov ax,@data ;заносим адрес сегмента данных в регистр ax
mov ds,ax ;ax в ds
;далее текст программы
mov ax,4c00h ;пересылка имени DOS компоненты (4c00h)
; в регистр ax
int 21h ;вызов прерывания с номером 21h
end main ;конец программы с точкой входа main
Обязательным параметром директивы MODEL является модель памяти. Этот параметр определяет модель сегментации памяти для программного модуля. Предполагается, что программный модуль может иметь только определенные типы сегментов, которые определяются упомянутыми ранее упрощенными директивами описания сегментов (табл.5.1).
Таблица 5.1 Упрощенные директивы определения сегментов
Формат директивы |
Назначение |
.CODE [имя] |
Начало или продолжение сегмента кода |
.DATA |
Начало или продолжение сегмента инициализированных данных. Также используется для определения данных типа near |
.CONST |
Начало или продолжение сегмента постоянных данных (констант) модуля |
.DATA? |
Начало или продолжение сегмента неинициализированных данных. Также используется для определения данных типа near |
.STACK [размер] |
Начало или продолжение сегмента стека модуля. Параметр [размер] задает размер стека |
.FARDATA [имя] |
Начало или продолжение сегмента инициализированных данных типа far |
.FARDATA? [имя] |
Начало или продолжение сегмента неинициализированных данных типа far |
Наличие в некоторых директивах параметра [имя] говорит о том, что возможно определение нескольких сегментов этого типа.
При использовании директивы MODEL транслятор делает доступными несколько идентификаторов (табл.5.2), к которым можно обращаться во время работы программы, с тем, чтобы получить информацию о тех или иных характеристиках данной модели памяти
Таблица 5.2 Идентификаторы, создаваемые директивой MODEL
Имя идентификатора |
Значение переменной |
@code |
Физический адрес сегмента кода |
@data |
Физический адрес сегмента данных типа near |
@fardata |
Физический адрес сегмента данных типа far |
@fardata? |
Физический адрес сегмента неинициализированных данных типа far |
@stack |
Физический адрес сегмента стека |
Операнды директивы MODEL используются для задания модели памяти (перечень моделей памяти приведен в табл. 5.3), которая определяет набор сегментов программы, размеры сегментов данных и кода, способ связывания сегментов и сегментных регистров.
Таблица 5.3 Модели памяти
Модель |
Тип кода |
Тип данных |
Назначение модели |
TINY |
near |
near |
Код и данные объединены в одну группу с именем DGROUP. Используется для создания программ формата .com. |
SMALL |
near |
near |
Код занимает один сегмент, данные объединены в одну группу с именем DGROUP. Эту модель обычно используют для большинства программ на Ассемблере |
MEDIUM |
far |
near |
Код занимает несколько сегментов, по одному на каждый объединяемый программный модуль. Все ссылки на передачу управления — типа far. Данные объединены в одной группе, все ссылки на них — типа near |
COMPACT |
near |
far |
Код в одном сегменте, ссылка на данные — типа far |
LARGE |
far |
far |
Код в нескольких сегментах, по одному на каждый объединяемый программный модуль |
