Главная страница

!МУ ккр. Контрольнокурсовая работа


Скачать 248.11 Kb.
НазваниеКонтрольнокурсовая работа
Дата07.12.2021
Размер248.11 Kb.
Формат файлаpdf
Имя файла!МУ ккр.pdf
ТипКурсовая
#294526
страница1 из 2
  1   2

81
КОНТРОЛЬНО-КУРСОВАЯ РАБОТА
РАБОТА В СИСТЕМЕ ПРОГРАММИРОВАНИЯ
"АССЕМБЛЕР"
1. ЦЕЛЬ И ЗАДАЧИ РАБОТЫ
Изучение программной модели и системы команд микропроцессора типа
80х86, технологии программирования на языке Ассемблер для IBM PC- совместимого компьютера и закрепление практических навыков работы с программными средствами разработки и отладки программ.
2. ОСНОВНЫЕ ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ
В настоящее время IBM PC-совместимые микроЭВМ и ПК находят все большее применение в различных отраслях экономики. Одной из сфер их интенсивного использования являются автоматизированные информационно- измерительные системы и системы управления технологическими процессами и объектами. Работа вычислительной техники в таких системах происходит в режиме реального масштаба времени в темпе, соизмеримом с темпом работы управляемого объекта или процесса. Поэтому эффективность микроЭВМ и ПК в указанных условиях работы во многом определяется не только свойствами аппаратуры, но и свойствами управляющего программного обеспечения. К программам реального времени предъявляются жесткие требования в отношении быстродействия и объема требуемых вычислительных ресурсов.
Ассемблер является машинно-ориентированным языком программирования и позволяет создавать самые быстродействующие и компактные исполняемые программы, поскольку такие программы непосредственно оперируют аппаратурой управляющего компьютера.
Очевидно, что квалифицированному специалисту в области автоматизации технологических процессов и производств необходимы определенные знания и опыт в области технологии программирования на языке
Ассемблер. Ассемблер является способом символической записи программ на машинном языке. Операторы Ассемблера являются непосредственным отображением команд процессора конкретной ЭВМ. Для написания операторов используются не числовые, а мнемонические коды команд процессора ЭВМ, а для указания адресов операндов – не физические, а символические адреса ячеек памяти.
Программирование на Ассемблере до сих пор является трудоемким процессом, поскольку Ассемблер по сравнению с языками программирования высокого уровня имеет сложный синтаксис и требует от программиста достаточно глубоких знаний по архитектуре конкретного компьютера и его аппаратных средств. В связи с этими обстоятельствами при выполнении данной лабораторной работы рекомендуется уделить серьезное внимание изучению специальной литературы, приведенной в библиографическом списке и

82
посвященной различным аспектам программно-аппаратной реализации микропроцессоров семейства Intel 80х86 и компьютеров с архитектурой типа
IBM PC/AT.
Процесс создания программы на языке Ассемблер в общем случае содержит следующую последовательность действий. Обработка программы начинается с ввода ее исходного текста в память компьютера с помощью любого текстового редактора. При этом создается текстовый файл типа ASM.
Для получения исполняемой программы необходимо преобразовать исходную программу на языке Ассемблер в машинный код (команды процессора).
Основная часть этой работы производится транслятором компилирующего типа. В результате компиляции создается объектный файл типа OBJ. Чтобы получить исполняемый файл, который содержит коды команд процессора, объектный файл необходимо обработать компоновщиком (редактором связей).
В процессе компоновки (редактирования связей) к объектному файлу присоединяются необходимые подпрограммы из библиотеки системы программирования и из личных библиотек программ пользователя, разрешаются все внешние программные ссылки и создается исполняемый файл, готовый к запуску. Файл исполняемой программы имеет тип EXE или COM.
Наиболее популярными системами программирования на языке
Ассемблер для IBM PC-совместимых компьютеров являются система
Microsoft Assembler фирмы
Microsoft Corp и система
Turbo Assembler фирмы Borland International. В рамках данной лабораторной работы предполагается программирование задач на языке
Ассемблер только для реального режима работы (Real Mode Addressing)
процессора компьютера.
2.1. Система программирования Microsoft Assembler
Система программирования Microsoft Assembler представляет собой набор программного и методического обеспечения, предназначенный для разработки и отладки программ на языке Ассемблер. Система содержит следующие основные программные компоненты:
MASM.EXE
– транслятор-компилятор, осуществляющий преобразование исходной программы на языке Ассемблер (файл типа *.ASM) в объектную программу (файл типа *.OBJ);
LINK.EXE
– компоновщик
(редактор связей), осуществляющий преобразование объектной программы в исполняемую программу (файл типа
*.COM или *.EXE);
LIB.EXE
– программу (библиотекарь), позволяющую создавать и обслуживать библиотеки объектных программ (файлы типа *.LIB);
ML.EXE
– программу, которая интегрирует функции транслятора и компоновщика;
ML.ERR
– файл, который содержит тексты информационных сообщений программы ML.EXE;

83
EXE2BIN.EXE
– программу преобразования исполняемого файла из формата EXE в исполняемый файл формата COM;
CODEVIEW.EXE
– программу-отладчик, предназначенную для облегчения поиска и локализации семантических ошибок в исходной программе на языке Ассемблер.
Транслятор MASM.EXE запускается из командной строки операционной системы и имеет следующий формат запуска:
MASM[.EXE] [/парам] ASM-файл [,OBJ-файл] [,LST-файл]
[,CRF-файл]
На рис. 1 представлена схема работы компилятора Ассемблера с входными и выходными файлами.
Исходный текст
*.ASM
Транслятор- компилятор
Протокол компиляции
(листинг)
*.LST
Таблица перекрестных ссылок
*.CRF или *.XRF
Объектная программа
*.OBJ
Рис. 1. Схема работы компилятора с файлами
Параметры в командной строке разделяются запятыми. Если вместо запятой использовать точку с запятой, то все следующие за ней параметры будут игнорироваться.
Параметр ASM-файл – это обязательный входной параметр, который определяет исходный файл с текстом программы на языке Ассемблер. Для этого файла можно задавать только имя, и в этом случае будет подразумеваться расширение имени ASM. Транслятор допускает в одном сеансе работы компиляцию многих файлов, и в этом случае можно задать шаблон групповой операции с файлами, например *.ASM.
Остальные параметры компилятора MASM являются выходными и необязательными. Параметр OBJ-файл определяет имя объектного файла с расширением OBJ. Если имя объектного файла не задано, то компилятор создаст объектный файл с тем же именем, что и исходный файл. Если в процессе компиляции исходной программы будет обнаружена ошибка, то объектный файл создаваться не будет.

