- •Щемелева т.К.
- •Архитектура и программирование реального режима микропроцессоров фирмы intel
- •Учебное пособие
- •Пермь 2001
- •Содержание
- •1.2.Переводы между позиционными системами счисления
- •1.3.Система кодирования символов ascii
- •1.4. Преобразование строки ascii-кодов в двоичное и шестнадцатеричное число
- •1.5. Применение систем счисления в эвм
- •1.6. Контрольные вопросы и задания
- •Тема 2. Представление данных на языке ассемблера и их хранение в памяти пк
- •2.1. Биты, байты и слова
- •2.3. Размещение различных типов данных в памяти пк
- •2.4. Отрицательные числа
- •2.5. Контрольные вопросы и задания
- •Тема 3. Элементы архитектуры персонального компьютера: сегментная память и регистровая структура микропроцессора
- •3.1. Понятие сегмента
- •3.2. Способ адресации ячеек сегментированной памяти
- •3.4. Программистская модель мп i8086. Назначение регистров.
- •Регистры общего назначения
- •Регистры сегментов и указатель команд
- •3.5. Контрольные вопросы и задания
- •Тема 4. Создание программы в ехе-формате
- •4.1. Программы на языке транслятораMasm.
- •4.1.1. Определение сегментов и данных.
- •4.1.2. Структура программы.
- •4.2. Программы на языке транслятораTasm.
- •4.2.1. Особенности транслятора.
- •4.2.2. Определение сегментов и данных .
- •4.2.3. Директива model.
- •4.2.4. Директивы упрощенного описания сегментов.
- •4.2.5. Структура программы.
- •4.2.6. Директивы startupcode и exitcode.
- •4.3. Контрольные вопросы и задания
- •Тема 5. Способы адресации данных в командах языка ассемблер
- •5.1. Регистровая адресация
- •5.2. Непосредственная адресация.
- •5.3. Прямая адресация.
- •5.4. Косвенная регистровая.
- •5.5. Адресация по базе.
- •5.6. Индексная адресация.
- •5.7. Адресация по базе с индексированием.
- •5.8. Контрольные задания.
- •Тема 6. Основные команды языка Ассемблер
- •6.1. Команды пересылки.
- •1) Пересылка данных
- •2) Пересылка адресов
- •4) Пересылка в стек и из стека
- •6.2. Арифметические операции.
- •2) Арифметические операции над двоичными кодами.
- •3) Команда сравнения:
- •6.3. Команды корректировки.
- •6.4. Команды логических операций.
- •1) Поразрядные логические операции:
- •2) Команды сдвига
- •6.5. Команды передачи управления.
- •6.6. Команды организации цикла.
- •6.7. Команды вызова процедур и возврата из них.
- •6.8. Команды прерываний и возврата из них.
- •6.8.1. Функции ввода/выводаDos.
- •6.8.2. ФункцииBios управления экраном.
- •Тема 7. Стек
- •7.1.Стек и сегмент стека
- •7.2.Стековые команды
- •7.3. Доступ к элементам стека
- •Тема 8. Практическая работа на пк.
- •Тема 9. Создание линейных программ
- •9.1 Создание линейной программы.
- •9.1.1. Составление текста программы.
- •9.1.2 Трансляция.
- •9.1.3. Создание исполняемого файла
- •9.1.4.Отладка программы в turbo debugger’е
- •9.2. Контрольные вопросы и задания
- •Тема 10. Организация ветвлений.
- •10.1.Флаги и их назначение.
- •10.2 Команда безусловного перехода jmp
- •10.3 Команды условных переходов
- •10.4. Создание разветвленной программы.
- •10.4.1. Составление текста программы.
- •10.4.2.Трансляция.
- •10.4.3. Создание исполняемого файла.
- •10.5. Контрольные вопросы и задания
- •Тема 11. Организация циклов
- •11.1. Команды управления циклом
- •11.2.Создание циклической программы.
- •11.2.1.Составление текста программы.
- •11.2.2.Трансляция.
- •11.2.3.Создание исполняемого файла
- •11.2.4.Отладка программы в turbo debugger’е
- •11.3. Контрольные вопросы и задания
- •Тема 12. Циклическая разветвленная программа
- •12.1.Создание программы.
- •12.1.1.Составление программы
- •12.1.2.Трансляция.
- •12.1.3.Создание исполняемого файла.
- •12.1.4. Отладка программы в turbo debugger’е
- •12.2.Контрольные вопросы
- •12.3. Контрольные задания
- •Тема 13. Связь ассемблера с языкомPascal.
- •13.1 Общие положения
- •13.2 Организация связи
- •13.3 Передача аргументов (и возврат результата в случае функции)
- •13.4 ДирективаArg
- •13.5 Использование операндов директивыmodel
- •13.6 Передача данных остальных типовPascal
- •13.7 Возврат значения в программу наPascal
- •13.8 КомандыEnter иLeave
- •13.9 Итоги
- •Листинг 1.2. Ассемблерное представление.
- •Тема 16. Рекомдации начинающему программисту
- •Тема 17. Контрольная работа
- •Список литературы
- •Приложение 1 Инструкция по работе с программой Turbo Debugger.
- •Приложение 2 Практическая работа на пк
- •Приложение 3 ключи командной строкиtasmиtlink
Тема 16. Рекомдации начинающему программисту
Если Вы не владеете пока ни одним языком программирования, следует взяв за основу любой вариант контрольной работы, приведенный в ТЕМЕ 17 , разбить задание на ряд промежуточных, постепенно усложняющихся заданий, написать и отладить программы для них. Рекомендуется такая последовательность:
Линейная программа для обработки одного элемента
Линейная программа для обработки двух-трех элементов массива
Линейная программа с разветвлением по условию для обработки одного элемента
Циклическая программа по обработки массива размером n - элементов , где n-любое натуральное число
Циклическая программа с разветвлением по условию по обработке массива размером n элементов
Например, текст задания такой:
Сложить два массива в сегменте данных, оба - размером 16 байт; сложение выполнить при условии нечетного числа единиц в двоичных кодах элементов первого массива.
Составим следующие постепенно усложняющиеся задания :
Сложить два байта, оба в сегменте данных;
Сложить два байта, оба в сегменте данных при условии нечетного числа единиц в коде первого байта ;
Сложить два массива, каждый размером 2 байта, оба в сегменте данных, используя только линейный алгоритм;
Сложить два массива по 8 байт, оба в сегменте данных, используя циклический алгоритм;
Сложить два массива по 8 байт, оба в сегменте данных, используя циклический алгоритм; сложение выполнить при условии, что байты первого массива содержат нечетное число единиц.
Тема 17. Контрольная работа
Вариант 1
Переслать строку А1 дополнительного сегмента в строку В1 сегмента данных. Если элемент строки А1>0, пересылать уменьшенное на 2 значение, иначе пересылать без изменений.
Вариант 2
Сложить два массива двоичных чисел в формате байта, один - в сегменте данных, другой - в дополнительном сегменте, при условии что элемент массива в сегменте данных больше элемента массива в дополнительном сегменте. Массив-сумму записать в стек под именем rez.
Вариант 3
Вычесть из массива в дополнительном сегменте массив, хранимый в сегменте данных, при условии неравенства элементов. Массив-разность разместить в сегменте данных.
Вариант 4
Переслать строку Тab1 в строку Тab2, обе - в дополнительном сегменте, с изменением младшего бита элемента Таb1 на противоположное значение.
Вариант 5
Сложить два массива : один - в сегменте данных, другой - в дополнительном сегменте, при условии нечетного значения элементов первого массива.
Вариант 6
Вычесть число 13 из элементов первого массива в сегменте данных при условии отрицательного значения элемента, иначе в новый массив записать элемент первого массива без изменений.
Вариант 7
Переслать массив байт из сегмента данных в дополнительный. Если элемент массива нечетное число, то при пересылке заменить старший бит в этом элементе 1.
Вариант 8
Переслать массив из дополнительного сегмента в другую область того же сегмента со следующими изменениями элементов: добавить 5, если элемент неравен 0.
Вариант 9
Переслать строку Str1 дополнительного сегмента в строку Str2 сегмента данных, причем если элемент строки Str1 четное число, пересылать с уменьшенным на 1 значением.
Вариант 10
Переслать массив из 10 символов из сегмента данных в дополнительный сегмент, при этом из значения элемента вычесть 2, если элемент больше или равен 0, иначе - без изменений.
Вариант 11
Переслать массив из сегмента данных в дополнительный сегмент при условии, что если элемент массива не равен 0, вместо него - пересылается 4, иначе - пересылается без изменений.
Вариант 12
Если элемент строки байт TabS не равен 0FAh, переслать его в строку DIM без изменений, иначе заменить младший бит на 0. Обе строки - в сегменте данных.
Вариант 13
Переслать из сегмента данных строку S1 в дополнительный сегмент в строку S2 с заменой каждого элемента с четным номером на 5.
Вариант 14
Переслать массив из 8 слов из дополнительного сегмента в сегмент данных при условии что слова массива содержат нечетные младшие байты.
Вариант 15
Исходные 2 массива символов находятся в дополнительном сегменте. Новый массив получить как сумму исходных, если элементы исходных равны, если нет - записывать в новый массив константу 0Fh.
Вариант 16
Переслать массив из сегмента данных на место другого массива в том же сегмене при условии, что элементы этих массивов не равны. Если равны, заменить элемент на 0.
Вариант 17
Переслать массив из 6 байт из дополнительного сегмента в сегмент данных при условии, что элементы массива в дополнительном сегменте содержат нечетное число единиц.
Вариант 18
Переслать массив из 12 байт из дополнительного сегмента в сегмент данных при условии неравенства двух соседних байт в исходном массиве.
Вариант 19
Переслать массив байт Tab1 из сегмента дополнительного в строку Tab2 в сегменте данных, причем если элемент Tab1 неравен 1, переслать с поразрядной инверсией.
Вариант 20
Переслать строку SOURS в строку TABL, обе в сегменте данных, причем, если элемент SOURS больше 0, переслать с инверсией всех разрядов.
Вариант 21
В сегменте данных создать третий массив из элементов первого, при условии неравенства элементов первого и второго массивов.
Вариант 22
Сложить с константой 11h байты первого массива в дополнительном сегменте, если элемент массива - число четное. Если - нечетное, в новый массив ничего не записывать.
Вариант 23
Сложить два массива байт, один - в сегменте данных, другой - в дополнительном сегменте, а массив-сумму записать в стек при условии положительного значения элемента первого массива.
Вариант 24
Переслать массив из дополнительного сегмента в стек при условии нечетного числа единиц в элементах массива.