Смекни!
smekni.com

Лабораторные работы по системному ПО (стр. 1 из 3)

СИСТЕМНОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ

Методические указания к лабораторному практикуму для студентов всех форм обучения специальности ???

1998г.

Лабораторная работа № 1.

Изучение архитектуры ЭВМ. Машинное исполнение, Требования языка Ассемблер.

Цель работы. Объяснить особенности технических средств микрокомпьютера и организации программного обеспечения. Изучить машинный язык, ввод команд в память и выполнение программ. Показать основные требования к программам на языке Ассемблер и этапы ассемблирования, компоновки и выполнения программы.

Общие сведения.

Написание ассемблерных программ требует знание организации всей системы компьютера. В основе построения логики блоков компьютера лежат понятия бита и байта. Они являются теми средствами, благодаря которым в компьютерной памяти представляются данные и команды. Программа в машинном коде состоит из различных сегментов: Для определения данных, для машинных кодов и для сегмента, называемого стеком , для хранения адресов. Для выполнения арифметических действий, пересылки данных и адресов компьютер имеет 14 регистров.

Машинные коды имеют различную длину: 1,2 или 3 байта. Машинные команды находятся в памяти непосредственно друг за другом. Основной формат кодирования команд Ассемблера имеет следующий вид:

[метка] команда [операнды]

Метка (если имеется), команда и операнд (если имеется) разделяется, по крайней мере, одним пробелом или символом табуляция.

С целью стандартизации в микрокомпьютерах используется стандартный американский код для обмена информацией ASCII.

Содержание задания.

1. Имеется команда:

ECS: 100 B8 04 30 05 00 30 СВ

Что делает данная программа?

2. Напишите программу, выполняющую следующую операцию:

• Пересылка значения 25Н в регистре AL

• Сдвиг содержимого регистра AL на 1 бит влево

• Пересылка значения 15Н в регистр BL

• Умножение содержимого регистра AL на содержимое регистра BL

3. Для сегментов кода, данных и стека даны имена CDSEA, DATSEA и STKSEA соответственно. Сформируйте директиву ASSUME.

Лабораторная работа № 2

Логика и организация программы

Цель работы: раскрыть механизм передачи управления в программе (циклы и переходы) для логических сравнений и программной организации.

Общие сведения.

Большинство программ содержат ряд циклов, в которых несколько команд повторяются до достижения определенного требования, и различные проверки, определяющие, какие из нескольких действий следует выполнять. Эти действия включают управление по адресу команды, которая не находится непосредственно за выполняемой в текущий момент командой. Передача управления может осуществляться вперед для выполнения новой группы команд или назад для повторения уже выполненных команд.

Некоторые команды могут передавать управление, изменяя нормальную последовательность шагов непосредственной модификацией значения смещения в командном указателе.

Одна из команд, используемых для передачи управления - команда JMP. Эта команда выполняет безусловный переход, т.е. обеспечивает передачу управления при любых обстоятельствах. Пример оформления команды

JMP A20,

Команда указывает на то, что управление должно быть передано команде с меткой A20. Для выполнения определенного количества циклов используется команда LOOP. В каждом цикле команда LOOP автоматически уменьшает содержимое регистра СХ на 1. Пока значение в СХ не равно 0, управление передается по адресу, указанному в операнде, и если в СХ будет 0, управление переходит на следующую после LOOP команду. Пример оформления команды:

LOOP A20.

Для передачи управления подпрограмме используется команда CALL XXX, например

CALL A20.

В результате действия команды CALL управление передается процедуре A20 и начинается ее выполнение. Достигнув команды RET, управление передается на команду, непосредственно следующую за CALL A20.

Содержание задания.

1. Напишите программу для вычисления 12 чисел Фибоначчи:

1,1,2,3,5,8,13,...(каждое число в последовательности представляет собой сумму двух предыдущих чисел). Для организации цикла используйте команду LOOP.

2. Напишите программу для вычисления сумму первых 15 нечетных чисел Фибоначчи с первыми 5 четными числами Фибоначчи. Суммы должны вычисляться в подпрограммах.

Лабораторная работа .№ 3

Изучение экранных операций

Цель работы: Объяснить требования для вывода информации на экран, а также для ввода данных с клавиатуры.

Общие сведения.

Данные, предназначенные для вывода на экран и ввода с клавиатуры, имеют ASCII - формат. Для выполнения ввода и вывода используется команда INT, которая прерывает обработку программы, передает управление в DOS или BIOS для определенного действия и затем возвращает управление в прерванную программу для продолжения обработки. Имеются два типа прерываний: команда BIOS INT 10Н и команда DOS INT 21H.

Команда INT 10Н включает в себя установку курсора в любую позицию и очистку экрана. Ниже приведены примеры установки курсора на S - ю строку и 12 столбец.

MOV АН, 02 ; запрос на установку курсора

MOV ВН, 00 ; экран 0

MOV DH, 05 ; строка 05

MOV DL, 12 ; столбец 12

INT 10Н ; передача у правления в BIOS

И очистки всего экрана

MOV АН, 0600 ; АН 06 (прокрутка) AL 00 (весь экран)