84
Параметр LST-файл определяет имя файла листинга, в который будет записан протокол трансляции программы. Этот файл имеет текстовый формат.
Параметр CRF-файл позволяет создать файл перекрестных ссылок с расширением CRF. Если имя этого файла в командной строке не указано, то оно будет таким же, как имя исходного файла.
Если требуется отменить создание какого-либо выходного файла, то вместо его имени можно использовать имя фиктивного файла NUL.
Кроме указанных параметров в командной строке запуска компилятора могут быть указаны параметры, начинающиеся с символа "/" и называемые ключами или переключателями. Наиболее важными переключателями определяются следующие вспомогательные функции компилятора:
/c
– в протокол трансляции включить таблицу перекрестных ссылок;
/e
– включить эмуляцию арифметического сопроцессора в случае его отсутствия в компьютере;
/h
– вывести на экран монитора краткую справочную информацию;
/ipath
– определить маршрут path для поиска файлов, включаемых в исходный текст программы;
/l
– создать файл протокола трансляции стандартного формата;
/la
– создать файл протокола трансляции полного формата;
/ml
– различать символы верхнего и нижнего регистров;
/mu
– преобразовать символы идентификаторов программы к верхнему регистру;
/mx
– различать символы верхнего и нижнего регистров для символов типа PUBLIC и EXTERN;
/n
– исключить из протокола трансляции таблицы символов;
/t
– отказаться от вывода сообщений компилятора в случае успешной трансляции;
/w1 или /w2 – разрешить вывод предупреждающих сообщений компилятора (1 – серьезного уровня, 2 – советующего уровня);
/w0
– запретить вывод предупреждающих сообщений компилятора;
/x
– в протокол трансляции включить директивы условной компиляции;
/zd
– в объектный файл включить информацию о номерах строк исходной программы (это необходимо для работы программы-отладчика
CODEVIEW
);
/zi
– в объектный файл включить полный объем отладочной информации.
Приведем пример командной строки запуска компилятора MASM:
MASM /la /zi LABRAB, , ,NUL
В данном примере происходит компиляция программы из файла
LABRAB.ASM
, при этом создается объектный файл с именем LABRAB.OBJ и файл протокола трансляции (файл листинга) LABRAB.LST. Файл перекрестных

85
ссылок не создается. Задан переключатель /zi, с помощью которого в объектный файл будет внесена дополнительная информация, необходимая для последующей отладки программы. С помощью переключателя /la задается полный формат протокола трансляции.
Запуск компилятора MASM некоторых версий возможен также без указания каких-либо исходных данных в командной строке. В этом случае компилятор будет работать в диалоговом режиме и имена входных и выходных файлов должны вводиться пользователем с клавиатуры. Диалог будет иметь примерно следующий вид:
Source Filename [.ASM]: labrab
Object Filename [labrab.obj]:
Source Listing [NUL.LST]:
Cross Reference [NUL.CRF]:
В прямоугольных скобках указываются имена файлов, предлагаемые компилятором по умолчанию, которые будут приняты после нажатия клавиши
Enter
. Выходные файла с именем NUL не создаются. В качестве имени выходного файла можно указать PRN и направить файл на печать. Компилятор допускает обработку многих файлов, и в этом случае можно задать шаблон групповой операции с файлами (например, *.ASM) или перечислить имена файлов через знак +. Если все имена исходных файлов не помещаются на одной строке, то ввод имен можно продолжить, поставив символ + в последнюю позицию текущей строки. Пользователь может отказаться от ввода имен файлов с помощью нажатия комбинации клавиш Ctrl+Break или Ctrl+C и тем самым прекратить работу компилятора.
Компоновщик LINK.EXE также запускается из командной строки операционной системы и имеет следующий формат запуска:
LINK[.EXE] [/парам] OBJ-файл [,EXE-файл] [,MAP-файл] [,LIB-файл]
На рис. 2 приведена схема работы компоновщика LINK с входными и выходными файлами.
Параметры в командной строке запуска компоновщика разделяются запятыми. Если в командной строке присутствует точка с запятой, то все следующие за ней параметры будут игнорироваться.
Параметр OBJ-файл – это обязательный входной параметр, который определяет исходный объектный файл. Для этого файла можно задавать только имя, и в этом случае будет подразумеваться расширение имени OBJ.
Компоновщик допускает компоновку многих файлов, и при этом в командной строке можно задать шаблон групповой операции с файлами, например *.ASM.
Необязательный параметр LIB-файл также является входным. Он определяет имя библиотеки объектных подпрограмм, необходимых

86
компоновщику для разрешения внешних ссылок, которые могут встретиться в исходной программе.
Объектная программа
*.OBJ
Компоновщик
(редактор связей)
Исполняемая программа
*.EXE или *.COM
План исполняемой программы
*.MAP
Библиотека объектных подпрограмм
*.LIB
Рис. 2. Схема работы компоновщика с файлами
Остальные параметры компоновщика являются выходными. Параметр
EXE-файл определяет имя исполняемого файла с расширением EXE или COM.
Если имя выходного файла не задано, то компилятор создаст исполняемый файл с тем же именем, что и исходный объектный файл. Если в процессе компоновки будет обнаружена ошибка, то исполняемый файл не создается.
Параметр MAP-файл определяет имя файла, который по умолчанию всегда создается компоновщиком. Этот файл имеет текстовый формат и содержит протокол компоновки исходной программы. Протокол включает список сегментов программы, стартовые адреса, сообщения о предупреждениях
(warning) и ошибках (error), которые возникли в процессе компоновки исходной программы. Если имя MAP-файла не задано, то компилятор создаст данный файл с тем же именем, что и исходный объектный файл.
Кроме указанных параметров в командной строке запуска компоновщика могут быть указаны переключатели, начинающиеся с символа "/". Приведем наиболее существенные переключатели компоновщика:
/?
или /help – вывести на экран монитора краткую справочную информацию;
/batch
– отменить диалоговый режим работы компоновщика;
/codeview
– внести в исполняемый файл отладочную информацию с целью отладки его с помощью отладчика CODEVIEW;
/exepack
– создать более компактный исполняемый файл за счет удаления из него избыточной информации. Этот режим рекомендуется устанавливать при компоновке отлаженного варианта программы;
/information
– включить вывод информации о ходе компоновки программы;
/linenumbers
– включить в протокол компоновки номера строк и адреса исходных команд и операторов;

87
/map
– включить в протокол компоновки расширенную информацию о компоновке программы, включающую имена всех глобальных объектов и соответствующие им адреса относительно начала исполняемого модуля в формате сегмент:смещение;
/tiny
– скомпоновать программу типа COM.
Приведем пример командной строки запуска компоновщика LINK:
LINK LABRAB,LABRAB;
В данном примере происходит компоновка программы из файла
LABRAB.OBJ
, при этом создается исполняемый файл с именем LABRAB.EXE,
Файл протокола компоновки не создается.
Все параметры из командной строки запуска компоновщика LINK могут быть помещены в так называемый файл автоматического ответа. Файл автоматического ответа имеет текстовый формат и его имя должно начинаться с символа @.
Если компоновщик LINK запускается без каких-либо параметров, то он переходит в диалоговый режим работы и предложит пользователю ввести с клавиатуры имена входных и выходных файлов: объектного файла, исполняемого файла, файла листинга (протокола) компоновки, файла библиотеки подпрограмм (если она необходима), файла с определениями
(необязательный файл). После этого будет создан исполняемый файл.
Указанная последовательность действий иллюстрируется следующим примером компоновки исполняемого файла с именем LABRAB.EXE:
Object Modules [.OBJ]: labrab
Run File [labrab.exe]:
List File [NUL.MAP]:
Libraries [.LIB]:
Definitions File [NUL.DEF]:
В прямоугольных скобках указаны имена файлов, предлагаемые компоновщиком по умолчанию, которые будут приняты после нажатия клавиши Enter. При компоновке нескольких файлов можно задать шаблон групповой операции с файлами или перечислить имена файлов через знак +.
Если все имена исходных файлов не помещаются на одной строке, то ввод имен можно продолжить, поставив символ + в последнюю позицию текущей строки.
Пользователь может отказаться от ввода имен файлов с помощью нажатия комбинации клавиш Ctrl+Break или Ctrl+C и тем самым прекратить работу компоновщика.
Программа ML.EXE интегрирует функции транслятора и компоновщика.
Она позволяет последовательно выполнить процедуры компиляции и компоновки исходного файла либо выполнить только трансляцию исходного

88
файла, либо только компоновку исполняемой программы из объектного файла.
Формат вызова программы ML:
ML[.EXE] [/parameters] filelist [/link linkoptions]
Параметры программы ML имеют следующий смысл:
/parameters
– список переключателей, определяющих режим работы компилятора; filelist
– спецификация исходного (ASM) или объектного (OBJ) файла;
/link
– переключатель, включающий этап компоновки исполняемой программы; linkoptions
– список переключателей, определяющих режимы работы компоновщика.
Приведем перечень основных переключателей программы ML:
/Help или -? – вывести на дисплей краткой справочной информации;
/AT
– компоновать исполняемый файл в формате COM;
/C
– выполнить только компиляцию программы;
/Cu
– преобразовать все идентификаторы программы в символы верхнего регистра;
/Fpi
– включить в исполняемый файл эмуляцию команд арифметичес- кого сопроцессора (если он отсутствует в компьютере);
/Ta<имя_файла>
– определить имя исходного файла;
/Fo<имя_файла>
– определить имя объектного файла;
/Fe<имя_файла>
– определить имя исполняемого файла;
/Fl<имя_файла>
– определить имя файла листинга;
/Ipath
– определить маршрут path для поиска файлов, включаемых в исходный текст программы;
/Sa
– определить вывод протокола (листинга) в максимальном формате;
/Sl<число>
– определить количество позиций в строке распечатки исходного текста программы (целое положительное число из диапазона от 80
до 132, по умолчанию размер строки равен 80);
/Sp<число>
– определить количество строк на листе (страницы) распечатки исходного текста программы (целое положительное число не менее
15, по умолчанию размер листа равен 63 строкам);
/St"заголовок"
, /Ss"подзаголовок" – определить соответственно заголовок и подзаголовок, выводимые на каждом листе распечатки текста программы. Ограничительные кавычки можно опустить, если параметр не содержит пробелы или символы табуляции. Параметру могут предшествовать пробелы;
/Zs
– выполнить только синтаксическую проверку текста исходной программы;

89
/W0
и /W1 – выключить (0) или включить (1) вывод предупреждающих сообщений компилятора;
/WX
– интерпретировать предупреждающие сообщения компилятора как ошибочные;
/Zd и /Zi – включить в объектный модуль отладочную информацию.
Переключатели /Sl и /Sp, /St и /Ss позволяют установить необходимый формат распечатки исходного текста программы.
Приведем пример командной строки запуска программы ML:
ML /AT LABRAB.ASM /link
В данном примере происходит компиляция программы из файла
LABRAB.ASM
, при этом создается объектный файл с именем LABRAB.OBJ. В случае успешной компиляции будет создан исполняемый файл с именем
LABRAB.COM
. Приведем пример протокола работы программы ML, выводимого на экран монитора компьютера в процессе компиляции и компоновки программы LABRAB:
D:\MASM>ML.EXE /AT labrab.asm /link
Microsoft (R) Macro Assembler Version 6.00
Copyright (C) Microsoft Corp 1981-1991. All rights reserved.
Assembling: labrab.asm
Microsoft (R) Segmented-Executable Linker Version 5.13
Copyright (C) Microsoft Corp 1984-1991. All rights reserved.
Object Modules [.OBJ]: labrab.obj/t
Run File [labrab.com]: "labrab.com"
List File [NUL.MAP]: NUL
Libraries [.LIB]:
Definitions File [NUL.DEF]: ;
2.2. Система программирования Turbo Assembler
Система программирования Turbo Assembler является практически полным функциональным аналогом системы программирования Microsoft
Assembler
Основными программными компонентами системы программирования Turbo Assembler являются следующие:
TASM.EXE
– транслятор-компилятор, осуществляющий преобразование исходной программы на языке Ассемблер (файл типа *.ASM) в объектную программу (файл типа *.OBJ);
TLINK.EXE
– компоновщик
(редактор связей), осуществляющий преобразование объектной программы в исполняемую программу (файл типа
*.COM или *.EXE);

90
TLIB.EXE
– программа-библиотекарь, позволяющая создавать и
обслуживать библиотеки пользовательских программ (файлы типа *.LIB);
TDEBUG.EXE
– программа-отладчик, предназначенная для облегчения поиска и локализации семантических ошибок в исходной программе на языке
Ассемблер. Подробное описание приемов с данным отладчиком приведено в
[2].
Транслятор TASM.EXE запускается из командной строки операционной системы и имеет следующий формат запуска:
TASM[.EXE] ASM-файл [,OBJ-файл] [,LST-файл] [,XRF-файл]
Параметр ASM-файл – это обязательный входной параметр, который определяет исходный файл с текстом программы на языке Ассемблер. Для исходного файла можно задавать только имя, и в этом случае будет подразумеваться расширение имени ASM. Транслятор допускает компиляцию многих файлов, при этом можно задать шаблон групповой операции с файлами.
Например, команда TASM * выполнит компиляцию всех файлов с расширением ASM из текущего каталога.
Остальные параметры компилятора TASM являются выходными и необязательными. Параметр OBJ-файл определяет имя объектного файла с расширением OBJ. Если имя объектного файла не задано, то компилятор создаст объектный файл с тем же именем, что и исходный файл. Параметр
LST-файл определяет имя файла, в который будет записан протокол трансляции программы. Этот файл имеет текстовый формат.
Параметр XRF-файл позволяет создать файл перекрестных ссылок с расширением XRF. Если имя этого файла в командной строке не указано, то оно будет таким же, как имя исходного файла.
Если требуется отменить создание какого-либо выходного файла, то вместо его имени следует использовать параметр NUL. Если в качестве имени выходного файла указать PRN, то этот файл будет отправлен на печать.
Кроме указанных параметров в командной строке запуска компилятора могут быть указаны параметры, начинающиеся с символа "/" и называемые ключами или переключателями. Наиболее важными у компилятора TASM
являются следующие переключатели:
/a
– сегменты программы в процессе компиляции расположить в алфавитном порядке;
/c
– в протокол трансляции включить таблицу перекрестных ссылок;
/e
– включить эмуляцию арифметического сопроцессора в случае его отсутствия в компьютере;
/h или /? – вывести на экран монитора краткую справочную информацию о компиляторе;
/ipath
– определить маршрут path для поиска файлов, включаемых в исходный текст программы;

