Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Распределение часов по семестрам и видам занятий



Распределение часов по семестрам и видам занятий

Дисциплина «Системное программное обеспечение» изучается в 5 семестре. Самостоятельная работа (112 часов) студентов заключается в подготовке к лабораторным работам (76 часов) и подготовке к аттестациям и зачету (36 часов).

№ п/п Наименование видов самостоятельной работы Трудоемкость (час.)
1 Подготовка к лабораторным работам 76
2 Подготовка к дифферинцированному зачету 36

Теоретический материал

К лабораторной работе № 1.

Основные команды UNIX

Команды по работе с текстом

В операционной системе UNIX большинство информации хранится в текстовом виде. Поэтому команды по обработке текстовой информации играют очень важную роль в этой операционной системе.

echo

Познакомимся еще с одной командой, аналог котоpой имеется в DOS-системах. Это команда echo (эхо).

Она имеет фоpмат:

echo [-n] [arg ...]

Команда echo выводит на устройство стандартного вывода заданные ей аргументы, разделяя их пробелами и завершая их символом новой строки (\n).

Эта команда удобна для формирования диагностических сообщений в командных файлах и для передачи известных данных в программном канале.

С помощью следующей команды можно довольно пpосто создать пустой файл: echo > имя_файла.

Возможен параметр -n — не выводить завеpшaющий символ перевода строки.

Интеpпpетатоp команд имеет встроенную команду echo, которая имеет синтаксические различия с внешней командой echo. Следует знать, что пользователям, работающим с оболочкой, будет доступна встроенная команда echo, если они не укажут /bin/echo.

Рассмотрим примеры использования этой команды:

Вывод сообщения «Hello, world» на экpан:

[user@localhost ~]$ echo "Hello, world."Hello, world.[user@localhost ~]$

Вывод сообщения без завеpшающего символа новой стpоки:

[user@localhost ~]$ echo -n "Hello, world."Hello, world.[user@localhost test]$

Вывод сообщения в файл file1:

[user@localhost ~]$ echo "Hello, world." > file1

Добавление сообщения к содеpжимому файла file1:

[user@localhost ~]$ echo "Hello, world." >> file1

Вывод имен файлов текущего каталога в алфавитном поpядке:

[user@localhost ~]$ echo *

Вывод списка файлов с именами, соответствующих шаблону. Вывести имена файлов с pасшиpением .txt:

[user@localhost ~]$ echo *.txt

cat

Рассмотpим еще одну команду, котоpая может быть полезна пpи pаботе с файлами. Это команда cat (аналог команды TYPE для DOS-систем).

Команда cat имеет следующий фоpмат:

cat [-benstuv] [-] [file1 [file2 ...]]

Она по очеpеди читает указанные, как аpгументы файлы и выводит их содеpжимое на стандаpтное устpойство вывода.

Поименованный файл или файлы выводятся последовательно один за дpугим без пpомежутков. Если файл достаточно длинный, то можно пpиостановить вывод с помощью комбинации клавиш Ctrl-S. Для пpодолжения вывода нажмите любую клавишу. Окончание ввода производится комбинацией Ctrl-D.

Операнды обрабатываются в порядке их pазмещения в командной строке. Если не указан ни один файл или указана опция (-), команда читает данные со стандаpтного устpойства ввода.

Можно использовать следующие опции:

-n

Нумеpовать стpоки начиная с 1.

-b

Подразумевает опцию -n, но не нумеpует пустые стpоки.

-e

Подразумевает опцию -v и отображает знак доллара ($) в конце каждой строки (визуализация символа пеpевода стpоки).

-s

Пpи наличии идущих подpяд пустых стpок выводить только одну.

-t

Подразумевает опцию -v. Выводит cимволы табуляции как ^I.

-u

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

-v

Отображение непечатных символов. Упpавляющие символы выводятся в виде ^X (CRTL+X), символ DEL (восьмеричное 0177) как ^?. Символы не входящие в стандаpтный ASCII-набоp (напpимеp, символы киpиллицы с набоpом стаpших pазpядов) выводятся как «M-x», где x — опpеделяемый младшими семи битами символ.