MOV BH, 07 ; нормальный атрибут

MOV СХ, 0000 ; верхняя левая позиция

MOV DX, 184FH ; нижняя правая позиция

INT 10H ; передача управления в BIOS

Значение 02 в регистре АН указывает команде INT 10Н на выполнение операции установки курсора. Значение 06 в регистре АН указывает на выполнение операции очистки экрана.

Вывод на экран в DOS требует определения текстового сообщения в области данных, установки в регистре АН значения 09 и указания команды DOS INT 21H. В процессе выполнения операции конец сообщения определяется по ограничителю ($), как показано ниже:

INT 10H DB 'имя студента?', ‘$’

.

.

MOV АН, 09 ; запрос вывода на экран

LEA DX, INT 10Н ; загрузка адреса со общения

INT 21H ; вызов DOS

Для ввода данных с клавиатуры, область ввода требует наличия списка параметров, содержащего спецификацию полей, которые необходимы при выполнении команды INT: максимальная длина вводимого текста; поле, куда команда возвращает действительную длину введенного текста в байтах. Для запроса на ввод необходимо поместить в регистр АН номер функции – 10(OAH), загрузить адрес списка параметров в регистр DX и выполнить INT 21H.

Содержание задания.

1. Напишите программу вывода на экран набора символов ASCII - кода.

2. Напишите программу, запрашивающую ввод имени, а затем отображающую в средине экрана введенное имя.

Лабораторная работа № 4

Изучение команд обработки строк

Цель работы: Объяснить назначение специальных цепочечных команд, используемых для обработки специальных символьных данных.

Общие сведения.

Для обработки строковых данных ассемблер имеет пять команд обработки строк:

MOVS - переслать один байт или одно слово из одной области памяти в другую;

LODS - загрузить из памяти один байт в регистр AL или одно слово в регистр АХ;

STOS - записать содержимое регистра AL или АХ в память;

CMPS - сравнить содержимое двух областей памяти размером в один байт или в одно слово;

SCAS - сравнить содержимое регистра AL или АХ с содержимым памяти.

Префикс REP позволяет этим командам обрабатывать строки любой длины. Префикс кодируется непосредственно перед цепочечной командой, например REP MOVS В. Для использования префикса REP необходимо установить начальное значение в регистре СХ. При выполнении цепочечной команды с префиксом REP происходит уменьшение на одно значение в регистре СХ до 0. Таким образом, можно обрабатывать строки любой длины. В следующем примере выполняется пересылка 20 байт из STRING1 в STRING2. Предположим, что оба регистра DS и ES инициализированы адресом сегмента данных:

STRING1 DB 20DUP('*')

STRING2 DB 20DUP (")

……

CLD ; сброс файла DF

MOV СХ, 20 ; счетчик на 20 байт

LEA DI, STRING2 ; адрес "куда"

LEA SI, STRING1 ; адрес "откуда"

REP MOVSB ; переслать данные

Для команды LODS адрес памяти определяется регистрами DS:SI. В зависимости от значения флага DF происходит увеличение или уменьшение значения в регистре SI. Поскольку одна команда STOS также увеличивает или уменьшает адрес в регистре DI на 1 для байта или на два для слова. Практическая польза команды STOS с префиксом REP- инициализация области данных конкретным значением. Длина области (в байтах или словах ) загружается в регистр СХ. Команда CMPS сравнивает содержимое одной области памяти ( адресуемой регистрами DS : SI ) с содержимым другой области ( адресуемой регистрами ES : DI ). В зависимости от флага DF команда CMPS также увеличивает или уменьшает адреса в регистрах SI и DI на 1 для байта или на два для слова. При использовании префикса REP в регистре СХ должно находится значение длины сравниваемых полей. Команда CMPS может сравнивать любое число байтов или слов.

Рассмотрим процесс сравнения двух строк содержащих их имена Jean и JOAN. Сравнение побайтово слева направо приводит к следующему

J : J равно

Е : 0 не равно ( Е<0 )

А : А равно

N : N равно

Сравнение всех четырех байтов заканчивается сравнением N:N - равно/нуль. Так как имена " не равны ", операция должна прекратиться, как только будет обнаружено условие " не равно". Для этих целей команда REP имеет модификацию. REPE, которая повторяет сравнение до тех пор, пока сравниваемые элементы равны или регистр СХ не равен нулю. Кодируется повторяющееся однобайтное сравнение следующим образом :

REPE CMPSB.

Команда SCAS отличается от команды CMPS тем, что сканирует строку на определенное значение байта или слова. Команда SCAS сравнивает содержимое области памяти (адресуемой регистрами ES:DI ) с содержимым регистра AL или АХ. В зависимости от значения флага DF команда SCAS также увеличивает или уменьшает адрес в регистре DI на 1 для байта или на 2 для слова. При использовании префикса REP и значения длины в регистре СХ команды SCAS может сканировать строки другой длины. Команда SCAS особенно полезна в текстовых редакторах, где программа должна сканировать строки, выполняя поиск знаков пунктуации. Так как команда SCAS В должна продолжать сканирование до тех пор, пока результат сканирования "не равно" или регистр СХ не равен нулю, то используется префикс REPNE: