Студопедия
Главная страница | Контакты | Случайная страница

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

lt;имя_сегмента> ENDS

BIOS - базовая система ввода вывода. MS-DOS - обеспечивает высокий уровень работы.

Прерывание подразделяется на прерывание с DOS и BIOS. Int 10h BIOS обеспечивает необходимость процедуры для ввода - вывода.

В состав ОС входит много процедур и для них не хватает, допустим, Х номеров прерываний. В связи с этим процедуры объединяются в группы. Процедуры одной группы называются функциями соответствующего прерывания, чтобы различать их, перед выполнением команды int в аh записывается номер пустой функции. Mov аh, <номер функции> Int <номер прерывания>.

Прерывание DOS предназначено для предоставления программисту различных услуг со стороны ОС.

Аh - 02Н - вывод символов на экран, аh09 - вывод строки, аh -01 - вывод символов с ожиданием, аh – 06 ввод-вывод аh-0АН ввод строки.

Функции управление памятью:

(malloc) аh =48Н in: bх=size out: ах (код ошибки) сf (ошибка) bх (максимальный размер свободной памяти) ах=5seg.

(memtrem) аh=49h освобождает ранее занятый память блоком in: bs=seg адрес блока, который освобождается out: сх, сf

аh=4Аh - изменение разряда блока памяти (calloc) in: es=seg bx=size - размер в параграфах.

Out: ах, сf, bx.

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

АН=4В запуск программ. In: аl= DS:DX буфер ВS:ВХ- РPB - блок параметров выполняется. OUT: ах,сf.

После выполнения 4В все пары регистров (SS, SP, DP).

Прерывание DOS и BIOS. Прерывание могут содержать конечные функции. BIOS содержится в ПЗУ

взаимно производить начальную проверку обеспечивает базовые функции ввод выводов простейшие

после чего производится загрузка с жесткого или гибкого диска на этом диске находится ОС с которой она загружается. Устройство дополнительный набор функций, прерываний, указателей.

BIOS прерывания от 0 до 1F. Прерывания функций обработки, есть его вектор, который указывает на блок некоторых данных в памяти.

Функции подразделяются на уровни (высокий, средний, низкий), прерывания DOS высокий уровень, прерывания БИОС - средний и низкий уровень.

ДОС 21 h - набор функций ДОС, 13h БИОС.

Прерывание представляет собой операцию, которая приостанавливает выполнение программ для специальных системных действий. Прерывания обычно используются для операций ввода-вывода на различные устройства и непредвиденных программных ошибок (например, переполнение при делении). Система BIOS (Basic Input/Output System) находится в RОМ (ПЗУ) и управляет всеми прерываниями в системе.

В компьютерах IВМ РС RОМ находится по адресу FFFF0H. При включении компьютера процессор устанавливает состояние сброса, выполняет контроль четности, устанавливает в регистре СS значение FFFFН, а в регистре IP - нуль. Первая выполняемая команда поэтому находится по адресу FFFF:0 или FFFF0. что является точкой входа в BIOS. BIOS проверяет различные порты компьютер

для определения и инициализации подключенных устройств. Затем BIOS создает в начале памяти (п<

адресу 0) таблицу прерываний, которая содержит адреса обработчиков прерываний, и выполняет дв<

операции 1МТ 11Н (запрос списка присоединенного оборудования) и 1МТ 12Н (запрос размер!

физической памяти).

Следующим шагом ВЮ5 определяет имеется ли на диске или дискете операционная система DOS. Ест

ОС обнаружена, то ВЮ5 выполняет прерывание 1гЛ" 19Н для доступа к первому сектору диска

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

системный файл 10.5У5 в память. После этого память имеет следующее распределение:

(по порядку) Таблица векторов прерываний, Данные ВЮ5, 10.5У5. Резидентная часть СОММАЫО.СОК

.Доступная память для прикладных программ, Транзитная часть СОММАЫО.СОМ, Конец РАМ (ОЗУ), РОК

BIOS

Внешние устройства передают сигнал внимания через контакт 1МТР в процессор. Процессор реагирует ж

этот запрос, если флаг прерывания IP установлен в 1. Для каждого типа прерывания в таблице векторо!

прерываний начинающейся по адресу 0000 хранится вектор прерывания - 4х байтовый адрес

сегмент:смещение. В таблице имеется 256 векторов (1024). Каждый вектор указывает на подпрограмм)

обработки указанного типа прерывания и содержит сегмент и смещение, которые при прерывани»

заносятся в регистры CS и IP.

При возникновении прерывания процессор заносит в стек содержимое флагового регистра, регистров CS»

IP. Далее из таблицы прерываний берется адрес соответствующей программы обработки, сегмент >

смещение ее заносятся в CS и IP соответсвенно. Возврат из этой подпрограммы осуществляется команде»

IPЕТ (Intегшр(Не(ит), которая восстанавливает флаги и регистры CS и IP из стека и передав!

управление на команду, следующую за выполненной до прерывания.

lt;имя_сегмента> ENDS

В этой форме описываются все 4 сегмента программы. Отличаться они будут только “типом связи” и “классом”.

[тип подгонки]- PARA- означает, что адрес сегмента должен быть кратен 16.

[тип связи]- PUBLIC, т.е. доступный. Для стекового сегмента – stack.

[‘класс’] – для код. сег.-‘code’, сегмент данных – ‘data’, стековый сегмент – ‘stack’.

При пользовании процедурой различают описание процедуры и ее реализацию. Описание процедуры делается с помощью псевдооператоров PROC и ENDP, которые отмечают начало и конец процедуры. Возврат из процедуры осуществляется оператором RET. Обращение к процедуре для ее реализации осуществляется командой CALL. А возврат из процедуры осуществляется на следующую по порядку команду после обращения к процедуре.

17. Дать определение атрибутов дистанции для процедур.

Процедуре всегда приписан один из атрибутов дистанции: near или far. Атрибут far всегда указывается явно, а атрибут near может быть опущен, т.к. он устанавливается по умолчанию. С атрибутом near процедура может быть вызвана только из того сегмента, где она описана (сегмента команд), с атрибутом far – из любого сегмента.

18. Система команд ЭВМ.

МП имеет 92 типа команд. Их можно подразделить на 7 функциональных групп.

1. команды пересылки данных между регистрами, ячейками, и портами вв\выв.

а)общего назначения.mov<при>,<источн>;push<ист>;pop<при-к>

б)вв\выв

in<акум>,<порт>;<порт>,<акум>; порты 256 или dx; al -акомулятор

в)загрузки флагов, а”) lanf (load ah from flags);(cf, pf, af, zf, sf) б”)canf (store ah in to flags)в”) push помещает регистр в стек, pop вытаскивает и помещает.

2. Арифметические ком. Над двоичными и десятич. Формами. Над двоичными и двоично десятичных форматов со знаком и без. Десятичные числа без знака 0 – 255(байт), 0- 65535(слова).С знаком от -127 до 128(байт) от -32768 до 32767(слова). Для МП все числа в двоичные. 1. Сложения: inc <приемн> (прием+1); ADD <op1>, <op2>; ADC op1,op2; 2. Вычитание: DEC< прием>(прием-1); SUB op1, op2; SBB op1,op2. Умножение: MUL op; imul op(AX – байт и слово); mov ser, 100_____mul ser. Деление DIV op; IDIV op-делитель.(частное в ax, остаток в ah)

3. манипулирование битами (сдвиг), циклический сдвиг и логические операции и значения ячеек памяти. а) Сравнение; CMP op1, op2(вычитает). б) Логические. AND <op1>,<op2>; OR<op1>,<op2>; XOR <op1>,<op2>. Сдвиг циклический сдвиг. (SHL, SHR)(ROL, ROR)/

4. Передача управления. 1) Команды ветвления. 2)вызов поцедуры(CALL<имя_проц>; JMP, RET.)

5. Команды обработки строк, перемещающие, сравнивающие и сканирующие строки данных. строк (REP MOVS CMPS SCAS LODS STOSCMPB CMPSW LODSB LODSW MOVSB MOVSBMOVSW REPE REPNZ SCASB SCASW STOSB STOSW)

