; Блок№1 ; Создание подкаталога base в каталоге d:\Testing

mov dx, offset catalog2

mov ah,39h

int 21h

Для работы с файлом, содержащим необходимые данные, в качестве базового каталога устанавливается каталог, где хранятся требуемые файлы. В данном случае возможно обращение к любому файлу, находящемуся в подкаталоге d:\temp, который выбран как базовый с помощью следующего программного кода.

; Блок№2 ; Переход в подкаталог d:\temp

lea dx, catalog3

mov ah,3bh

int 21h

; Блок№2 ; Открытие файла d:\temp\test1.txt для чтения

lea dx, name1 ; устанавливается указатель на буфер памяти,

; содержащий имя файла

mov al, 92h ; выбор режима доступа к файлу (табл. 6.9)

; файл открыт для чтения и записи

; другим программам запрещен доступ к файлу

; наследование отклонено

mov ah, 3dh

int 21h

mov descriptor[0], ax ; сохранение дескриптора файла

Предполагается, что требуется создать новый файл в каталоге d:\Testing\base, для чего требуется установить его в качестве базового каталога в дереве каталогов. Так как отсутствует его полное имя (в программе отсутствует буфер памяти, содержащий полный путь к указанному каталогу) требуется выбрать в качестве базового сначала каталог d:\Testing, а затем указать подкаталог base, который находиться в нем.

; Блок№3 ; Переход в подкаталог d:\Testing

lea dx, catalog1

mov ah,3bh

int 21h

; Блок№3 ; Переход в подкаталог d:/Testing/base

lea dx, catalog2

mov ah,3bh

int 21h

; Блок№3 ; Создание файла test2.txt в подкаталоге d:/Testing/base

НЕ нашли? Не то? Что вы ищете?

mov dx, offset name2

mov cx,00h ; атрибуты создаваемого файла (табл. 6.8)

mov ah,3ch

int 21h

mov descriptor[2], ax ;сохранение дескриптора созданного файла

Данный файл создан для записи. Оператор descriptor[2] указывает на третий байт массива descriptor. Данная запись эквивалентна сумме смещения, которое определяется указателем descriptor и числового значения в квадратных скобках. Число 2 выбрано в соответствии с тем, что дескриптор файла занимает два байта информации и при сохранении дескриптора для файла test1.txt (descriptor[0]) была использовано два байта оперативной памяти, а следующую информацию можно записывать только с третьего байта (чтобы не было наложения).

; Чтение из файла test1.txt кодов десяти символов

mov bx, descriptor[0]

mov cx, 10

lea dx, buffer ; сохранение считанной из файла информации в

; оперативной памяти, адрес первой ячейки

; которой определяется смещением указателя

; buffer

mov ah, 3fh

int 21h

; Сохранение информации из buffer в файле test2.txt

mov bx, descriptor[2]

mov cx, 10

mov ah, 40h

lea dx, buffer

int 21h

; Закрыть файл test1.txt

mov ah, 3eh

mov bx, descriptor[0]

int 21h

; Закрыть файл test2.txt

mov ah, 3eh

mov bx, descriptor[2]

int 21h

; Окончание программы

mov ax,4c00h

int 21h

end prog

В приведенном выше примере можно изменить программный код, чтоб достигнуть более эффективного программного кода.

«Блок №1» состоит из двух частей. Результатом выполнения «Блока №1» является создание подкаталога base. Для создания подкаталога base можно использовать полный путь при указании его имени. Для этого требуется изменить значение буфера памяти catalog2 на ‘d:\Testing\base’. После этого не требуется устанавливать указатель на базовый каталог в дереве каталогов. Если требуется создать несколько подкаталогов в одном каталоге, то исходный вариант, несомненно, является более продуктивным.

«Блок №2» также состоит из двух частей. Результатом выполнения «Блока №2» является получение дескриптора для файла test1.txt. Здесь также возможна замена значений полей памяти по адресу name1 на ‘d:\temp\test1.txt’.

«Блок №3» состоит из трех частей. Результатом выполнения «Блока №3» является создание файла test2.txt в каталоге d:\Testing\base. Так как указатель name2 определяет только имя файла, требуется установить в качестве базового каталога в дереве каталогов d:\Testing\base, что выполняется, в данном случае, в два этапа. Данная ситуация может быть исправлена заменой сокращенного имени файла ‘test2.txt’ на его полное имя ‘d:\Testing\base\test2.txt’. Если заранее неизвестен путь к создаваемому файлу, то приемлемым является исходный вариант. Если однозначно определен путь к создаваемому файлу, то конечно наилучшим является второй вариант.

Задание на лабораторную работу:

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

Вариант№1

Ввести с консоли строку из 8 машинных слов (каждое состоит из 2 байта информации). Получить машинное слово, состоящее из последовательности бит, построенное по следующему правилу:

-  первые два бита – это первые два бита первого слова;

-  вторые два бита – это третий и четвертый биты второго слова;

-  третьи два бита – это пятый и шестой биты третьего слова;

-  и т. д.

Записать в созданный файл на жестком диске (в формате DOS) количество совпадений полученного слова с данными в сегменте данных.

Вариант№2

Прочитать из файла последовательность двухзначных десятичных чисел (не более 25). Оставить в файле только те числа, у которых в двоичном представлении единиц больше двух и меньше пяти.

Вариант№3

Файл содержит сведения о товарах, находящихся на складе: наименование, объем партии, дата поступления на склад, стоимость единицы товара. Разработать программу поиска характеристик товара по его наименования и запись их в отдельный файл, имя которого будет характеризоваться наименованием товара.

Вариант№4

Файл содержит предложение, состоящее из слов, количество которых не превышает 25. Записать в дополнительно созданный файл и вывести на экран слова, содержащие менее 6 символов.

Вариант№5

Файл содержит строку из 200 символов. Разработать программу корректировки данной строки (удаление символа, замена символа, вставка символа).

Вариант№6

Разработать программу, позволяющую пользователю создать/удалить файл с жесткого диска, только в определенном подкаталоге, а также сохранить в созданном файле строку, суммарный объем символов которой, не превышает 255.

Вариант№7

Файл состоит из 144 двухзначных десятичных чисел, расположенных в воде матрицы 12´12. Найти и вывести в файл «resul. txt» наименьшее из них, а также номер строки и столбца, где оно расположено.

Вариант№8

Файл содержит слова, разделенные знаками пробел, либо возврат каретки. Составить программу, которая находит в файле слова, идентичные слову, введенному пользователем, а также может удалять из файла слова, встречающиеся в файле заданное количество раз. Результат выполнения программы фиксируется в файле отчета.

Вариант№9

Файл содержит десятичные числа (не более 12 знаков) и разделены знаками пробел, либо возврат каретки. Исключить из файла группу из пяти чисел, стоящих последовательно, если их сумма больше элемента, следующего за этой группой. После исключения провести проверку заново для полученного массива чисел, содержащихся в файле.

Вариант№10

Два текстовых файла содержат по N чисел, представленных в двоичной системе счисления (не более 16 бит) и разделенных знаком перехода на новую строку. Записать в созданный текстовый файл только те числа из первого файла, для которых сумма с соответствующим числом из второго файла больше 50. В созданный файл поместить числа, представленные в шестнадцатеричной системе счисления.

Вариант№11

Сравнить посимвольно содержимое двух текстовых файлов. Записать в новый текстовый файл только те символы из первого файла и номер их позицию в файле, которые не совпадают с соответствующими символами из второго.

Вариант№12

Скопировать содержимое файла №1 в файл №2, за исключением строки заданной пользователем с клавиатуры. Имена диска (-ов), подкаталога (-ов), содержащих файлы и имена файлов задает пользователь с клавиатуры.

Вариант№13

Составить программу, которая позволяет выполнить следующие действия:

1.  чтение двух десятичных чисел из файла, модуль каждого из которых не превышает 255 (иначе число пропускается);

2.  суммировать введенные числа;

3.  если результат суммы больше 255, то записать младший байт результата в файл с именем «pereg. txt», иначе в файл «normal. txt»;

4.  если не нажата клавиша «ESC» - продолжить выполнение программы с пункта №1;

5.  после нажатия клавиши «ESC» вывести на экран содержимое одного из файлов с результатами, по требованию пользователя.

Вариант№14

На диске имеются n файлов содержащих данные в виде однобайтных кодов. Имена файлов на диске имеют следующий вид «fileX. txt», где X – это номер файла из группы (XÎ(0…n)). Записать в файл «otvet. txt» имена файлов, содержащих код FF и количество повторов кода для каждого файла.

Вариант№15

Из трех произвольных файлов (имена файлов вводятся пользователем) определить файл с наименьшим количеством букв (символов). Результат (имя файла и количество букв) поместить в файл «otvet. txt».

Вариант№16

Составить программу, дублирующую содержимое файла A в файл B. Имена файлов задаются пользователем. Составить интерфейс программы:

-  при отсутствии файла A на диске выдается звуковой сигнал и сигнализирующая надпись, а также производиться откат на ввод;

-  при отсутствии достаточного места на диске выводиться звуковое и письменное предупреждение и выполняется откат на ввод;

-  при наличии файла A и свободного места на диске запрашивается разрешение на перезапись файлов и при разрешении производиться перезапись.

Вариант№17

Составить программу, удаляющую все символы пробел из файла «new. txt», но сохраняющую номера их позиций в файле «data. txt» для дальнейшего восстановления.

Вариант№18

Файл «data. txt» содержит номера позиций, где должны быть вставлены символы пробел в файле «new. txt», в котором отсутствуют данные символы. Составить программу расстановки символов пробел в позиции, указанные в файле «data. txt».

Вариант№19

Составить программу, сохраняющую в файл «result. txt» имена файлов и их размер, только для тех файлов, размер которых превосходит размер, заданный пользователем, не более чем на два килобайта. Список имен файлов пользователь задает самостоятельно.

Вариант№20

Составить программу, сортирующую содержимое файла, заданного пользователем. Все буквы «а» и их позиции расположения в исходном файле, помещаются в файл «a. txt», а все буквы «b» - в файл «b. txt». Все остальные символы теряются.

Вариант№21

Файл «1.txt» содержит двух знаковые шестнадцати разрядные числа. Файл «2.txt» содержит столько же двух знаковых шестнадцатеричных чисел. Составить программу, которая записывает в файл «3.txt» логическое произведение соответствующих чисел их первого и второго файлов.

Вариант№22

Файл пользователя (имя файла вводиться с клавиатуры во время выполнения программы) содержит набор слов. Составить программу, которая записывает в файл 1.txt только слова, состоящие из одного символа, в файл 2.txt – слова, состоящие из двух символов, в файл 3.txt – слова, состоящие из трех символов и т. д. Если какой-либо из групп слов нет (слова из 1 символа, либо из 2 символов и т. д.), то файл с именем, определяющим количество символов в каждом слове этой группы, не создается. Если не диске есть файл с таким именем. то он должен быть уделен.

Вариант№23

Составить программу перевода кодов символов из кодировки ACSII (866 – MS-DOS) в кодировку ANSI 1251 (Microsoft Windows) и обратно по запросу пользователя. Учесть возможность ввода имени файла, текст которого требуется перевести, пользователем во время выполнения программы.

Вариант№24

На диске находятся 10 файлов с текстовой информацией. Имена файлов известны до начала процесса выполнения программы. Записать в файл, имя которого задает пользователь в процессе выполнения программы, имена файлов, содержащих слова, в которых встречается 7 гласных букв.

Вариант№25

Составить программу, которая считает количество символов в файле, заданном пользователем (имя файла с указанием пути). Если количество символов равно нулю, то файл удаляется, иначе в текущей директории создается поддиректория, имя которой соответствует имени файла, а файл переноситься в созданную директорию и переименовывается в new. txt.

Вариант№26

На диске в текущем подкаталоге имеются 10 текстовых файлов: 0.txt, 1.txt и т. д. Составить программу, удаляющую из заданных файлов информацию между строками string1 и string2. В случае отсутствия строки string2 удаляется вся информация, следующая за строкой string1. Строки string1 и string2 должны сохраняться.

Вариант№27

Определить суммарное количество байт, занимаемое файлами (имена файлов известны заранее и их количество не менее 5), которые находятся на диске d:\ в подкаталоге указанном пользователем во время выполнения программы. Записать результат в файл, имя которого также задается пользователем.

Вариант№28

Файлы 1.txt и 2.txt содержат по 10 слов каждый. Записать в файл 3.txt все слова из файлов 1.txt и 2.txt, но в порядке возрастания по количеству букв, не зависимо от принадлежности их к исходным файлам.

Вариант№29

Используя функцию изменения положения указателя в файле скопировать каждый n-ый символ из файла old. txt в файл new. txt, где n-задается пользователем в десятичной системе счисления (от 0 до 255) во время выполнения программы. В результирующем файле скопированные символы должны быть разделены символом «пробел».

Вариант№30

В файле a. txt задано пять слов. Записать в файл result. txt количество вхождений для каждого слова в файл b. txt. Количество вхождений указать в десятичной системе счисления. Результат дополнительно отразить на экране.

Форма отчетности:

Для защиты лабораторной работы требуется подготовить программный код на языке ассемблер, использованный для получения загрузочного модуля. Обязательным условием допуска к защите лабораторной работы является демонстрация работоспособности загрузочного модуля, а также устное объяснение алгоритма работы программы.

ЛИТЕРАТУРА

1.  Assembler. – СПб: «Питер», 2000. - 624 с.

2.  Виктор Юров. Assembler. Специальный выпуск. Справочное руководство. – СПб: «Питер», 2000 – 496 с.

3.  Виктор Юров. Assembler. Специальный выпуск. Справочное руководство. – СПб: «Питер», 2000 – 496с.

4.  Михаил Гук. Аппаратные средства IBM PC. . – СПб: «Питер», 1999 – 816с.

5.  Вычислительные машины и системы: Учебник для вузов/ и др. - М.: Высш. шк., 1993. - 292с.

6.  , Поляков на языке Ассемблера КР580 / Под ред. .-М.: Моск. энерг. ин-т, 1986.-96 с.

ЯЗЫК ПРОГРАММИРОВАНИЯ «ASSEMBLER»

Методические указания к выполнению лабораторных работ по курсу «Архитектура ЭВМ и систем» для студентов специальности 071900 «Информационные системы и технологии»

Составитель

Подписано к печати 18.03.05

Формат 60´80/16. Бумага офсетная.

Печать RISO. Усл. печ. л. 3,49. Уч.-изд. л. 3,16

Тираж 100 экз. Заказ № . Цена договорная.

Издательство ТПУ. 634050, Томск, пр. Ленина, 30.

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10