- •Составитель: Валерий Анатольевич Засов
- •Рецензенты: генеральный директор научно-производственного центра «Информационные и транспортные системы», д.Т.Н., профессор с.В. Архангельский
- •Оглавление
- •1.Принципы организации классической эвм
- •2.Структурная организация процессора
- •3.Принципы организации и программирование
- •4.Принципы организации и программирование
- •5.Структурная организация современных
- •Приложение 1.Список основных команд микропроцессора i8080
- •1.Принципы организации классической эвм и определение микропроцессорной системы
- •1.1.Принципы организации эвм Дж. Фон-Неймана
- •1.2.Определение микропроцессора и микропроцессорной системы
- •1.3.Понятие архитектуры микропроцессорной системы
- •1.4.Структура типовой микропроцессорной системы
- •1.4. Командный цикл и его фазы
- •Контрольные вопросы и задания
- •2.2.Устойство управления с аппаратной логикой
- •2.3.Устройство управления с программируемой логикой
- •2.4.Функция и структура арифметико-логического устройства
- •2.5.Система команд процессора и способы адресации
- •Контрольные вопросы и задания
- •3.Принципы организации и программирование
- •3.1.Структурная схема 8-разрядного микропроцессора
- •3.2.Программная модель 8-разрядной микропроцессорной системы
- •3.3. Способы адресации данных в 8-разрядной микропроцессорной системе
- •3.4.Программирование на ассемблере 8-разрядного микропроцессора
- •3.5. Инструментальные средства разработки и отладки программ для 8-разрядных микропроцессоров
- •3.6. Пример решения задачи
- •3.7.Функциональная схема ядра 8-разрядной микропроцессорной системы
- •Контрольные вопросы
- •4. Принципы организации и программирование
- •4.1. Структурная схема микропроцессоров семейства i8086/8088
- •4.2.Функциональная схема центрального процессора на базе микропроцессора i8086/8088
- •Типы циклов шины мп i8086/8088 Таблица 4.2.
- •4.3. Конвейерный метод выполнения команд и направления его развития
- •4.4. Сегментная организация памяти и ее эволюция
- •4.5.Адресное пространство ввода – вывода
- •4.6.Программная модель микропроцессоров i8086/8088 и способы адресации
- •4.7. Описание системы команд 16-разрядного микропроцессора
- •4.8. Основные элементы программ на языке Турбо ассемблер
- •Контрольные вопросы и задания
- •5.Структурная организация современных микропроцессоров
- •5.1.Структура микропроцессора Intel Pentium 4
- •5.2.Структура микропроцессора amd Athlon
- •5.3.Гиперпотоковая технология организации вычислений
- •5.4.Эффективность многоядерной архитектуры микропроцессоров
- •5.5.Регистровые структуры 32-разрядных микропроцессоров
- •5.6.Регистровые структуры 64-разрядных микропроцессоров
- •5.7.Обобщенный формат команд и типы данных
- •Контрольные вопросы и задания
- •6. Организация памяти в микропроцессорных
- •Системах
- •6.1.Назначение, основные параметры и классификация видов памяти
- •6.2. Иерархическая структура памяти мс
- •6.3. Оперативные запоминающие устройства
- •6.4. Постоянные запоминающие устройства
- •7. Интерфейсы микропроцессорных систем
- •7.1. Назначение и функции интерфейсов
- •7.2. Принципы организации и классификация интерфейсов
- •7.3. Система интерфейсов компьютера
- •8.Способы обмена информацией между устройствами микропроцессорной системы
- •8.1. Программно – управляемый обмен и прямой доступ к памяти
- •8.2. Организация прерываний в мс
- •8.3. Циклы шины
- •9. Программируемый периферийный адаптер
- •9.1. Назначение, структурная схема и режимы работы программируемого периферийного адаптера
- •9.2. Управление работой программируемого периферийного адаптера
- •9.3. Примеры программирования периферийного адаптера
- •Признак pc7-pc4
- •Канал а Канал в
- •Контрольные вопросы и задания
- •10. Программируемый интервальный таймер.
- •Организация счета времени и событий
- •10.1.Назначение, структурная схема и программирование таймера.
- •10.2.Режимы работы таймера
- •10.3. Примеры программирования таймера
- •10.4. Организация счета времени и событий в мс
- •Контрольные вопросы и задания
- •Рассмотрим основные блоки программируемого связного адаптера.
- •11.2. Режимы работы связного адаптера
- •11.3. Управление работой и программирование связного адаптера
- •9.4. Особенности программирования асинхронных адаптеров коммуникационных портов компьютеров
- •11.5. Организация обмена между компьютерами по интерфейсу rs-232с
- •Контрольные вопросы и задания
- •Б иблиографический список
- •Список основных команд микропроцессора i8080
- •Список основных команд микропроцессора i8086/8088 и директивы языка Турбо Ассемблер
- •Основные директивы (псевдокоманды) языка
- •Турбо Ассемблер (tasm)
- •Типы символов в tasm
- •Команды передачи данных
- •Арифметические команды
- •Логические команды и команды сдвигов
- •Строковые или цепочечные команды
- •Команды передачи управления
- •Коды условий перехода (сс)
- •Команды управления микропроцессором
4.7. Описание системы команд 16-разрядного микропроцессора
По функциональному назначению система команд МП разделяется на следующие основные группы /12,17,18/:
команды передачи данных;
арифметические команды;
логические команды и команды сдвигов;
строковые или цепочечные команды;
команды передачи управления;
команды управления микропроцессором.
Каждая команда имеет один или два байта кода команды (инструкции), за которыми могут следовать 1, 2 или 4 байта операнда. Перед кодом команды возможно применение префиксов CS:, DS:, SS:, ES:, указывающих на использование заданных сегментных регистров, префикса REP, указывающего на необходимость повтора инструкции указанное в регистре CX число раз и префикса LOCK, блокирующего системную шину на время выполнения команды.
Система команд МП семейства i8086/8088 является базовым подмножеством системы команд современных 32-разрядных МП. Поэтому знание нижеприведенных групп команд является необходимым для изучения современных процессоров и разработки программ для систем на их базе.
Набор базовых команд МП семейства i8086/8088 и описание выполняемых командами операций приведены в Приложении 2.
4.8. Основные элементы программ на языке Турбо ассемблер
Команда программы на языке Турбо ассемблер (Turbo assembler) имеет следующий формат /12,17,18/:
[Метка:] [Префикс] Операция Операнды ; Комментарий
Поля команды отделяются пробелами, а операнды - запятыми. Команда не может иметь более двух операндов, обозначаемых dst и src.
Структура ассемблерной программы существенно зависит от используемых программистом директив управления сегментами. Турбо ассемблер поддерживает два набора управления сегментами.
Первый набор – стандартные (расширенные) сегментные директивы (GROUP, ASSUME, ENDS, SEGMENT) обеспечивает самые полные средства управления сегментами, необходимые в сложных прикладных программах, но более сложен в использовании, и полученные программные модули имеют сложную логическую структуру.
Второй набор – упрощенные сегментные директивы (DOSSEG, .MODEL, .STACK, .DATA, .CODE) обеспечивает ограниченные средства управления сегментами, но сравнительно прост в применении, и полученные программные модули более обозримы и читаемы.
Практика показывает, что для разработки ассемблерных программ малого и среднего размера как для автономного применения, так и для компоновки с программными модулями, разработанных на языках высокого уровня, достаточно возможностей упрощенных сегментных директив. Поэтому ниже будут рассмотрены директивы этого типа и примеры ассемблерных программ на основе этих директив. Применение стандартных сегментных директив подробно рассмотрено в /5,10/.
Директива DOSSEG вызывает группирование сегментов ассемблерной программы в соответствии с соглашениями, принятыми фирмой Microsoft для языков высокого уровня.
Директива .MODEL model, language задает модель памяти, где model представляет имя модели памяти, а language – имя языка программирования (C, Pascal и др.), на котором написаны вызываемые процедуры данного ассемблерного модуля. В программах, написанных целиком на языке Турбо ассемблер, достаточно ограничиться названием модели памяти.
Существуют следующие модели памяти:
tiny – код и данные программы размещаются в одном и том же сегменте, размером 64 Кбайт;
small – код и данные программы размещаются в двух отдельных сегментах размером 64 Кбайт;
medium – код программы может занимать более одного сегмента, а данные этой программы размещаются в одном отдельном сегменте;
compact – код программы занимает один сегмент, а данные могут размещаться в нескольких сегментах;
large и huge – код программы и данные могут превышать по размеру 64 Кбайт и занимать по несколько сегментов.
Ассемблерные программы на практике редко требуют более 64 Кбайт памяти для программного кода или данных, поэтому для большинства приложений применима модель small.
Директива .STACK size определяет размер стека. Например, .STACK 200h
определяет размер стека равным 200h, или 512 байт.
Директива .CODE определяет начало кодового сегмента программы и не имеет операндов. Загружать регистр CS в явном виде никогда не требуется, ибо это производит операционная система при запуске программы. Подобным образом операционная система устанавливает также регистр SS и, как правило, во время работы программы эта установка сохраняется.
Директива .DATA определяет начало сегмента данных. Следует учесть, что при выполнении программы для доступа к ячейкам памяти сегмента данных, определяемого директивой .DATA, необходимо явно загрузить в регистр DS символическое имя @Data. Эта загрузка обычно производится последовательностью из двух команд:
………………..
mov ax,@Data
mov ds,ax
………………..
Таким образом, обобщенная структура (шаблон) типовой ассемблерной программы, использующей упрощенные сегментные директивы, имеет вид:
DOSSEG
.MODEL SMALL
.STACK size
.DATA
Здесь
записываются директивы определения
идентификаторов и пе-ременных для
резер-вирования места в памяти
.CODE
ProgramStart:
mov ax,@data
mov ds,ax ;Устанавливает DS на сегмент .DATA
Здесь
записываются команды программы ……………………….. ………………………..
mov ah,4ch ;Обращение к DOS для выхода из программы
int 21h
END ProgramStart
Ниже приведен пример ассемблерной программы, использующей упрощенные сегментные директивы.
;=============================================================
;Эта программа реверсирует введенную строку и отображает
реверсируемую и ;реверсированную строки на экране дисплея.
;=============================================================
DOSSEG
.MODEL SMALL
.STACK 200h
.DATA
MAX_LENGTH EQU 100
STR_REVERS DB MAX_LENGTH DUP (?)
REVERS_STR DB MAX_LENGTH DUP (?)
.CODE
ProgReverse:
mov ax,@Data ;Установка регистра DS на
mov ds,ax ;сегмент данных
mov ah,3fh ;Функция DOS считывания из устройства
;с логическим номером в bx
mov bx,00 ;Логический номер стандартного
;устройства ввода - клавиатуры
mov cx,MAX_LENGTH ;Считывание до максимального
;числа символов в cx
mov dx,OFFSET STR_REVERS;Адресация области памяти
;буфера для реверсируемой строки
int 21h ;Прием символов
and ax,ax ;Были ли считаны какие-либо символы
jz Last ;Нет, переход на завершение программы
mov cx,ax ;Записать число введенных символов в cx
push cx ;Сохранить в cx длину введенной строки
mov bx,OFFSET STR_REVERS ;Реверсируемая строка
mov si,OFFSET REVERS_STR ;Реверсированная строка
add si,cx ;Указание на конец буфера
dec si ;реверсированной строки
ReverseLoop: mov al,[bx] ;Прием следующего символа и запись
mov [si],al ;символов в обратном порядке
inc bx ;Указание на следующий символ в
;буфере реверсируемой строки
dec si ;Указание на предыдущий символ в
;буфере реверсированной строки
Loop ReverseLoop;Перенос следующего символа,
;если символ есть
pop cx ;Считать из cx длину введенной строки
mov ah,40h ;Функция DOS записи в устройство
mov bx,1 ;с логическим номером в bx
mov dx, OFFSET REVERS_STR;Вывод на экран дисплея
int 21h ;этой строки
Last: mov ah,4ch ;Обращение к функции DOS
Int 21h ;для выхода из программы
END ProgReverse ;Конец программы
В рассмотренной программе для ввода реверсируемой и вывода реверсированной строк использовались служебные функции 3fh и 40h MS – DOS, вызываемые через программное прерывание int 21h /11/.
Многочисленные примеры программ на языках Турбо ассемблер и Макро ассемблер рассмотрены в /17,18,19/.
Создание ассемблерной программы, как уже было рассмотрено выше, включает этапы редактирования, ассемблирования, компоновки (линкирования) и отладки. Положим, с помощью редактора подготовлен исходный модуль (файл) программы REVERSE.ASM из последнего примера. Для ассемблирования файла REVERSE.ASM вводится следующая командная строка Турбо ассемблера:
TASM REVERSE
Если не задано другое имя файла, в результате ассемблирования получается объектный файл REVERSE.OBJ. Для выполнения компоновки, если после ассемблирования не было сообщений об ошибках или предупреждений, вводится следующая командная строка: TLINK REVERSE
По завершении компоновки, если не было сообщений об ошибках, получается загрузочный файл REVERSE.EXE программы.
Для отладки ассемблерных программ используются различные инструментальные оболочки и сервисные программы.