6. Команды прерывания, отвлекающие МП на обработку некоторых специфических ситуаций.(int into iret)

7. Команды управления процессором, устанавливающие и сбрасывающие флаги состояния, а также изменяющие режим функционирования МП.(CLС,CMC, STС, CLD, STD, CLI, STI, HLT, WAIT, ESC, LOCK, NOP).

19. Команды сложения; пример.

INC<приемник> - команда приращения приемника на единицу: inc cx; добавление 1 к регистру cx

inc mem_byte; добавление 1 к байту памяти.

ADD<op1>,<op2>; op1=op1+op2 (add-сложить)

Содержимое операнда1 прибавляется к содержимому операнда2 и результат записывается на место операнда1. mov al, 15 mov ax, 54

add al, 25 mov bx, 45

add ax, bx

APC<op1>,<op2> - команда сложения работает почти также, как и предыдущая, но к результату добавляется содержимое флага переноса, т.е. op1=op1+op2+cf. Употребляется в том случае, когда предполагается результат больше, чем количество битов ячейки памяти, оставленной под этот результат.

20. Команды вычитания; пример

Нет устройства вычитания. Вычитание выполняется сложением с числом в дополнительном коде.

DEC<op> - вычитается 1 из содержимого операнда(op): dec cx- вычитается 1 из регистра cx

dec mem_byte- вычитается 1 из памяти размером в байт

SUB<op1>,<op2> - op1=op1-op2. Из содержимого операнда1 вычитается содержимое операнда2 и результат записывается на место операнда1. mov al,10 mov cx,100

sub al,7 mov bx,15

sub cx,bx

21. Команды ВВОДА\ВЫВОДА

Команда вв\выв используется для взаимодействия с периферийными устройствами системы. Они имеют вид: IN аккумулятор, порт

Out порт, аккумулятор. Где AL аккумулятор при обмене байтами или BX при обмене словами. Операнд порт может быть десятичное значение от 0 до 255, что позволяет адресоваться 256 устройствам. В качестве порта можно пользоваться регистром DX (легко менять операнд):

in al, 200 //ввести байт из порта 200 в al

in al, port // ввести байт из порта port в al

in al, 61h // ввести байт из порта 61h в al

out 61h,ax // послать байт из al в порт 61h

out dx,ax // послать слово из ах в порт, указ-й в dx.

22. Команды пересылки данных общего назначения

Команда пересылки данных осущ-ют обмен данными и адресами м/у регистрами и ячейками памяти или портами вв\выв.

Основная команда общего назначения MOV может переслать байт или слово между регистром и ячейкой памяти или двумя регистрами

Общий вид; MOV приемник, источник; Примеры; MOV AX,TABLE; MOV TABLE,AX; MOV DS,AX.

Команда PUSH и POP. Для работы со стеком. Команда PUSH помещает содержимое регистра или ячейки памяти размером в 16 битовое слово на вершину стека. А POP снимает слово с вершины стека и помещает его в ячейку памяти или регистр. PUSH источник, POP приемник.

Пример: PUSH SI; PUSH DS; PUSH TABLE[BX][DI] (ячейка памяти). Под вершиной стека мы понимаем ячейку в сегменте стека, адрес которой хранится в указателе SP. Если надо вытащить из стека то SP=SP+2 и вытаскиваем.

Команда XCHG. (обменять) меняет между собой значения двух регистров или ячейки памяти. Однако он не может выполнить обмен значений регистров сегмента. Пример:[XCHG AX,BX (СЛОВА ИЛИ БАЙТЫ), XCHG AL,BH], XCHG WORD_LOC,DX(ячейки памяти).

Команда XLAT. Извлекает элементы таблицы XLAT выбирает значение из таблицы байтов и загружает его в регистр AX. Таблица до 256 сим

Общая формула. XLAT таблица_источник. Перед исполнением команды надо начальный адрес таблицы загрузить в BX. Пример:

MOV AL,10; MOV BX,OFFSET S_TAB; XLAT S_TAB(загрузить номер байта, загрузить смещение адреса в BX, и извлечь значение байта).

23. Описать сегмент стека, команды работы со стеком.