91
/l
– создать файл протокола трансляции;
/ml
– различать символы верхнего и нижнего регистров;
/mu
– преобразовать символов идентификаторов программы к верхнему регистру;
/mx
– различать символы верхнего и нижнего регистров для символов типа PUBLIC и EXTERN;
/n
– исключить из протокола трансляции таблицы символов;
/r
– использовать в процессе компиляции команды арифметического сопроцессора;
/s
– сегменты программы располагать в последовательном порядке;
/w+
или /w- – разрешить (+) или запретить (–) вывод предупрежда- ющих сообщений компилятора;
/x
– включить в протокол трансляции директивы условной компиляции;
/z
– в сообщениях об ошибках указывать номера неправильных строк исходной программы;
/zd
– в объектный файл включить информацию о номерах строк исходной программы (это необходимо для последующей отладки программы);
/zi
– в объектный файл включить полный объем отладочной информации.
Приведем пример командной строки запуска компилятора TASM:
TASM /zi LABRAB, , ,NUL
В данном примере происходит компиляция программы из файла
LABRAB.ASM
, при этом создаются объектный файл с именем LABRAB.OBJ и файл протокола трансляции (файл листинга) LABRAB.LST. Файл перекрестных ссылок не создается. Задан переключатель /zi, с помощью которого в объектный файл будет внесена дополнительная информация, необходимая для последующей отладки программы.
Компоновщик TLINK.EXE также запускается из командной строки операционной системы и имеет следующий формат запуска:
TLINK[.EXE] OBJ-файл, EXE-файл [,MAP-файл] [,LIB-файл]
Параметр OBJ-файл – это обязательный входной параметр, он определяет исходный объектный файл. Для объектного файла можно задавать только имя, и в этом случае будет подразумеваться расширение имени OBJ.
Остальные параметры компоновщика являются выходными. Параметр EXE- файл определяет имя исполняемого файла с расширением EXE или COM. Если имя выходного файла не задано, то компилятор создаст исполняемый файл с тем же именем, что и исходный файл.
Параметр MAP-файл определяет имя файла, который по умолчанию всегда создается компоновщиком. Этот файл содержит протокол компоновки

92
исходной программы и имеет текстовый формат. Он включает список сегментов программы, стартовые адреса, сообщения о предупреждениях
(warning) и ошибках (error), которые возникли в процессе компоновки исходной программы. Если имя MAP-файла не задано, то компилятор создаст данный файл с тем же именем, что и исходный объектный файл.
Кроме приведенных параметров в командной строке запуска компоновщика могут быть указаны переключатели. Наиболее важными переключателями, которые определяют вспомогательные функции компоновщика, являются:
/h или /? – вывести на экран монитора краткой справочной информации о компоновщике;
/m
– включить в MAP-файл список внешних символов;
/x
– отказаться от создания MAP-файла;
/i
– разрешить присоединение к исполняемому файлу программных сегментов с неинициализированными данными;
/l
– создать в MAP-файле секции с номерами строк исходного объектного кода;
/s
– в дополнение к переключателю /m включить в MAP-файл подробную карту сегментов программы;
/n
– указать компоновщику, что отсутствуют библиотеки подпрограмм по умолчанию;
/d
– включить вывод предупреждающих сообщений при наличии повторяющихся символов в библиотеке подпрограмм;
/c
– включить распознавание символов верхнего и нижнего регистров для символов типа PUBLIC и EXTERN;
/3
– включить генерацию 32-битного программного кода;
/v
– включить в исполняемую программу символьную информацию для работы программы-отладчика;
/t
– скомпоновать программу типа COM;
/o
– включить поддержку программ оверлейной структуры;
/ye
– разрешить использование отображаемой (expanded) памяти;
/yx
– разрешить использование расширенной (extended) памяти.
Если компилятор TASM и компоновщик TLINK запускаются без параметров, то они выводят на экран краткую справочную информацию о себе
(как в случае задания переключателя /h или /?).
Приведем пример командной строки запуска компоновщика TLINK:
TLINK /x /t LABRAB
В данном примере происходит компоновка программы из файла
LABRAB.OBJ
, при этом создается исполняемый файл с именем LABRAB.COM, файл протокола компоновки не создается.

93
Все параметры из командной строки запуска компоновщика TLINK также могут быть помещены в файл автоматического ответа, имя которого должно начинаться с символа @.
2.3. Пример программы на языке Microsoft Assembler
Рассмотрим пример простой ассемблерной программы на языке
Microsoft Assembler
, где осуществляется вывод на экран монитора компьютера строки символов "Hello, world!":
; Пример программы на языке Microsoft Assembler
Assume CS: Code, DS: Data
Data SEGMENT
Greet DB 'Hello, world!',13,10,'$'
Data ENDS
Code SEGMENT
Begin: mov ax, DATA ; Загрузка адреса сегмента в регистр DS mov ds, ax mov dx, OFFSET Greet mov ah, 9 int 21h ; Вывод сообщения mov ah, 4Ch int 21h ; Выход из программы
Code ENDS
Stack_ SEGMENT Stack
DB 256 DUP (?)
Stack_ ENDS
END Begin
С помощью директивы Assume указывается, что адресный регистр CS
связывается с сегментом машинного кода программы, а адресный регистр DS –
с сегментом данных. Директива SEGMENT с меткой Data определяет область данных программы, а директива SEGMENT с меткой Code – область кода программы. Метка Begin определяет точку, с которой произойдет запуск программы на выполнение. Директива SEGMENT с меткой STACK_ позволяет выделить область стековой памяти объемом 256 байт. Конец каждой из трех областей оформлен с помощью директивы ENDS. Директива END указывает на завершение программы, начинающейся с метки Begin. Комментарии в программе начинаются с символа точка с запятой.

94 2.4. Пример программы на языке Turbo Assembler
Рассмотрим далее одну из возможных структур программы на языке
Turbo Assembler
. Эта программа выводит такую же одну строку символов, что и предыдущая программа.
; Пример программы на языке Turbo Assembler
.MODEL small ; Объявление модели памяти
.STACK 100h ; Стек размером 256 байт
.DATA ; Объявление сегмента данных
Greet DB 'Hello world!',13,10,'$'
.CODE
Begin: mov ax, @DATA ; Загрузка адреса сегмента в регистр DS mov ds, ax mov dx, OFFSET Greet mov ah, 9 ; Вывод сообщения int 21h mov ah, 4Ch int 21h ; Выход из программы
END Begin
Здесь директива .MODEL позволяет определить используемую модель памяти. При выполнении данной лабораторной работы для простых программ рекомендуется использовать модели tiny (минимальная) и small (малая). В приведенном примере задана модель small
, которая предполагает использование двух сегментов памяти (каждый объемом до 64 Кбайт): первый сегмент для машинного кода программы, второй сегмент – для данных и стека.
Директива .STACK позволяет определить область стековой памяти объемом
256 байт. Директива .DATA начинает область программы, в которой размещаются данные. Директива .CODE начинает область, в которой содержится код программы. Метка Begin определяет точку, с которой произойдет запуск программы на выполнение. Директива END указывает на завершение кода программы. После этой директивы можно определить метку, с которой произойдет запуск программы.
2.5. Пример протокола трансляции программы (файла листинга) в системе программирования Microsoft Assembler
Файл протокола трансляции (листинга) содержит действительный машинный код и относительное смещение каждой ассемблерной команды.
Кроме этого, здесь содержится информация об используемых метках и сегментах (тип метки и значение, которому она соответствует, атрибуты сегментов). В протоколе может также присутствовать таблица перекрестных ссылок для всех меток, используемых в исходной программе. Эта таблица

95
показывает, где определена каждая метка и в каких строках исходной программы она используется.
В протоколе трансляции можно выделить две части. Первая из них содержит ассемблерный код программы, дополненный машинным кодом и смещением команд и данных относительно начала соответствующего сегмента.
Приведем пример листинга для программы, представленной в п. 2.3.
Microsoft (R) Macro Assembler Version 6.00 10/29/03 15:40:21 example.asm
Page 1 - 1
; Пример программы на языке Microsoft Assembler
Assume CS: Code, DS: Data
0000
Data SEGMENT
0000 48 65 6C 6C 6F 2C Greet DB 'Hello, world!',13,10,'$'
20 77 6F 72 6C 64 21 0D 0A 24 0010
Data ENDS
0000
Code SEGMENT
0000
Begin:
0000 B8 ---- R mov ax, DATA ; Загрузка адреса сегмента в регистр DS
0003 8E D8 mov ds, ax
0005 BA 0000 R mov dx, OFFSET Greet
0008 B4 09 mov ah, 9 000A CD 21 int 21h ; Вывод сообщения
000C B4 4C mov ah, 4Ch
000E CD 21 int 21h ; Выход из программы
0010
Code ENDS
0000
Stack_ SEGMENT Stack
0000 0100 [
DB 256 DUP (?)
00
]
0100
Stack_ ENDS
END Begin
Microsoft (R) Macro Assembler Version 6.00 10/29/03 15:40:21 example.asm
Symbols 2 - 1
Segments and Groups:
N a m e Size Length Align Combine Class
Code . . . . . . . . . . . . . .
16 Bit
0010 Para Private
Data . . . . . . . . . . . . . .
16 Bit
0010 Para Private
Stack_ . . . . . . . . . . . . .
16 Bit
0100 Para Stack
Symbols:
N a m e Type Value Attr
Begin . . . . . . . . . . . . .
L Near 0000 Code
Greet . . . . . . . . . . . . .
Byte 0000 Data
0 Warnings
0 Errors

96
В начале протокола присутствуют наименование и версия транслятора, время и дата трансляции программы, идентификатор исходного программного файла. Если в процессе компиляции программы возникнут ошибки или предупреждения, то соответствующие сообщения будут вставлены в протокол трансляции сразу же после строки с ошибкой.
Каждая строка листинга компилятора Microsoft Assembler имеет следующий формат:
<смещение><машинный_код><исходный_код>
, где смещение – смещение строки относительно начала соответствующего сегмента; машинный_код – результат преобразования исходного кода в машинные команды (или шестнадцатеричный код команды); исходный_код
– соответствующая ассемблерная строка исходного файла.
Рассмотрим одну из строк листинга:
0005 BA 0000 R mov dx, OFFSET Greet
, где 0005 – смещение команды в сегменте кода; BA 0000 R – машинный код команды mov dx, OFFSET Greet, который содержит 3 байта (BA 00 00).
Каждая следующая машинная команда смещается в памяти компьютера на длину предыдущей команды. Например, смещение команды mov ds, ax равно 0003, поскольку длина предыдущей команды mov ax, DATA
составляет 3 байта.
В конце машинного кода может присутствовать суффикс – в приведенном примере это суффикс R. Данный суффикс означает, что стоящее перед ним значение (смещение строки символов Greet) будет в дальнейшем скорректировано. Список возможных суффиксов и их назначение приведены в табл. 1.
Таблица 1
Суффиксы машинного кода
Суффикс
Назначение
R/r
Будет скорректировано смещение
S/s
Будет скорректирован сегмент
SR/sr
Будут скорректированы смещение и сегмент
E/e
Будет скорректировано смещение внешнего символа
SE/se
Будут скорректированы смещение и сегмент внешнего символа
SO/so
Будет скорректирован сегмент внешнего символа
+
Ассемблерный код продолжается в следующей строке
Во второй части протокола трансляции присутствуют две таблицы.
Первая из них (Segments and Groups) определяет используемые в

97
исходной программе сегменты, а вторая – используемые метки. Первая таблица представляет собой список групп и сегментов. Каждая ее строка содержит следующие данные:
– идентификатор группы и сегмента (Name);
– размер данных в сегменте (Size);
– размер сегмента (Length);
– тип выравнивания сегмента (Align);
– тип объединения одноименных сегментов в группу (Combine);
– класс сегментов (Class).
Приведем пример описания сегмента:
Stack_ 16 Bit 0100 Para Stack
Здесь описывается сегмент стека с идентификатором Stack_. Размер данных в этом сегменте 16 бит, размер сегмента 100 16
или 256 10
байт, заданы выравнивание сегмента в памяти компьютера по границе параграфа (Para)
(один параграф равен 16 байт), тип объединения и класс сегмента Stack.
Все метки во второй таблице (Symbols) перечислены в алфавитном порядке. Для каждой метки указаны ее тип (Type), значение (Value) и атрибут
(Attr).
В конце протокола трансляции указывается количество обнаруженных в программе предупреждений (Warnings) и ошибок (Errors).
2.6. Пример протокола трансляции программы (файла листинга) в системе программирования Turbo Assembler
Структура протокола трансляции программы в системе программирования Turbo Assembler в основном соответствует структуре протокола трансляции в системе программирования Microsoft Assembler.
Приведем пример листинга для программы, показанной в п. 2.4.
Turbo Assembler
Version 4.0 19/10/03 12:15:35
Page 1 example.asm
1
; Пример программы на языке Турбо Ассемблер
2 3 0000
.MODEL small ; Объявление модели памяти
4 0000
.STACK 100h ; Стек размером 256 байт
5 0000
.DATA
6 0000 48 65 6C 6C 6F 20 77+ Greet DB 'Hello world!',13,10,'$'
7 6F 72 6C 64 21 0D
0A+
8 24 9 000F
.CODE
10 0000
Begin:
11 0000 B8 0000s mov ax, @DATA ;
Загрузка адреса сегмента в регистр DS
12 0003 8E D8 mov ds, ax
13 0005 BA 0000r mov dx, OFFSET Greet
14 0008 B4 09 mov ah, 9

98 15 000A CD 21 int 21h ; Вывод сообщения
16 000C B4 4C mov ah, 4Ch
17 000E CD 21 int 21h ; Выход из программы
18
END Begin
Turbo Assembler
Version 4.0 19/10/03 12:15:35
Page 2
Symbol Table
Symbol Name
Type Value
Cref
(defined at #)
??DATE
Text "19/10/03"
??FILENAME
Text "example
"
??TIME
Text "12:15:35"
??VERSION
Number 0400
@32BIT
Text 0
#3
@CODE
Text _TEXT
#3 #3 #9
@CODESIZE
Text 0
#3
@CPU
Text 0101H
@CURSEG
Text _TEXT
#5 #9
@DATA
Text DGROUP
#3 11
@DATASIZE
Text 0
#3
@FILENAME
Text EXAMPLE
@INTERFACE
Text 00H
#3
@MODEL
Text 2
#3
@STACK
Text DGROUP
#3
@WORDSIZE
Text 2
#5 #9
BEGIN
Near _TEXT:0000
#10 18
GREET
Byte DGROUP:0000
#6 13
Groups & Segments Bit Size Align Combine Class Cref (defined at #)
DGROUP
Group
#3 3 11
STACK
16 0100 Para Stack STACK
#4
_DATA
16 000F Word Public DATA
#3 #5
_TEXT
16 0010 Word Public CODE
#3 3 #9 9
Каждая строка листинга компилятора Turbo Assembler имеет следующий формат:
<уровень><номер_строки><смещение><машинный_код><исходный_код> где уровень – глубина вложенности фрагментов программы из включаемых файлов и макрокоманд; номер_строки – номер строки оператора программы
(не обязательно соответствует номеру строки в исходном файле); смещение –
смещение строки относительно начала соответствующего сегмента; машинный_код
– результат преобразования исходного кода в машинные команды (шестнадцатеричный код); исходный_код – соответствующая ассемблерная строка исходного файла.
Рассмотрим одну из строк листинга:
11 0000 B8 0000s mov ax, @DATA
Здесь 11 – номер строки, 0000 – смещение команды в сегменте кода;
B8 0000 s
– машинный код ассемблерной команды mov ax, @DATA. В

99
конце машинного кода присутствует суффикс s. Данный суффикс означает, что стоящее перед ним значение (адрес начала сегмента данных) будет в дальнейшем скорректировано (см. табл. 11.1). Машинный код приведенной команды содержит 3 байта (B8 00 00).
В этом протоколе трансляции также можно выделить две части. Первая содержит ассемблерный код программы, соответствующий машинный код, смещение команд и данных относительно начала сегмента. Во второй части присутствуют две таблицы. Первая из них определяет используемые в исходной программе метки, а вторая – используемые сегменты. Все метки перечислены в алфавитном порядке.
Вторая таблица представляет собой список программных групп и сегментов. Каждая ее строка содержит следующие данные: идентификатор группы и сегмента (Groups & Segments); размер данных (Bit); размер сегмента (Size); тип выравнивания сегмента (Align); тип объединения одноименных сегментов (Combine); класс сегментов (Class).
Приведенный листинг содержит также таблицу перекрестных ссылок.
При наличии в листинге таблицы перекрестных ссылок в строках с метками, группами и сегментами появляются номера строк из первой части листинга, в которых встречаются эти метки, группы и сегменты. Номера с префиксом #
определяют строки, в которых соответствующие символы (метки, группы или сегменты) определены. Информация из таблицы перекрестных ссылок может быть полезной для облегчения отладки сложной программы. Рассмотрим одну из строк:
GREET Byte DGROUP:0000 #6 13
Метка GREET определена в строке 6 и встречается в строках 6 и 13
исходной программы.
2.6. Пример оформления текста программы на ассемблере
Далее приводится пример текста интерактивной программы на языке ассемблера, в который включены комментарии, облегчающие документирование программы и ее анализ. Программа осуществляет умножение двух однозначных чисел, которые вводятся с клавиатуры, и выводит результат на дисплей.
;********************************************************
;* Пример оформления текста программы на ассемблере *
;* Программа умножения двух однозначных чисел *
;* Исходные данные вводятся с клавиатуры, *
;* результат выводится на дисплей *
;* Система программирования – Turbo Assembler *
;********************************************************
.MODEL small
.STACK 100H

100
.DATA str0 DB "****************************************",13,10
DB "* ККР студента гр. 621222 Ххххххх Х.Х. *",13,10
DB "****************************************",13,10,"$" str1 DB 13,10,"Введите множимое: ","$" str2 DB 13,10,"Введите множитель: ","$" str3 DB 13,10,"Результат: ","$" num1 DB ? num2 DB ?
.CODE start: mov ax,@data mov ds,ax
; Вывод заставки lea dx,str0
; в DX - адрес строки mov ah,9
int 21h
; вывод строки input_1:
; Ввод множимого lea dx,str1
; в DX - адрес строки mov ah,9
int 21h
; вывод строки mov ah,1
int 21h
; ввод символа cmp al,'0'
; проверка введенного символа jl input_1
cmp al,'9'
jg input_1
sub al,30h
; преобразование кода символа в число mov num1,al
; запомнить множимое input_2:
; Ввод множителя lea dx,str2
; в DX - адрес строки mov ah,9
int 21h
; вывод строки mov ah,1
int 21h
; ввод символа cmp al,'0'
; проверка введенного символа jl input_2
cmp al,'9'
jg input_2
sub al,30h
; преобразование кода символа в число mov num2,al
; запомнить множитель xor ax,ax
; обнуление регистра AX xor bx,bx
; обнуление регистра BX mov al,num1
mov bl,num2
mul bl aam
; коррекция результата в ax mov dl,ah
; в DL старшая цифра mov dh,al
; в DH младшая цифра or dh,30h
; получение ASCII-кода младшей цифры

101
or dl,30h
; получение ASCII-кода старшей цифры push dx
; сохранить регистр DX в стеке lea dx,str3
; в DX - адрес строки mov ah,9
int 21h
; вывод строки pop dx
; восстановить регистр DX из стека mov ah,2
; вывод на экран старшей цифры int 21h xchg dh,dl
; обмен значений в регистрах DH и DL mov ah,2
; вывод на экран младшей цифры int 21h mov ax,4C00h int 21h
; завершение программы с кодом 0
END start
Приведенная программа считывает с клавиатуры символы цифр от 0 до 9
и преобразует их в коды чисел от 0 до 9 путем вычитания из ASCII-кода символа цифры константы 30h (48). Программа содержит также проверку вводимых символов на принадлежность их к цифрам. В случае неправильного ввода программа предложит ввести число заново. После операции умножения выполняется команда AAM, которая преобразует двоичный код результат в код двузначного неупакованного двоично-десятичного числа (кодировка BCD).
После этого коды старшей и младшей цифр результата преобразуются в ASCII- коды цифр от 0 до 9 и последовательно выводятся на дисплей. Для ввода и вывода данных, а также для завершения работы программы используются соответствующие функции прерывания 21H операционной системы MS-DOS.
3. ОБОРУДОВАНИЕ И ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ
IBM PC-совместимый ПК, операционная система MS-DOS или Windows,
операционная оболочка типа Norton Commander, текстовый редактор, система программирования Ассемблер, дискета.
4. ЗАДАНИЕ НА РАБОТУ
Задание на лабораторную работу выдается каждому студенту в индивидуальном порядке. Оно содержит текст задачи, которую студент должен решить в виде программы на языке Ассемблер. Дополнительно в задании может определяться тип исполняемой программы – COM или EXE, а также используемая в программе модель памяти – Tiny или Small. Ниже приводятся тексты задач.
1.
Ввести символ с клавиатуры и вывести его на дисплей.
2.
Ввести символ с клавиатуры и вывести на дисплей его ASCII-код.
3.
Ввести с клавиатуры целое число из диапазона 0-255 и вывести на дисплей эквивалентный этому числу ASCII-символ.
4.
Ввести с клавиатуры целое число из диапазона 0-255 и использовать его в качестве кода завершения программы.

102 5.
Вывести на дисплей скэн-код нажатой функциональной клавиши
(F1 – F12).
6.
Вывести на дисплей в цикле цифры от 0 до 9.
7.
Вывести на дисплей в цикле числа от 10 до 99.
8.
Вывести на дисплей в цикле числа 10, 20, 30, 40, 50, 60, 70, 80, 90.
9.
Вывести на дисплей в цикле буквы латинского алфавита от A до Z.
10. Вывести на дисплей в цикле буквы русского алфавита от А до Я.
11. Вывести на дисплей идентификатор текущего дискового привода
(например, "Текущий привод С:").
12. Вывести на дисплей наименование текущего каталога (текущей папки).
13. Вывести на дисплей объем свободного пространства на текущем магнитном диске.
14. Вывести на дисплей объем свободного пространства на заданном магнитном диске. Идентификатор диска (A – Z) ввести с клавиатуры.
15. Ввести с клавиатуры число из диапазона от 1 до 9 и вывести его на дисплей в цикле столько раз, сколько его значение.
16. Ввести с клавиатуры число из диапазона от 1 до 99 и вывести его на дисплей в цикле столько раз, сколько его значение
17. Ввести с клавиатуры символ и выдать звуковой сигнал, если этот символ цифра. Одновременно с сигналом вывести на дисплей сообщение "Это цифра".
18. Ввести с клавиатуры символ и выдать звуковой сигнал, если этот символ прописная буква латинского алфавита. Одновременно с сигналом вывести на дисплей сообщение "Это прописная буква".
19. Ввести с клавиатуры символ и выдать звуковой сигнал, если этот символ строчная буква латинского алфавита. Одновременно с сигналом вывести на дисплей сообщение "Это строчная буква".
20. Ввести с клавиатуры символ и вывести на дисплей одно из трех сообщений разного цвета: "Это цифра", "Это буква", "Это символ".
21. Ввести с клавиатуры строку символов и вывести ее на дисплей.
Значение максимальной длины строки (например, 20 символов) ввести с клавиатуры.
22. Ввести с клавиатуры число из диапазона от 1 до 9 и вывести на дисплей значение квадрата этого числа.
23. Ввести с клавиатуры число из диапазона от 1 до 9 и вывести на дисплей утроенное значение этого числа.
24. Ввести с клавиатуры число из диапазона от 1 до 9 и вывести на дисплей половинное значение этого числа.
25. Ввести с клавиатуры двузначное целое число без знака и вывести на дисплей одно из двух сообщений: "Число четное" или "Число нечетное".
26. Ввести с клавиатуры четырехзначное целое число без знака и вывести на дисплей одно из двух сообщений: "Число четное" или "Число нечетное".

103 27. Ввести с клавиатуры двузначное целое число без знака и вывести на дисплей значение этого числа, уменьшенное на 1.
28. Ввести с клавиатуры четное двузначное целое число без знака и вывести на дисплей половинное значение этого числа.
29. Ввести с клавиатуры двузначное целое число без знака и вывести на дисплей удвоенное значение этого числа.
30. Ввести с клавиатуры четырехзначное целое число без знака и вывести на дисплей одно из двух сообщений: "Число четное" или "Число нечетное".
31. Ввести с клавиатуры четырехзначное целое число без знака и вывести на дисплей значение этого числа, уменьшенное на 100.
32. Ввести с клавиатуры четное четырехзначное целое число без знака и вывести на дисплей половинное значение этого числа.
33. Ввести с клавиатуры четырехзначное целое число без знака и вывести на дисплей удвоенное значение этого числа.
34. Ввести с клавиатуры двузначное шестнадцатеричное число и вывести на дисплей его десятичное значение.
35. Вывести на дисплей значение выражения
N
Y
2
=
. Значение ввести с клавиатуры.
N
36. Вывести на дисплей значение выражения
N
M
Y
, где
9
...,
,
1
=
M
,
. Значения
9
...,
,
1
=
N
M
и ввести с клавиатуры.
N
37. Вывести на дисплей значение выражения
!
X
Y =
, где
9
...,
,
1
=
X
Значение ввести с клавиатуры.
X
38. Вывести на дисплей значение выражения
X
Y =
, где
. Значение ввести с клавиатуры. Для вычисления корня использовать арифметический сопроцессор.
81
,
64
,
49
,
36
,
25
,
16
,
9
,
4
=
X
X
39. Создать генератор случайных чисел и вывести на дисплей в цикле несколько случайных чисел.
40. Ввести с клавиатуры значение температуры в градусах Цельсия
(целое положительное число из диапазона 0-99) и вывести на дисплей то же значение температуры в градусах Кельвина.
41. Ввести с клавиатуры значение температуры в градусах Кельвина
(целое положительное число из диапазона 0-373) и вывести на дисплей то же значение температуры в градусах Цельсия.
42. Ввести с клавиатуры значение температуры в градусах Цельсия
(целое положительное число из диапазона 0-99) и вывести на дисплей то же значение температуры в градусах Фаренгейта.
43. Ввести с клавиатуры значение температуры в градусах Фаренгейта
(целое положительное число из диапазона 0-99) и вывести на дисплей то же значение температуры в градусах Цельсия.
44. Вывести на дисплей информацию о текущем режиме работы видеосистемы компьютера, например "Текущий видеорежим – текстовый" или "Текущий видеорежим – графический".

104 45. Установить режим работы видеоадаптера компьютера, цвет выводимых на дисплей символов и цвет фона. Необходимые параметры (код режима, код цвета символов, код цвета фона) ввести с клавиатуры.
46. Установить текстовый режим работы видеоадаптера компьютера
(например, 25х40 или 25х80), ввести с клавиатуры номер строки и номер столбца экрана, установить курсор в заданную позицию и вывести на экран какой-либо символ.
47. В текстовом режиме работы видеосистемы компьютера включить окаймление изображения (бордюр) определенного цвета. Работу программы осуществить до нажатия любой клавиши, после чего выключить окаймление.
Код цвета (0 – 7) окаймления ввести с клавиатуры.
48. Вывести на дисплей значение текущей даты.
49. Вывести на дисплей значение текущего времени.
50. Ввести с клавиатуры строчную букву латинского алфавита (a – z) и вывести на дисплей эту букву как прописную (A – Z).
51. Ввести с клавиатуры прописную букву латинского алфавита (A – Z)
и вывести на дисплей эту букву как строчную (a – z).
52. Ввести с клавиатуры строку, содержащую только строчные буквы латинского алфавита (a – z), и вывести на дисплей эту строку, содержащую те же буквы как прописные (A – Z).
53. Ввести с клавиатуры строку, содержащую только прописные буквы латинского алфавита (A – Z), и вывести на дисплей эту строку, содержащую те же буквы как строчные (a – z).
54. Ввести с клавиатуры строку символов и вывести ее в текстовый файл с расширением имени TXT. Имя файла (до 8 символов) и величину максимальной длины строки (например, 20 символов) ввести с клавиатуры.
55. Ввести с клавиатуры строку символов и вывести ее на принтер.
Величину максимальной длины строки (например, 20 символов) ввести с клавиатуры.
56. Ввести с клавиатуры строку символов и одиночный символ.
Выполнить поиск символа в строке. Вывести на дисплей сообщение "Символ присутствует в строке" или "Символ отсутствует в строке". Величину максимальной длины строки (например, 8 символов) ввести с клавиатуры.
Минимальная длина строки – 3 символа.
57. Ввести с клавиатуры две строки символов одинаковой длины.
Выполнить посимвольное сравнение строк. Вывести на дисплей сообщение "Строки равны" или "Строки не равны". Величину максимальной длины строк
(например, 8 символов) ввести с клавиатуры. Минимальная длина каждой строки – 3 символа.
58. Создать в корневом каталоге заданного дискового накопителя (от A:
до Z:) подкаталог с заданным именем, которое вводится с клавиатуры.
59. Вывести на дисплей метку (label) заданного магнитного диска.
Идентификатор диска (от A: до Z:) ввести с клавиатуры.
60. Вывести на дисплей строку символов, заданную в качестве параметра запуска разрабатываемой программы.

105 61. Вывести на дисплей информацию о количестве кнопок манипулятора "мышь", например: "Мышь имеет две кнопки" или "Мышь имеет три кнопки".
62. Вывести на дисплей координаты текущего положения курсора манипулятора "мышь".
63. Вывести на дисплей информацию о состоянии кнопок манипулятора "мышь", например: "Нажата левая кнопка", "Нажата правая кнопка", "Нажата средняя кнопка".
64. Вывести на дисплей координаты текущего положения рукоятки игрового манипулятора (джойстика).
65. Вывести на дисплей информацию о состоянии кнопок рукоятки игрового манипулятора (джойстика), например: "Нажата кнопка 1" или "Нажата кнопка 2".
66. Вывести на дисплей информацию о поддержке процессором команды CPUID ("Микропроцессор поддерживает команду CPUID" или "Микропроцессор не поддерживает команду CPUID").
67. Вывести на дисплей информацию о наличии (или отсутствии) в микропроцессоре интегрированного арифметического сопроцессора
("Микропроцессор содержит арифметический сопроцессор" или "Микропроцессор не содержит арифметический сопроцессор").
68. Вывести на дисплей информацию о наличии в микропроцессоре расширенного контроллера прерываний APIC ("Микропроцессор содержит
APIC" или "Микропроцессор не содержит APIC").
69. Вывести на дисплей строку символов идентификации производителя микропроцессора компьютера.
70. Вывести на дисплей числовые коды семейства, модели и модификации микропроцессора компьютера.
71. Определить с помощью соответствующей команды программные возможности микропроцессора компьютера и вывести на дисплей следующие строки: "Микропроцессор поддерживает команды MMX", "Микропроцессор не поддерживает команды MMX".
72. Определить с помощью соответствующей команды программные возможности микропроцессора компьютера и вывести на дисплей следующие строки: "Процессор поддерживает команды 3DNow!", "Процессор не поддерживает команды 3DNow!".
73. Определить с помощью соответствующей команды программные возможности микропроцессора компьютера и вывести на дисплей следующие строки: "Процессор поддерживает не команды SSE", "Процессор поддерживает команды SSE", "Процессор поддерживает команды SSE2".
74. Вывести на дисплей сообщение о поддержке микропроцессором технологии Hyper-Threading ("Микропроцессор поддерживает технологию
Hyper-Threading" или "Микропроцессор не поддерживает технологию Hyper-
Threading").
75. Вывести на дисплей значение объема видеопамяти компьютера.
76. Вывести на дисплей значение полного объема оперативной памяти компьютера.

106 77. Вывести на дисплей значение объема расширенной оперативной памяти компьютера.
78. Вывести на дисплей значение объема "винчестерского" накопителя компьютера.
79. Вывести на дисплей строку идентификации видеоадаптера компьютера.
80. Вывести на дисплей строку идентификации монитора компьютера.
81. Переключить монитор компьютера в "спящий" режим до нажатия какой-либо клавиши на клавиатуре.
82. Создать программу, генерирующую в течение заданного времени
(например, от 1 до 9 секунд или условных единиц) непрерывный звуковой сигнал. Величину интервала времени ввести с клавиатуры.
83. Создать программу, генерирующую до нажатия какой-либо клавиши на клавиатуре непрерывный звуковой сигнал с заданной частотой (например,
1000 Гц).
84. Создать программу, генерирующую до нажатия какой-либо кнопки "мыши" непрерывный звуковой сигнал с заданной частотой (например, 1000
Гц).
85. Вывести на дисплей информацию о состоянии режима работы клавиатуры: "Режим NumLock включен" или "Режим NumLock выключен".
86. Вывести на дисплей информацию о состоянии режима работы клавиатуры: "Режим CapsLock включен" или "Режим CapsLock выключен".
87. Разработать программу, включающую индикатор клавиатуры
NumLock.
88. Разработать программу, включающую индикатор клавиатуры
CapsLock.
89. Разработать программу, удаляющую на дискете (привод А) файл с заданной спецификацией. Спецификацию удаляемого файла ввести с клавиатуры.
90. Разработать программу, удаляющую на заданном магнитном диске файл с заданной спецификацией. Идентификатор диска (A: – Z:) и спецификацию удаляемого файла ввести с клавиатуры.
91. Разработать программу, которая выводит на дисплей тип дискетного накопителя А:, например: "Привод 5,25 дюйма, 1200 Кбайт".
92. Разработать программу, которая выводит на дисплей тип дискеты, установленной в приводе А:, например: "Дискета 3,5 дюйма, 1440 Кбайт".
93. Разработать программу, которая выводит на экране дисплея строку "Количество приводов CD/DVD – …".
94. Разработать программу, которая выводит на экране дисплея количество приводов CD/DVD и присвоенные приводам идентификаторы.
95. Разработать программу, которая выводит на дисплей идентификатор диска, с которого был произведен старт операционной системы, например:
"Загрузочный привод: А:".
96. Разработать программу, которая выводит на дисплей номер версии операционной системы.

107 97. Разработать программу, которая выводит на дисплей информацию о состоянии режима проверки нажатия клавиш Ctrl+C или Ctrl+Break, например:
"Проверка Ctrl+C/Ctrl+Break включена" или "Проверка Ctrl+C/Ctrl+Break выключена".
98. Разработать программу, которая активизирует определенную дочернюю программу. Спецификацию дочерней программы задать в форме константы.
99. Разработать программу, которая активизирует дочернюю программу, спецификацию которой ввести с клавиатуры в форме символьной строки.
100. Разработать программу, которая выводит на дисплей наименование разработчика и дату разработки BIOS.
101. Разработать программу, которая выводит на экран монитора содержимое заданного текстового файла. Спецификацию выводимого файла ввести с клавиатуры.
102. Вывести на дисплей строку идентификации "винчестерского" накопителя с интерфейсом IDE/ATA (*).
103. Вывести на дисплей строку идентификации привода для компакт- дисков (CD/DVD) с интерфейсом ATAPI (*).
5. ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ
1. Ознакомиться с теоретическими положениями лабораторной работы, изучить функциональные возможности системы программирования, ответить на контрольные вопросы.
2. Уяснить содержание индивидуального задания, составить алгоритм решения задачи. Определить и изучить команды процессора, программные прерывания операционной системы и базовой системы ввода-вывода (BIOS),
которые необходимо использовать для решения данной задачи.
3. Разработать программу на языке Ассемблер. Занести программу в память компьютера с помощью тестового редактора. Записать программу в файл с расширением имени ASM. В текст программы ввести комментарии, примеры которых приведены в п. 2.6.
4. Выполнить трансляцию программы, получить объектный файл и файл листинга. Изучить содержание протокол трансляции программы, устранить выявленные транслятором синтаксические ошибки.
5. Выполнить компоновку программы и получить исполняемый файл формата EXE или COM. Изучить протокол компоновки программы и устранить ошибки компоновки, если они были.
6. Запустить скомпонованную программу на выполнение. Выявить семантические ошибки и отладить программу.
При необходимости воспользоваться программой-отладчиком, для чего рекомендуется самостоятельно изучить приемы работы с ней.
7. Распечатать отлаженную программу.
Подготовить отчет о проделанной работе и защитить отчет перед преподавателем.

108
Отчет по лабораторной работе выполняется на листах писчей бумаги формата А4. По согласованию с преподавателем отчет может быть оформлен в ученической тетради. Страницы отчета должны быть пронумерованы. Отчет должен содержать:
1) титульный лист, выполненный по общепринятому образцу;
2) текст индивидуального задания;
3) схему алгоритма программы, выполненную по ГОСТ 19.701-90;
4) текст (распечатку) программы на языке Ассемблер;
5) описание алгоритма и программы;
6) распечатку результатов работы программы (она может быть получена, например, путем распечатки копии экрана монитора ПК).
7) библиографический список, выполненный по ГОСТ 7.1-84.
Для более полного ознакомления с архитектурой и системой микропроцессоров
80х86, языком программирования
Ассемблер, функциональными возможностями изучаемых систем программирования следует воспользоваться источниками из списка рекомендуемой литературы.
Рекомендуется также при выполнении данной лабораторной работы воспользоваться фрагментами ассемблерных программ, приведенных в указанных источниках.
6. КОНТРОЛЬНЫЕ ВОПРОСЫ
1.

  1   2


написать администратору сайта