Рассмотрим примеры использования команды:

Файл file выводится на устройство стандартного вывода:

[user@localhost ~]$ cat file

Сцепление (слияние) файлов file1 и file2, после чего они помещаются в файл file3:

[user@localhost ~]$ cat file1 file2 > file3

Пpисоединение файла file1 к концу файла file2:

[user@localhost ~]$ cat file1 >> file2

Вывод содеpжимого файла с нумеpацией стpок, но без нумеpации пустых стpок:

[user@localhost ~]$ cat -b file11 Number 12 Number 23 Number 34 Number 45 Number 5

Нумеpация всех стpок:

[user@localhost ~]$ cat -n file11 Number 12 Number 23 Number 34 Number 4567 Number 5

less

Команда less используется для просмотра файлов, размер которых превышает размер экрана. Пользователю предоставляется интерактивынй интерфейс, в котором текст можно пролистывать, производить по нему поиск и т.п..

Имя просматриваемого файла необходимо указать в качестве аргумента программы:

[user@localhost ~]$ less README.txt

Управлять программой less просто: страницы перелистываются пробелом, а когда читать надоест, надо нажать q (Quit). Перелистывать страницы можно и клавишами Page Up/Page Down, для сдвига на одну строку вперед можно применять Enter или стрелку вниз, а на одну строку назад — стрелку вверх. Переход на начало и конец текста выполняется по командам g и G соответственно (Go). Полный список того, что можно делать с текстом в less, выводится по команде h (help). Для поиска и подсветки интересующего понятия можно воспользоваться командой /, после которой необходимо ввести интересующий термин — по нажатию клавиши Enter, курсор перейдёт к первому упоминанию термина, который будет выделен серым цветом. Последующие нажатия / и Enter приведут к продолжению поиска слова по документу.

Программа less используется в качестве основы команды man — при просмотре страниц руководств.

head

Команда выводит на экран первые несколько строк файла. По умолчанию выводится первые 10 строк. Имя выводимого файла указывается в качестве аргумента программы, и если оно не задано, производится чтение информации со стандартного входа.

С помощью параметра -n можно задать число строк от начала файлы, которые будут выведены на экран. Например:

[user@localhost ~]$ head -n 4 /etc/inittab# /etc/inittab: init(8) configuration. # The default runlevel.id:5:initdefault:

tail

Команда выводит на экран последние несколько строк файла. По умолчанию выводятся последние 10 строк. Имя выводимого файла указывается в качестве аргумента программы, и если оно не задано, производится чтение информации со стандартного входа.

С помощью параметра -n можно задать число строк от конца файла, которые будут выведены на экран. Например:

[user@localhost ~]$ tail -n 5 /var/log/dmesgloop: loaded (max 8 devices)squashfs: version 3.1 (2006/08/19) Phillip LougherRegistering unionfs 1.4unionfs: debugging is not enableddevice-mapper: ioctl: 4.7.0-ioctl (2006-06-24) initialised: [email protected]

Таким способом удобно просматривать последние записи системных журналов.

Другим важным параметром команды является -f: команда ожидает изменения в конце фала и отображает их на экране. Часто это используется при просмотре постоянно увеличивающихся файлов. Для завершения команды нажмите Ctrl-C.

cut

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

Можно использовать следующие опции:

-cсписок

вывод столбцов, указанных агрументом список;

-fсписок

вывод полей, указанных агрументом список;

-dсимвол

устанавливает заданный символ в качестве разделителя полей при использовании параметра -f. Если в качестве разделителя используется небуквенный символ (например, пробел), он должен быть заключён в кавычки.

Примеры работы программы:

Выделение первых семи столбцов файла:

[user@localhost ~]$ cat phones.txt1234567    Борис Петрович5557845      Анна Иоановна...[user@localhost ~]$ cut -c1-7 phones.txt12345675557845...