Стек – организованный специальным образом участок памяти, который используется для временного хранения переменных, передача параметров вызываемым подпрограммам и сохранение адреса возврата при вызове процедур и прерываний. Команда PUSH и POP. Для работы со стеком.

Команда PUSH помещает содержимое регистра или ячейки памяти размером в 16 битовое слово на вершину стека. А POP снимает слово с вершины стека и помещает его в ячейку памяти или регистр. PUSH источник, POP приемник.

Пример: PUSH SI; PUSH DS; PUSH TABLE[BX][DI] (ячейка памяти). Под вершиной стека мы понимаем ячейку в сегменте стека, адрес которой хранится в указателе SP. Если надо вытащить из стека то SP=SP+2 и вытаскиваем.

24. Команды загрузки исполнительного адреса.

LEA<регистр 16>, <память 16>

Где <память16> должна иметь атрибут WORD. В отличие от команды mov с операцией offset, операнд <память 16> может быть индексирован, что даёт возможность осуществлять гибкую адресацию. Пусть di содержит 5, тогда LEA BX, TABLE[di] загрузит смещение адреса TABLE + 5 в регистр bx.

25. Дать понятие адреса и смещения.

Адрес - это номер ячеек, находящиеся в памяти машины. Смещение - виртуальный номер ячеек памяти.

Адрес любого данного состоит из адреса сегмента и смещения в этом сегменте. Полный адрес любого данного записывается в шестнадцатеричной системе, сначала записывается адрес сегмента и через двоеточие записывается смещение в этом сегменте. Допустим мы записываем адрес массива, как выше сказано записываем адрес сегмента «:» смешение в сегменте, т.е. адрес массива это адрес его первого элемента, если нам нужен второй или другой элемент этого массива, то к адресу допис-тся через «+» смешение нужного элемента.

26. Команды умножения.

MUL<ор> - умножение числа без знака.

IMUL<ор> - умножение числа со знаком.

В обеих командах операнд – либо регистр общего назначения, либо ячейка памяти 8 или 16 бит. В качестве второго сомножителя используется регистр al при умножении байт или ax при умножении слов. Произведение имеет двойной размер. При умножении байт старшая часть произведения находится в ah, а младшая – в al. При умножении слов старшая часть произведения находится в dx, а младшая в – ax. Флаги переноса cf и of = 0, если старшая половина произведения = 0, в противном случае оба = 1.

После использования команды imul cf и of =0, если старшая половина произведения есть расшир.е знака младшей половины, в противном случае оба = 1.

Перед выполнением команды умножения должна быть выполнена команда: mov al,<сомножитель> или mov ax,< сомножитель >. Команды умножения не позволяют непосредственно умножать на число.

27. Команды деления.

DIV<ор> - деление чисел без знака.

IDIV<ор> - деление чисел со знаком.

<ор> - делитель 8 или 16 битовый, находящиеся в регистре общего назначения или в ячейки памяти. Делимое должно иметь двойной размер по отношению к делителю: регистры ah и al, т.е. ax (при 8 битовом делителе) или dx и ax(при 16-битовом). Результат: а) если операнд (ор) – байт, то частное от деления помещается в регистр al, а остаток в ah; б) если операнд – слово, то частное от деления ax, а остаток в dx;

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

Mov bx, 20

Div bx

28. Команда сравнения.

CMP <op1>, < op2 >; команда сравнивает содержимое op1 с содержимым ор2. Сравнение делается вычитанием, точно так же, как команда sub, но результат операции не записывается. В качестве op1 не может быть непосредственное значение. По результату работы этой команды в программе выполняются условные переходы, т. е. программа может изменить последовательность выполнения команд. Выполнение команды влияет на установку флагов.

29. Логические команды.

AND < op1>, <ор2> битовая команда логического умножения работает по следующему правилу:

ор1 ор2 Результат

1 1 1

1 0 0

0 1 0

0 0 0

 

OR <opl>, <ор2> - битовая команда логического сложения работает по следующему правилу:

ор1 ор2 Результат

1 1 1

1 0 1

0 1 1

0 0 0

XOR <opl>, <ор2> - битовая команда исключающая «или» работает по следующему правилу

работает по следующему правилу:

оp1 ор2 Результат

1 1 0

1 0 1

0 1 1

0 0 0

NOT <op> - битовая команда отрицания. Даёт обратный код числа и работает следующим образом:

ор Результат

1 0

0 1

TEST <opl>, <op2> - выполняется точно так же, как и команда and, но не записывает результат своего действия, воздействует только на флаги.

30. Команды сдвига и циклического сдвига.

SAL, SAR (shift arithmetic left, right) - сдвиг со знаком. SAR - сохраняет (дублирует) знак.

SAL - не сохраняет знака, но заносит 1 в бит регистра флагов CF в случае изменения знака.

SHL (shift logical left) - производит логический сдвиг влево. SHR (shift logical right) - производит логический сдвиг вправо.

Две последние команды при сдвиге в освободившиеся биты заносят нули. Все команды сдвига имеют вид: <код_сдвига> <op1>,<op2>, где <ор1> - данное, которое надо сдвинуть; <ор2> - константа сдвига =1, если сдвиг на один бит, если на большее кол-во битов, то в регистр cf, заносится константа сдвига:

Команды сдвига можно использовать для быстрого умнож. и деления на 2.

Эти команды выполняются в 11 раз быстрее, чем команда умножения mull. В компьютере данные хранятся в двоичной системе исчисления. 2 – основание этой системы. Умножение на 2 равносильно сдвигу числа на 1 влево; деление на 2 – сдвигу числа на 1 вправо.

Пусть число лежит в АХ.

Умножение:

shl ax, 1

Деление:

shr ax, 1

Циклический сдвиг: ROL, ROR (rotate left, right) - вышедший за пределы операнда бит сохраняется и заносится в операнд с противоположного конца. RCL, RCR (rotate left (right) through carry) - сдвинуть влево циклически вместе с флагом переноса и в противоположный конец операнда поместить значение флага переноса cf.

31. Команды расширения знака.

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

CBW (convert byte to word) воспроизводит 7-й бит регистра al во всех битах регистра ah;

CWD (convert word to doubleword) - воспроизводит 15-й бит регистра ах во всех битах регистра dx. Таким образом, команда cbw позволяет сложить байт и слово, вычесть слово из байта и т. д. Команда cwd позволяет разделить слово на слово. Пример:

cbw;

add ах, bх; сложить содержимое байта al с содержимым слова в bх

cbw;

imul bx умножить байт в al на слово в bх

cwd;

idiv bx разделить слово в ах на слово в bх.

32. Методы адресации.

33. Какие системные программы работают с программой на ассемблере?

Откомпилируйте полученный исходный модуль программы, для чего внесите в

командную строку DOS имя MASM.EXE, через пробел имя своего исходного модуля и нажмите клавишу <ENTER>:

F:\STUDENT>masm.exe <имя_файла>.asm <ENTER>

Выполняем компоновку программы, для чего вызываем программу - компоновщик

LINK.EXE:

F:\STUDENT>link.exe <имя_файла>.obj <ENTER>

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

а) run filename[<имя_файла>.exe]: <ENTER>

б) list file[nul.map]:<имя_файла> <ENTER>

в) libraries[nul.lib]: <ENTER>

Отладочные программы DEBUG.EXE и TD.EXE

34. Какие программные модули образуются при обработки исходного модуля системными программами?

Программа на ассемблере от момента составления и до получения результата проходит ряд этапов. Написание программы с помощью редактора - создание исходного модуля, которому присваивается имя и расширение <имя>.asm. Исходный модуль компилируется с помощью системной программы masm.exe и получается объектный модуль, который имеет то же имя, но другое расширение.obj - <имя>.obj. Объектный модуль обрабатывается программой, которая называется компоновщик -link.exe, после чего получается загрузочный модуль — <имя>.ехе, в результате работы которого получают решение программируемой задачи:

При обнаружении ошибок или для проверки правильности работы алгоритма можно использовать программу отладчик - debug.exe, которая позволяет по шагам просмотреть работу программы.

 

35. Отладчик

