Лабораторная работа №4 “Работа в текстовом режиме видеоадаптера” Задание. 1. В программе обеспечить ввод строки символов, выдаваемой затем на экран в соответствии с вариантом задания и заданными цветами фона и текста. Цвета фона и текста задаются или в командной строке или константными значениями в коде программы. 2. Вывод на экран строки символов должен производиться путем прямого доступа к видеопамяти, запрещено использовать стандартные функции dos и bios для управления отображением текста на экране. 3. Предусмотреть очистку экрана и восстановление предыдущего видеорежима при выходе из программы. Варианты к лабораторной работе. 1. Вывести строку символов по центру экрана. 2. Вывести строку символов по диагонали справа налево. 3. Вывести строку символов по вертикали c центрированием по горизонтали. 4. Вывести строку символов по диагонали снизу вверх. 5. Вывести строку длиной n+m символов, где n символов выводятся по горизонтали, а m символов по вертикали. Начало оси координат – верхний левый угол экрана. 6. Вывести строку символов по заданным координатам экрана с обратной последовательностью следования символов. 7. Вывести строку символов по диагонали из правого верхнего угла экрана в нижний левый при необходимости равномерно растянув по горизонтали и вертикали. 8. Вывести строку символов по центру последней строки экрана. 9. Вывести строку символов вертикально мерцающим цветом с выравниванием по горизонтали. 10. Вывести строку символов на белом фоне так, чтобы каждый последующий символ имел другой цвет. 11. Вывести строку символов по главной диагонали экрана, растянув ее так, чтобы первый символ строки находился в верхнем левом углу экрана, а последний – в правом нижнем. 12. Вывести строку символов по указанным координатам, очертить строку на экране одинарной рамкой. 13. Вывести строку символов справа налево по центру последней строки экрана. 14. Вывести строку символов по центру экрана на всю его ширину. 15. Вывести строку символов по указанным координатам так, чтобы каждый четный символ был мигающим. 16. Введенную строку вывести в каждой строке экрана так, чтобы в четных строках экрана символы выводились в обычном порядке относительно левого края, а в нечетных – наоборот и относительно правого края экрана. 17. Вывести строку символов в каждой строке экрана так, чтобы каждая последующая строка была сдвинута относительно предыдущей на одно знакоместо вправо. 18. Введенную строку вывести в каждой вертикальной строке экрана так, чтобы в четных вертикальных строках экрана символы выводились в обычном порядке относительно верхнего края, а в нечетных – наоборот и относительно нижнего края экрана. 19. Вывести строку символов по указанным координатам так, чтобы каждое слово строки начиналось с новой строки (новая строка относительно введенных начальных координат). 20. Вывести строку символов в каждой строке экрана так, чтобы каждая последующая строка была сдвинута относительно предыдущей на одно знакоместо влево, а первая выводилась относительно левого края экрана. 21. Вывести строку символов по центру экрана и обеспечить плавную смену цветов каждого выведенного символа, исключая цвета текста, совпадающие с цветом фона. 22. Вывести строку символов в режиме печатной машинке (каждый последующий символ выводится на экран с задержкой, символ “пробел” трактовать как перевод строки). 23. Вывести строку символов по центру экрана, обеспечить горизонтальную бегущую волну из атрибутов трех цветов: синего, красного и зеленого. 24. Вывести строку символов по центру экрана, обеспечить вертикальную бегущую волну из атрибутов трех цветов: белого, красного и зеленого. 25. Вывести строку символов по центру экрана, обеспечить бегущую волну в виде ромба из центра экрана произвольными атрибутами трех цветов. 26. Вывести строку символов по центру экрана, обеспечить бегущую волну в виде ромба к центру экрана произвольными атрибутами трех цветов. 27. Вывести строку символов по указанным координатам, очертить строку на экране двойной рамкой. 28. Вывести строку символов по указанным координатам, очертить строку на экране рамкой из атрибутов указанного цвета. 29. Вывести строку символов по указанным координатам и обратным следованием символов в строке, очертить строку на экране рамкой из атрибутов указанного цвета и одинарной рамкой. 30. Вывести строку символов с указанными координатами, весь остальной экран заполнить указанными символом псевдографики. Лабораторная работа №5 “Работа в графическом режиме видеоадаптера” Задание. 1. В программе обеспечить инициализацию графического видеорежима и выполнить построение фигуры в соответствии с вариантом задания заданными цветами и типом заливки, все фигуры однозначно задаются своими экранными координатами через аргументы командной строки. Предусмотреть контроль параметров передаваемых в командной строке. 2. Вывод заданной фигуры на экран должен производиться путем прямого доступа к видеопамяти. 3. Предусмотреть восстановление предыдущего текстового видеорежима при выходе из программы. Варианты типов заливок. 1 2 3 4 5 6 Варианты к лабораторной работе. 1. Вывести прямоугольник с заливкой типа 1. 2. Вывести ромб в центре экрана с заливкой из вертикальных линий. 3. Вывести равнобедренный треугольник с заливкой типа 5. 4. Вывести параллелограмм с диагоналями, каждый получившийся сектор залить сплошной заливкой различных цветов. 5. Нарисовать прямоугольник в нем вывести произвольное сообщение, т.е. каждый символ строки является шаблоном заливки в своем знакоместе. 6. Заполнить весь экран типом заливки 3, причем каждый тайл должен иметь свой собственный цвет. 7. Вывести ромб в заданных экранных координатам с заливкой из горизонтальных линий. 8. Вывести четырехугольник с произвольными координатами и типом заливки 4. 9. Вывести правильный шестиугольник с горизонтальной заливкой. Цвета заливки и контура шестиугольника должны быть различными. 10. Квадрат с ромбом внутри (вершины ромба – середины сторон квадрата). Залить ромб сплошной заливкой. Цвета заливки, контуров квадрата и ромба должны быть различны. 11. Заполнить экран всеми 6 типами заливок тайл к тайлу в произвольном порядке. Каждый тайл имеет случайный цвет. При повторном запуске картинка закраски должна изменятся. 12. Вывести в центре экране окружность заданного радиуса с заливкой типа 5. 13. Вывести окружность с заданными координатами и радиусом. Залить весь остальной экран заливкой типа 6. 14. Вывести в центре экрана равнобедренный треугольник и залить сплошной заливкой, где каждая точка имеет некоторый случайный цвет. 15. Вывести неправильный четырехугольник с заданными координатами, весь остальной экран залить горизонтальными и вертикальными линиями, с равномерным для тех и других шагом. 16. Вывести треугольник с заданными координатами в его центр поместить окружность с радиусом, равным расстоянию до ближайшей стороны треугольника. 17. Вывести треугольник с заданными координатами. Провести прямые из его вершин к центру, каждый из получившихся секторов заполнить различными цветами. 18. Вывести окружность с заданными координатами и радиусом и заполнить его заливкой типа 5. 19. Вывести окружность с заданными координатами и радиусом. Заполнить весь остальной экран произвольным сообщением. 20. Заполнить экран окружностями произвольного радиуса со сплошной заливкой различных цветов. 21. Заполнить экран прямоугольниками произвольного размера со сплошной заливкой различных цветов. 22. Заполнить экран треугольниками произвольного размера со сплошной заливкой различных цветов. 23. Заполнить экран равносторонними треугольниками произвольного размера со сплошной заливкой различных цветов. 24. Реализовать эффект дождя из одиночных различных типов заливки произвольного цвета. 25. Вывести окружность с заданными координатами и радиусом, поместить в него квадрат, залить пространство между окружностью и квадратом сплошной заливкой произвольного цвета. 26. Вывести на экран все 6 типов заливки по одному тайлу в увеличенном виде различными цветами. 27. Вывести в графическом режиме произвольную строку символов в указанных координатах. Каждый символ выводится произвольным цветом. 28. Вывести прямоугольник с заливкой типа 5, каждый новый тайл заливки имеет произвольный цвет. 29. Вывести ромб в центре экрана с заливкой из вертикальных линий различного цвета. 30. Вывести равнобедренный треугольник с заливкой типа 4. Лабораторная работа № 6 “Работа с магнитными дисками и файловой системой” Задание. 1. Все операции в соответствии с заданным вариантом задания выполняются на текущем флоппи диске, заполненном на 80% (примерно около 1 Mb данных) и содержащем произвольное количество файлов (размером не менее 2kb и не более 80kb) в главном оглавлении диска и поддиректориях. Относительно главного оглавления диска поддиректории должны иметь глубину вложенности не менее 3. 2. Если формулировка задания требует дополнительных параметров, то обеспечить их передачу в программу через аргументы командной строки. Предусмотреть фильтрацию возможных ошибок в передаваемых параметрах. Варианты к лабораторной работе. 1. Вывести все элементы текущего каталога (содержащий каталоги и/или файлы), подсчитать и дополнительно вывести количество директорий и файлов, для файлов подсчитать суммарный объем используемого ими дискового пространства. 2. Найти требуемый файл в текущем, рабочем каталоге диска. Вывести полную информацию по данному файлу или ошибку, если он отсутствует. 3. Найти требуемый файл относительно главного оглавления диска, а не текущего каталога (определить путь к нему). Разбить полученный путь на составляющие части: диск, путь, имя и расширение. Вывести на экран. 4. Вывести суммарное количество кластеров для указанного файла в текущей директории, подсчитать используемое ими дисковое пространство. 5. Вывести начальные кластеры всех файлов указанного каталога. 6. Вывести все файлы/каталоги текущей директории, в чьих названиях присутствует заданный символ (т.е. все они начинаются, например, с символа ‘d’). При выводе на экран данного списка выделить все директории при помощи произвольной метки. 7. Вычислить размер произвольного, указанного каталога. 8. Заменить расширения все файлов в текущей директории на расширение “.cul”. Если переименовываемый файл уже существует, то оставить его без изменения. Директории игнорировать! 9. Вывести FAT файла дискеты на экран в удобной форме. 10. Вывести оглавление текущей директории с полными атрибутами каждого файла. Заменить все даты создания файлов на текущее, установленное в системе время. 11. Вывести оглавление произвольной директории с полными атрибутами каждого файла. Установить на все файлы атрибут “только для чтения” и “скрытый”. 12. Перенести группу файлов из текущей директории в указанный каталог, существующие файлы перезаписать. Вывести количество перенесенный и перезаписанных файлов. 13. Определить количество директорий и файлов на диске, для файлов дополнительно посчитать занятое ими дисковое пространство. 14. Удалить все файлы с диска, созданные в определенную дату. 15. Определить объем свободного места на диске. 16. С помощью файлового менеджера или системной команды удалить элемент текущего каталога. Восстановить заданный удаленный элемент. 17. Удалить произвольный непустой каталог, вывести количество удаленных файлов и директорий. 18. Определить количество сбойных кластеров на диске. 19. Выполнение операций по созданию, замене и удаление метки тома. Необходимая операция (создание, замена, удаление) и ее параметры (метка) передаются через командную строку. 20. Удалить группу файлов из текущего каталога с указанным расширением. 21. Поиск элемента с заданными атрибутами в произвольном каталоге. 22. Для каждой директории текущего каталога указать количество входящих поддиректорий. 23. Раскрыть все содержимое поддиректорий в текущий каталог, директории удалить. 24. Каждый файл переместить в директорию с таким же именем (расширения отбрасывать). 25. В текущей директории отсечь у всех файлов расширения, файлы с одинаковыми именами переименовать. Лабораторная работа № 7 “Обработка текстов и работа с принтером” Задание. 1. Исходными данными является текстовый файл по указанному пути (задается как параметр командной строки). 2. В соответствии с вариантом задания выполнить обработку файла. Обработка может выполняться как посимвольно, так и построчно. 3. Вывести обработанный файл на печать. Замечание: файл может обрабатываться как по символам (с установкой режимов на “лету”), так и целиком с записью в промежуточный файл (записывается измененный файл с внедренными управляющими символами принтера). Таблицы управляющих кодов принтера для управления ходом печати текста. S0 #14 DC4 SI DC2 ESC,’E’ ESC,’F’ ESC,’G’ ESC,’H’ ESC,’S’,CHR(0) ESC,’S’,CHR(1) ESC,’T’ ESC,’W’,CHR(1) #20 #15 #18 #27,#69 #27,#70 #27,#71 #27,#72 #27,#83,#0 #27,#83,#1 #27,#84 #27,#87,#1 ESC,’W’,CHR(0) ESC,’-’,CHR(1) ESC,’-’,CHR(0) ESC,’0’ ESC,’1’ ESC,’A’,CHR(n) #27,#87,#0 #27,#45,#1 #27,#45,#0 #27,#48 #27,#49 #27,#65,#n ESC,’2’ ESC,’3’,CHR(n) ESC,’C’,CHR(n) #27,#50 #27,#51,#n #27,#67,#n ESC,’N’,CHR(n) ESC,’8’ ESC,’9’ LF или VT FF CAN BS #27,#78,#n #27,#56 #27,#57 #10 или #11 #12 #24 #8 начать печать DOUBLE-WIDTH (широким шрифтом) отказ от DOUBLE-WIDTH (широкого шрифта) режим плотной печати (узкий шрифт) закончить режим плотной печати (узкий шрифт) включить режим EMPHASIS выключить режим EMPHASIS включить режим DOUBLE-STRIKE выключить режим DOUBLE-STRIKE печать верхних индексов (SUPERSCRIPT) печать нижних индексов (SUBSCRIPT) отказ от режимов SUPERSCRIPT/SUBSCRIPT включить режим DOUBLE-WIDTH (не отменяется по LF) выключить режим DOUBLE-WIDTH включить режим UNDERLINE выключить режим UNDERLINE настройка на интервал 1 настройка на интервал 2 выбрать высоту строки n/72 дюйма (одноразовый перевод строки управляется через ESC,’2’) начало работы с интервалом 1/16 дюйма установить интервал n/216 дюйма установить число строк на странице равным n (07Fh) установить пропуск перфорации на n строк игнорировать конец бумаги отменить игнорирование конца бумаги перемещение бумаги на одну строку вверх подача формы: продвигается к началу страницы очистка буфера принтера возврат на один символ Варианты к лабораторной работе. 1. Печать текста, чтобы первое слово предложения и слова, содержащие 2 или более символов ‘a’ были с подчеркиванием. 2. Печать текста, чтобы первое и последнее слово предложения были напечатаны широким шрифтом. 3. Печать текста, чтобы первое, второе и третье слово предложения были напечатаны узким шрифтом. 4. Печать текста, чтобы первое слово предложения и все аббревиатуры были напечатаны с утолщением. 5. Печать текста, чтобы первое слово предложения было напечатано двойной печатью. 6. Печать текста, чтобы любое слово, начинающиеся с заглавной буквы, было напечатано с подчеркиванием. 7. Печать текста, чтобы любое слово, начинающиеся с заглавной буквы, было напечатано широким шрифтом, а стоящие перед точкой - узким. 8. Печать текста, чтобы любое слово, начинающиеся с заглавной буквы, было напечатано узким шрифтом. 9. Печать текста, чтобы любое слово, начинающиеся с заглавной буквы и слова, содержащие указанную последовательность символов, были напечатаны с утолщением. 10. Печать текста, чтобы любое слово, начинающиеся с заглавной буквы, было напечатано с двойной печатью. 11. Печать текста, чтобы любое четное слово было с утолщением, напечатать общее количество таких слов. 12. Печать текста, чтобы любое четное слово было с подчеркиванием, напечатать общее количество таких слов. 13. Печать текста, чтобы любое четное слово было широким шрифтом, напечатать общее количество таких слов. 14. Печать текста, чтобы любое четное слово было узким шрифтом, напечатать общее количество таких слов. 15. Печать текста, чтобы любое четное слово было с двойной печатью, напечатать общее количество таких слов. 16. Печать текста, чтобы четные строки были напечатаны широким шрифтом, а нечетные – узким. 17. Печать текста, чтобы четные строки были напечатаны узким шрифтом, а нечетные – широким. 18. Печать текста, чтобы нечетные строки были напечатаны широким шрифтом. 19. Печать текста, чтобы нечетные строки были напечатаны узким шрифтом. 20. Печать текста, чтобы нечетные строки были напечатаны с подчеркиванием. 21. Печать текста, чтобы нечетные строки были напечатаны с утолщением. 22. Печать текста, чтобы нечетные строки были напечатаны двойной печатью. 23. Печать текста, чтобы между нечетной и четной строками было три интервалами. 24. Печать текста, чтобы между нечетной и четной строками было четыре интервалами. 25. Печать текста, чтобы каждое последнее слово в предложении было напечатано широким шрифтом. 26. Печать текста, чтобы каждое последнее слово в предложении было напечатано с утолщением. 27. Печать текста, чтобы каждое последнее слово в предложении было напечатано с подчеркиванием. 28. Печать текста, чтобы каждое последнее слово в предложении было напечатано двойной печатью. 29. Печать текста, чтобы каждое последнее слово в предложении было напечатано узким шрифтом. Лабораторная работа №8 “Создание резидентных программ” Задание. 1. По приведенному в варианте сочетанию клавиш произвести вызов программы, оставленной резидентной в памяти. При первом запуске программа должна проверять свое наличие в памяти, если она отсутствует, то она оставляет себя резидентом, в противном случае удалить из памяти уже существующую копию резидента лабораторной работы и восстановить старый обработчик вектора прерывания. 2. Разрешается совместить данную лабораторную работу с любой другой по согласованию с преподавателем. 3. Предусмотреть очистку экрана и корректный выход из программы с восстановление старого системного обработчика прерываний. Варианты к лабораторной работе. 1. ALT + ’a’. 2. CTRL + ’b’. 3. LEFT SHIFT + ‘c’. 4. RIGHT SHIFT + ‘d’. 5. ALT + CTRL + ‘f’. 6. ALT + LEFT SHIFT + ‘g’. 7. ALT + RIGHT SHIFT + ‘k’. 8. CTRL + LEFT SHIFT + ‘l’. 9. CTRL + RIGHT SHIFT + ‘m’. 10. ALT + ‘A’. 11. CTRL + ‘B’. 12. LEFT SHIFT + ‘C’. 13. RIGHT SHIFT + ‘D’. 14. ALT + CTRL + ‘F’. 15. ALT + LEFT SHIFT + ‘G’. 16. ALT + RIGHT SHIFT + ‘K’. 17. CTRL + LEFT SHIFT + ‘L’. 18. CTRL + RIGHT SHIFT + ‘M’. 19. ALT + ‘N’. 20. CTRL + ‘P’. 21. LEFT SHIFT + ‘R’. 22. RIGHT SHIFT + ‘S’. 23. ALT + CTRL + ‘T’. 24. ALT + LEFT SHIFT + ‘V’. 25. ALT + RIGHT SHIFT + ‘W’. 26. CTRL + LEFT SHIFT + ‘X’. 27. CTRL + RIGHT SHIFT + ‘Y’. 28. ALT + ‘E’. 29. CTRL + ‘R’. 30. ALT + LEFT SHIFT + ‘X’. Лабораторная работа №9 “Решение вычислительных задач с использованием математического сопроцессора” Задание. 1. В программе обеспечить ввод аргументов функции, вычисление в соответствии с вариантом задания и выдачу результата на экран. Предусмотреть ситуации, связанные с областью допустимых значений функции с выдачей сообщения о недопустимости текущего значения аргумента. 2. Разрешается для ввода и вывода чисел с плавающей запятой использовать произвольный язык высокого уровня, при этом основной вычислительный код функции реализуется при помощи ассемблерных вставок. 3. Предусмотреть очистку экрана и корректный выход из программы. Варианты к лабораторной работе. 1. Y Sin ( x1/ 3 ), x 10.0 2. Y Arctg( x) Ln(1 x x ), x 2.2 3. Y x * Cos( x), x 1.5 4. Y Ch( x) x , x 1.3 5. Y Ln((1 x) /(1 x)) / 2, x 21.5 6. Y Cos(1 2 x x) E ( xx ) , x 1.7 7. Y Sh( x /( x 1.5)), x 1.6 8. Y Arctg ((1 x) /(1 x)) / 4, x 2.3 9. Y Sin( x 2 / 3 ), x 16.0 10. Y Arctg (ln( x) / 2), x 0.85 11. Y (1 x x) Arctg ( x) / 2, x 1.25 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. Y ArcCos( x (3 x) /(1 x)) 3 , x 0.2 Y Arctg ( x / sqrt (1 x x)), x 1.72 Y Tg ( x * x / 4 x / 2 1), x 1.3 Y Ln(1/( 2 2 * x1.4 x x ), x 1.4 Y Arctg (4 * x /(1 x * x)), x 3.4 Y 2 * (Cos( x) 2 1), x 3.35 Y ArcSin( x) 2 * Cos( x) 2 , x 2.5 Y Arctg (1 x) * Ln(1 x), x 2.8 Y Tg ((1 x) * E x ), x 1.39 Y Sin (4.67 * x z ), x 0.78, z 0.59 Y ArcCos( E ( x z ) ), x 0.4, z 1.3 Y Arctg (( x z ) /(1 x * z )), x 1.2, z 2.3 Y Sin ( x * x z * z ), x 1.57, z 0.31 Y Arctg ( x * E ( 2*x ) ), x 1.57, z 0.31 Y Arctg ( x * x /(Cos( x))), x 1.1 Y Sin ( x) Cos( z ), x 4.5, z 1.2 28. Y Arctg ( z ) Sin( x) Cos ( x ) , x 3.1, z 1.5 29. Y x * Sin ( x), x 1.8 30. Y Arctg( x) Ln( x x 1), x 1.12 Лабораторная работа №10 “Генерация звуковых последовательностей в программах на ассемблере” Задание. 1. В программе обеспечить проигрывание некоторого музыкального фрагмента на выбор студента. Формирование временных интервалов при проигрывания нот и выдержки пауз выполнять с использованием таймера. Рекомендуется совместить данную лабораторную работу с лабораторной работой №8 “Создание резидентных программ”. 2. Предусмотреть очистку экрана и корректный выход из программы.