Получение списка групп пользователей, зарегистрированных в системе:

[user@localhost ~]$ cut -f1 -d: /etc/grouprootbindaemonsysadm...

paste

Команда paste объединяет два текстовых файла в один. В получившемся файле исходные строки располагаются в соседних столбцах, разделённые символом табуляции (или любым другим символом, указанным через параметр -d).

Часто применяется совместно с программой cut.

sort

Команда sort сортирует строки, входящие во все исходные файлы, и выдает результат на стандартный вывод. Если имена файлов не указаны, или в качестве файла указан «-», исходная информация поступает со стандартного ввода. Команда имеет формат:

sort [-c] [-r] [файл ...]

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

Основные опции команды:

-c

Вместо сортировки файла проверяет, отсортирован ли он. Если файл не отсортирован, команда возвращает 1 и выводит соответствующее сообщение.

-r

Заменить результат сравнения на противоположный.

Рассмотрим примеры использования команды:

Отсортировать файл с фамилиями:

[user@localhost ~]$ cat f.txtPetrovIvanovSidorovAbramov[user@localhost ~]$ sort f.txtAbramovIvanovPetrovSidorov

Отсортировать список файлов в обратном порядке:

[user@localhost ~]$ ls / | sort -rvarusrtmpsyssrvsbinroot...

uniq

Команда uniq построчно анализирует файл и в случае, если он содержит в себе повторяющиеся строки, выбрасывает дубликаты. Команда имеет следующий формат:

uniq [-c] [исходный_файл]

Если имя исходного файла не указано, команда читает данные со стандартного ввода.

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

Рассмотрим примеры использования команды:

Получим имена всех пользователей, работающих в системе в настоящий момент:

[user@localhost ~]$ who | cut -f1 -d' 'rootrootivanmaria[user@localhost ~]$ who | cut -f1 -d' ' | uniqrootivanmaria

Однако такой результат будет не всегда:

[user@localhost ~]$ who | cut -f1 -d' 'rootivanrootmaria[user@localhost ~]$ who | cut -f1 -d' ' | uniqrootivanrootmaria

Это происходит потому, что команда uniq сравнивает строки последовательно. Для того, чтобы избежать дублирования, результат можно сперва сортировать:

[user@localhost ~]$ who | cut -f1 -d' ' | sort | uniqivanmariaroot

iconv

Команда iconv предназначена для перекодирования текстовых файлов из одной кодировки в другую и имеет следующий формат:

iconv [-l] -f исходная_кодировка -t конечная_кодировка [исходный_файл]

Если имя исходного файла не указано, команда читает данные со стандартного ввода.

Имя кодировки — исходной или конечной должно соответствовать кодировке в файле, список доступных кодировок можно получить, если запустить команду iconv с параметром -l.

wc

Эта команда предназначена для подсчёта количества строк, символов и слов в указанных файлах. Команда имеет слудующий формат:

wc [-clmw] file ...

Можно использовать следующие опции:

-c

Вывод только количества байт.

-l

Вывод только количества строк.

-m

Вывод только количества символов. Отличается от числа байт при многобайтной кодировке.

-w

Вывод только количества слов.

Рассмотрим примеры использования команды:

Подсчёт числа слов в документе:

[user@localhost test]$ wc -w lectures.txt568 lectures.txt

Число файлов в каталоге:

[user@localhost test]$ ls / | wc -l15

Полная статистика по группе xml-файлов (число строк, число слов, число байт):

[user@localhost test]$ cat *.xml | wc 16138 253680

dd

dd — команда блочного копирования файлов. Она имеет следующий формат:

dd if=исходный_файл of=конечный_файл bs=размер_блока           count=число_блоков skip=число_блолов seek=число_блоков

Программа используется при копировании частей одного файла в другой, часто применяется при работе с устройствами. Рассмотрим параметры, принимаемые командой:

if=

Задаёт имя файла (или устройства), откуда будут копироваться данные.

of=

Задаёт имя файла (или устройства), куда будут копироваться данные.

bs=

Задаёт размер блока копирования в байтах. Можно применять модификаторы размера: «K» — килобайты, «M» — мегабайты и т.п.

count=

Задаёт число копируемых блоков. Если этот параметр не задан, копируется всеь исходный файл.

skip=

Число блоков в исходном файле, которое будет пропущено до чтения.

seek=

Число блоков в файле назначения, которое будет пропущено до записи.

Рассмотрим примеры использования команды:

Копирование загрузочного сектора жёсткого диска в файл bootsect:

[root@localhost test]# dd if=/dev/hda of=bootsect bs=512 count=11+0 входных записей1+0 выходных записей512 bytes (512 B) copied, 9e-05 seconds, 5,7 MB/s

Копирование файла размером до двух мегабайт на простой гибкий диск и обратно:

[user@localhost test]$ dd if=arch.tar.bz2 of=/dev/fd0 bs=11788990+0 входных записей1788990+0 выходных записей[user@localhost test]$ dd if=/dev/fd0 of=arch2.tar.bz2 bs=1 count=17889901788990+0 входных записей1788990+0 выходных записей

К лабораторной работе № 2

Способы адресации

Способы адресации подробно расписаны в [4-5].

 

К лабораторной работе № 3

Обработка прерываний

Функции прерывания с примерами рассмотрены в [4-5].

 

К лабораторной работе № 4

Распределение памяти

Общие положения

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

 

Способы компоновки программ

Рассмотрим три способа компоновки программ.

Первый способ, когда директивы EXTRN и PUBLIC используются для меток. Пример программы состоит из основной программы и подпрограммы.

 

Текст основной программы

Title UMN (EXE)             ; основная программа

Extrn SubUmn:Far             ; объявление внешней процедуры

 

StackSg Segment PARA STACK 'Stack'

DW        64 DUP(?)

StackSg ENDS

 

DataSg   Segment PARA 'Data'

Kol         DW 0140H

Price       DW 2500H

DataSg   ENDS

CodeSg Segment PARA 'Code'

Begin      Proc FAR

Assume CS:CodeSg, DS:DataSg, SS:StackSg

Push DS

Sub AX, AX

Push AX

Mov AX, DataSg

Mov DS, AX

Mov AX, Price

Mov BX, Kol

Call SubUmn ; вызов процедуры

Ret

Begin      ENDP

CodeSg ENDS

     END Begin

 

Текст внешней подпрограммы

Title SubUmn          ; внешняя подпрограмма

CodeSg Segment PARA 'Code'

SubUmn Proc FAR

Assume CS:CodeSg

Public SubUmn ; открытие доступа к подпрограмме

Mul BX         ; умножается содержимое AX и BX

Ret                   ; результат заносится в DX:AX

SubUmn ENDP

CodeSg ENDS

END SubUmn

 

Карта компоновки отражает организацию программы в памяти.

Start Stop Length Name Class
00000H 0007FH 00080H STACKSG STACK
00080H 00083H 00004H DATASG DATA
00090H 000A5H 00016H CODESG CODE
000B0H 000B2H 00003H CODESG CODE

 

Здесь имеются два кодовых сегмента для каждого ассемблирования с разными стартовыми адресами.

 

Второй способ, когда директивы PUBLIC используют при описании кодовых сегментов. В этом случае в директиву Segment вносится оператор Public.

 

CodeSg Segment PARA PUBLIC 'Code'

 

При этом карта компоновки будет выглядеть следующим образом:

Start Stop Length Name Class
00000H 0007FH 00080H STACKSG STACK
00080H 00083H 00004H DATASG DATA
00090H 000B2H 00023H CODESG CODE

 

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

 

Третий случай, когда присутствуют общие данные для основной программы и подпрограммы. Это предполагает возможность обработки в одном модуле данных, определенных в другом модуле. Пусть области Price и Kol определялись в основной программе, а загрузка значений из этих областей в регистры производились в подпрограмме. Тогда в тексте основной программы кроме объявления внешней подпрограммы (сразу за ним) добавится строка

Public Kol, Price;

команды

Mov AX, Price

Mov BX, Kol

из основной программы перепишутся в подпрограмму (перед командой умножения). Кроме того, в подпрограмме перед описанием кодового сегмента необходимо описать имена переменных как внешние:

EXTRN Kol:Word, Price:Word

 

Порядок отладки

Пусть текст основной программы записан в файле PR1.ASM, текст внешней подпрограммы - в файле PR2.ASM. Используем программу MASM для получения двух объектных модулей: PR1.OBJ и PR2.OBJ. Затем компоновщиком объединяем два объектных модуля в один выполняемый. Для этого на запросы компоновщика необходимо ответить следующим образом:

 

Object modules [.OBJ] : PR1 + PR2

Run file [.EXE] : PR (или любое другое имя)

 

Компоновщик устанавливает соответствие между адресами в объектных модулях.

 

Более подробно см. [4-5].

 

К лабораторной работе № 5

Препроцессоры

Макроопределения

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

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

Для того чтобы указать, какие идентификаторы на какие строки необходимо заменять, служат макроопределения. Макроопределения представляют собой последовательность операторов на языке Ассемблера, которые могут несколько раз появиться в программе. Тем самым они очень похожи на подпрограммы.

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

 

Например, пусть необходимо сложить содержимое двух ячеек памяти размером в слово, используя макроопределение:

; макроопределение для сложения двух значений

ADD_WORDS MACRO TERM1, TERM2, SUM

MOV      AX, TERM1

ADD       AX, TERM2

MOV      SUM, AX

ENDM

Тогда в программе можно использовать оператор:

ADD_WORDS PRICE, TAX, COST

Вместо этого оператора Ассемблер после трансляции вставит в программу следующие команды:

MOV AX, PRICE

ADD AX, TAX

MOV COST, AX

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

title  ex_prog - заголовок программы
      page ,132  
имя1 macro [параметры] - первое макроопределение
 
endm  
 
имяN macro [параметры] - N-ое макроопределение
 
endm  
stack  segment   para stack 'stack' - сегмент стека
 
stack  ends  
dseg  segment para public 'data' - сегмент данных
 
dseg ends  
cseg segment para public 'code' - сегмент команд
 
cseg ends  
    end our_prog - конец программы

 

К лабораторной работе № 6

К лабораторной работе /№ 7

Файловая система

Примеры по программированию операций над файлами

Пример 1. Создание файла. В текущем каталоге диска создать файл с именем MYFILE.001.

 

;Определения

cr  equ 0Dh       ;Возврат каретки

lf   equ 0Ah       ;Перевод строки

text        segment 'code'

assume   CS:text, DS:data

myproc proc

mov AX, data

mov DS,AX

;Создадим файл

mov AH,3Ch                    ;Функция создания файла

mov CX,0                         ;Без атрибутов

mov DX, offset filename   ;Адрес имени файла

int 21h

mov handle, AX               ;Сохраним дескриптор файла

;Закроем файл (нет необходимости, если файл не надо читать повторно)

mov AH,3Eh                    ;Функция закрытия

mov BX,handle                 ;Дескриптор

int 21h

;Завершим программу

outprog: mov AX,4C00h                ;Функция завершения, код

int 2lh                            ;завершения = 0

myproc endp

text        ends

 

data        segment

handle    dw ?                          ;Ячейка для дескриптора

filename db 'MYFILE.001',0 ;Имя файла в формате ASCIIZ

data        ends

 

stack      segment para stack 'STACK'

db           128 dup (?)

stack      ends

end         myproc

 

Пример 2. Запись строки в файл.

;Основные фрагменты программы

;Создадим файл

...

;Запишем строку в файл

mov AH,40h                     ;Функция записи

mov BX, handle                ;Дескриптор

mov CX, stringln              ;Длина строки

mov DX, offset string       ;Адрес строки

int 21h

;Закроем файл

...

;Завершим программу

...

;Поля данных

string     db 'Текстовая строка',cr,lf ;Строка для записи в файл

stringln equ $-str1ng                    ;Ее длина

handle    dw ?                                ;Ячейка для дескриптора

 

Пример 3. Чтение файла. Прочитать содержимое файла MYFILE.001 в память и вывести его на экран. Предполагается, что размер файла не более 80 байт.

;Определения

stdout    equ 1                      ;Дескриптор стандартного вывода

;Основные фрагменты программы

;Откроем файл

mov AH,3Dh                    ;Функция открытия файла

mov AL,2                         ;Доступ для чтения/записи

mov DX, offset filename   ;Адрес имени файла

int 21h

mov handle,AX                ;Получили дескриптор

;Попытаемся прочитать 80 байт

mov AH,3Fh                ;Функция чтения

mov BX,handle                 ;Дескриптор

mov CX,80                       ;Столько читать

mov DX, offset bufin        ;Сюда

int 21h

mov CX,AX                     ;Столько реально прочитали

;Выведем прочитанное на экран

mov AH,4Dh                    ;Функция записи

mov BX, stdout      ;Дескриптор стандартного вывода

mov DX, offset bufin ;Отсюда выводить (СХ байт)

int 21h

;Завершим программу

...

;Поля данных

bufin      db 80 dup (' ')       ;Буфер ввода

handle    dw ?                          ;Ячейка для дескриптора

filename db 'MYFILE.001',0 ;Имя файла

Пример 4. Изменение атрибутов файла. Установить у файла MYFILE.001 атрибут "только для чтения".

;Основные фрагменты программы

;Установим атрибут "только для чтения"

mov AH,43h           ;Функция работы с атрибутами

mov AL,1                ;Установка атрибутов

mov CX,1               ;"Только для чтения"

mov DX, offset filename ;Адрес имени файла

int 21h

 

Пример 5. Прямой доступ к файлу. Прочитать 8 байт из созданного ранее файла MYFILE.001, начиная с байта 5, вывести их на экран.

;Определения

stdout    equ 1                      ;Дескриптор стандартного вывода

;Основные фрагменты программы

;Откроем файл

...

;Установим указатель

     mov AH,42h           ;Функция установки указателя

     mov AL,0                ;От начала файла

     mov BX, handle      ;Дескриптор

     mov CX,0               ;Старшая половина указателя

     mov DX,5                         ;Младшая половина указателя

     int 21h

;Прочитаем 8 байт данных с помощью функции 3Fh

...

;Выведем прочитанное на экран с помощью функции 40h

...

;Завершим программу

...

;Поля данных

bufin      db 80 dup (' ')       ;Буфер ввода

handle    dw ?                      ;Ячейка для дескриптора

filename db 'MYFILE.001',0 ;Имя файла в формате ASCIIZ

 

Пример 6. Добавление данных к файлу. Добавить символьную строку к концу символьного файла.

;Основные фрагменты программы

;Откроем файл с указанным именем функцией 3Dh и сохраним

;полученный дескриптор в ячейке handle

...

;Установим указатель на конец файла

     mov AH,42h           ;Функция установки указателя

     mov AL,02              ;От конца файла

     mov BX, handle      ;Дескриптор

     mov CX,0                ;Старшая половина указателя

     mov DX,0                         ;Младшая половина указателя

     int 21h

;Допишем новую строку

     mov AH,40h           ;Функция записи

     mov BX, handle      ;Дескриптор

     mov CX, stringln    ;Длина строки

     mov DX, offset string ;Адрес строки

     int 21h

;Завершим программу

...

;Поля данных

string     db 'Новая строка',cr,lf ;Строка для записи в файл

stringln equ $-str1ng                    ;Ее длина

handle    dw ?                                ;Ячейка для дескриптора

filename db 'MYFILE.001',0        ;Имя файла в формате ASCIIZ

 

Пример 7. Изменение характеристик файла. Изменить дату и время создания файла MYFILE.001.

;Основные фрагменты программы

 

;Откроем файл с указанным именем функцией 3Dh и сохраним

;полученный дескриптор в ячейке handle

...

;Изменим дату и время создания файла

     mov AH,57h                     ;Функция даты/времени

     mov AL,1                         ;Установить дату/время

     mov BX, handle               ;Дескриптор файла

     mov CX,0                         ;Очистим CX

     or CX, sec                     ;Добавим секунды

     or CX, min                    ;Добавим минуты

     or CX, hour                   ;Добавим часы

     xor DX, DX                    ;Очистим DX

     or DX, day                    ;Добавим день

     or DX, mon                   ;Добавим месяц

     or DX, year              ;Добавим год

     int 21h

;Завершим программу

...

;Поля данных

filename db 'MYFILE.001',0        ;Имя файла

handle    dw ?                                ;Ячейка для дескриптора

sec          dw 6/2                            ;6 секунд

min        dw 15*32                        ;15 минут

hour       dw 16*2048                    ;16 часов

day         dw 25                             ;25 число

mon       dw 3*32                          ;март

year        dw 13*512                      ;13 лет от 1980 года

 

Пример 8. Переименование файла. Переименовать файл MYFILE.001, находящийся в текущем каталоге, дав ему имя NEWNAME.DAT.

;Основные фрагменты программы

;Настроим сегментный регистр ES на наш сегмент данных

push DS

pop ES

;Переименуем файл

mov AH,56h                     ;Функция переименования

mov DX, offset oldname   ;Адрес старого имени

mov DI, offset newname   ;Адрес нового имени

int 21h

;Завершим программу

...

;Поля данных

oldname db 'MYFILE.001',0        ;Старое имя файла

newname db 'NEWNAME.DAT',0 ;Новое имя файла

 

Пример 9. Пересылка файла в другой каталог на том же диске. Переслать файл NEWNAME.DAT из текущего каталога в нижележащий каталог NEWDIR, изменив при этом имя файла на NEWNAME.LEX.

;Основные фрагменты программы

;Настроим сегментный регистр ES на наш сегмент данных

...

;Переименуем файл

...

;Завершим программу

...

;Поля данных

oldname db 'NEWNAME.DAT',0                   ;Старое имя файла

newname db 'NEWDIR\NEWNAME.LEX',0   ;Новое имя файла

 

Пример 10. Создание и удаление каталогов. Создать в текущем каталоге подкаталог NEWDIR. Удалить из текущего каталога подкаталог OLDDIR (обязательно пустой).

;Основные фрагменты программы

;Создадим новый каталог

mov AH,39h                     ;Функция создания каталога

mov DX, offset newname ;Адрес нового имени

int 21h

;Удалим ненужный каталог

mov AH,3Ah                    ;Функция удаления каталога

mov DX, offset oldname   ;Адрес старого имени

int 21h

 

;Завершим программу

...

;Поля данных

oldname db 'OLDDIR',0              ;Старый каталог

newname db 'NEWDIR',0             ;Новый каталог

 

Пример 11. Смена диска. Сделать текущим диск А.

;Основные фрагменты программы

;Сделаем текущим диск А

mov AH,0Eh           ;Функция смены диска

mov DL,0                ;Код диска А (А=0, В=1, С=2 и т.д.)

int 21h

;Завершим программу

 

Распределение часов по семестрам и видам занятий

Дисциплина «Системное программное обеспечение» изучается в 5 семестре. Самостоятельная работа (112 часов) студентов заключается в подготовке к лабораторным работам (76 часов) и подготовке к аттестациям и зачету (36 часов).

№ п/п Наименование видов самостоятельной работы Трудоемкость (час.)
1 Подготовка к лабораторным работам 76
2 Подготовка к дифферинцированному зачету 36

Теоретический материал


Поделиться:



Последнее изменение этой страницы: 2019-05-07; Просмотров: 199; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.246 с.)
Главная | Случайная страница | Обратная связь