При обнаружении ошибок или для проверки правильности работы алгоритма можно использовать программу отладчик - debug.exe, которая позволяет по шагам просмотреть работу программы.

КОМАНДЫ ОТЛАДЧИКА DEBUG.EXE

A[адрес] - ассемблирование вводимых команд и запись их, начиная с указанного адреса.

D[адрес] - вывод содержимого дампа памяти на экран.

E[адрес] - редактирование ячейки памяти.

F<диапазон > <байты> - заполнение области памяти указанными байтами, либо символьной строкой, указанной в апострофах.

G[=адрес] [[адрес]...] - запуск программы. Выполнение начинается с =адрес, если он не указан, то с текущего значения CS:IP, с необязательными точками основа по указанным адресам.

H <значение1> <значение2> - вычисляет сумму первого и второго значений в шестнадцатеричной системе счисления.

L [адрес] - загрузка файла с именем, определённым командой N, начиная с указанного адреса или CS:100h.

N [диск:] путь [параметры] - задание имени файла и параметров для команд загрузки L и записи W.

P[=адрес] [счётчик] - пошаговое выполнение, начиная с указанного адреса, команды call, loop и int выполняются как одна команда.

Q - завершение сеанса работы с отладчиком.

R [регистр] - модификация содержимого регистров процессора. При отсутствии параметров выводится содержимое всех регистров процессора.

S<диапазон> <байты> - поиск адреса, по которому находятся указанные байты.

T [=адрес] - пошаговое выполнение n команд, начиная с указанного адреса или CS:IP. Осуществляется вход в подпрограммы и прерывания.

U [адрес] или [диапазон] - дизассемблирование кодов команд.

W [адрес] - запись в файл, установленный по команде N содержимого памяти с указанного адреса или с CS:100h. Количество записываемых байтов берётся из BX:CX.

36. Работа с файлом. Метод FCB.

Под файлом понимают информацию, записанную на любом внешнем носителе и имеющую имя. В зависимости от того, с какой системой Вы работаете, имя файла может быть коротким (не более 8 символов) или длинным (до 31 символа). В общем случае, это ещё и устройство, с которым может работать МП. В зависимости от того, к какой системе принадлежит файл и какие функции он выполняет, к имени файла через точку добавляется расширение, состоящее из трёх символов:.asm -ассемблерный файл,.срр - файл C++,.exe,.com — исполняемые файлы и т. д. С файлами могут выполняться следующие действия: файл можно создать; записать в него информацию, если он создан заранее; его можно открыть для чтения, после записи в него данных или чтения из него данных его нужно закрыть, ненужный файл можно удалить. Существует два метода выполнения операций с файлами:

1) метод с использованием блоков управления файлами(РСВ - File Control Block);

2) метод дескриптора файлов (handle).

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

Метод FCB

Прежде чем читать или писать данные в файл, он должен быть открыт. Открыть файл, значит создать и проинициализировать специальную область памяти данных, которая содержит информацию о файле: его имя, имя накопителя, размер записи и т. д. Первоначально FCB содержит только имя файла и имя накопителя, а когда файл открыт в него добавляет остальные данные DOS. Всё что нужно для поиска файла, это стандартная строка пути, завершающаяся байтом ASCI1Z =0, для определения конца строки. Операции по пересылке данных должны иметь область памяти (буфер), в которую будут посылаться данные или выбираться из неё. Этот буфер называется область обмена с диском (Disk Transfer Area) или DTA.

37. Метод дескриптора файла.

Про файл тоже, что и в 42.

Дескриптор файла - это номер (число), который система присваивает файлу при работе с ним функций прерывания int 21 h. Рассмотрим основные функции работы с файлами:

1. AH = 3ch - создаёт новый файл с указанной спецификацией. Если указанный файл существует, он усекается до нулевой длины.

DS:DX = адрес строки с именем файла в виде ASCIIZ,

в СХ - атрибут файла;

при возврате: АХ = дескриптор

при ошибке: CF - 1; АХ = код ошибки.

2. АН = 3dh - открывает файл с указанной спецификацией. При вызове в AL помещается режим доступа: 0 - для чтения; 1 - для записи; 2 - для записи и чтения (дополнения), в СХ - атрибут файла, в DS:DX - адрес строки с именем файла. Возвращает дескриптор файла и устанавливает указатель файла на начало файла для режимов 0 и 1, и на конец файла для режима 2.

3. AH = 3eh - закрывает файл. Сбрасывает на диск внутренние буферы файла. Если файл был модифицирован, в записи каталога устанавливаются новые значения длины файла, а также дата и время создания файла, освобождается блок описания файла в SFT вместе с закреплённым за ним дескриптором:

4. АН = 3fh - чтение из файла или устройства. Пересылает из файла данные в буфер пользователя. При чтении из символьного устройств в режиме ASCII читается строка указанной длины, либо до символа возврата каретки, если он встретился раньше:

при вызове: ВХ = дескритор; СХ = количество байтов, DS: DX = адрес буфера пользователя; при возврате: АХ = количество переданных байтов; при ошибке: CF = 1; АХ = код ошибки.

5..АН=40h- записывает данные в файл или устройство. Пересылает данные в файл из буфера пользователя: при вызове: ВХ = дескриптор;

СХ = количество байтов;

DS: DX = адрес буфера пользователя; при возврате: АХ = количество переданных байтов;

6.АН = 41 h - удаляет указанный файл:

при вызове: DS:DX = адрес строки файла в формате ASCIIZ. При этом в имени файла не могут быть употреблены джокеры(?) и *; при ошибке: CF = 1; АХ = код ошибки.

7. АН = 42h - установка указателя в файле. Позволяет установить текущее положение указателя на любой байт для выполнения последующих операций прямого доступа к файлу (чтения или записи). При вызове AL, заносится режим установки указателя: 00h абсолютное смещение от начала файла; 01 h - знаковое смещение от текущего положения указателя; 02h - знаковое смещение от конца файла. При этом: ВХ = дескриптор; СХ = старшая часть смещения; DX =младшая часть смещения. При возврате: DX = старшая часть возвращаемого указателя; АХ = младшая часть возвращаемого указателя.

8. АН = 4ch - осуществляет поиск в указанном каталоге первого файла, совпадающего по имени с шаблоном. В DS:DX заносится адрес строки с шаблоном имени файла, в СХ заносится атрибут искомого файла для сравнения (атрибуты могут комбинироваться). Можно использовать собственный локальный буфер. Для этого надо воспользоваться функцией АН = 1ah int 21 h, размер буфера равен 2ch.

9. АН = 4fh - осуществляет поиск следующего, совпадающего с шаблоном имени файла. При этом в DS:DX - адрес имени шаблона файла, в СХ -атрибут для сравнения. Возвращает DTA, заполнений данными. DS:DX -указывает на 2bh - байтовый буфер с информацией, возвращённой функцией 4eh.

Файловые функции DOS чтения и записи через дескрипторы можно использовать для ввода - вывода через стандартные устройства ЭВМ. При этом для работы со стандартными устройствами DOS предоставляет пять предопределённых дескрипторов:

0 - стандартный ввод (CON);

1 - стандартный вывод (CON);

2 - стандартная ошибка (CON);

3 - стандартный вспомогательный пopт(AUX);

4 - стандартный принтер (PRN).

Таким образом, при работе с терминалом, принтером или последовательным портом нет необходимости открывать новые дескрипторы; ввод с клавиатуры осуществляется через дескриптор 0, вывод на экран - через дескрипторы 1 или 2, вывод на принтер через дескриптор 4. Различие дескрипторов 1 и 2 заключается в том, что стандартный вывод (как и стандартный ввод) можно перенаправить средствами DOS на любое устройство или в файл, а стандартная ошибка всегда связана с экраном. Обычно дескриптор 2 используют для вывода на экран аварийных или диагностических сообщений.

 




Дата добавления: 2014-12-19; просмотров: 93 | Поможем написать вашу работу | Нарушение авторских прав

<== предыдущая лекция | следующая лекция ==>
прерывания DOS и В108. Использование прерывания для ввода - вывода. Управления памятью. Запуск и завершение программ.| Физический факультет

lektsii.net - Лекции.Нет - 2014-2025 год. (0.032 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав