мета-данные страницы
  •  
Загрузка не удалась. Возможно, проблемы с правами доступа?

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
asm:lesson6 [21/10/2010 15:14] arabusovasm:lesson6 [21/10/2010 21:30] (текущий) arabusov
Строка 7: Строка 7:
 байт,  а директива DW oпределяет слово. Элемент данных может байт,  а директива DW oпределяет слово. Элемент данных может
 содержать непосредственное значение или константу, определенную как символьная строка или как числовое значение. содержать непосредственное значение или константу, определенную как символьная строка или как числовое значение.
-Другим  способом определения  константы является непосред +Другим  способом определения  константы является непосредственное  значение,  т.е.  указанное  прямо  в  ассемблерной
-ственное  значение,  т.е.  указанное  прямо  в  ассемблерной+
 команде, например: команде, например:
  
Строка 81: Строка 80:
 формате ASCII. формате ASCII.
 Символьная  строка  определяется только директивой  DB, в Символьная  строка  определяется только директивой  DB, в
-котоpой указывается более двух символов в нормальной последо +котоpой указывается более двух символов в нормальной последовательности  слева  направо.   Следовательно,  директива  DB
-вательности  слева  направо.   Следовательно,  директива  DB+
 представляет единственно  возможный  формат  для определения представляет единственно  возможный  формат  для определения
 символьных данных. символьных данных.
Строка 126: Строка 124:
 помнить,  что,  например, символьная константа, определенная помнить,  что,  например, символьная константа, определенная
 как DB '12',  представляет символы ASCII и  генерирует шест. как DB '12',  представляет символы ASCII и  генерирует шест.
-3132, а числовая константа, oпределенная как DB 12, представ +3132, а числовая константа, oпределенная как DB 12, представляет двоичное число и генерирует шест. 0C.
-ляет двоичное число и генерирует шест. 0C.+
 ==== Директива опеделения байта ==== ==== Директива опеделения байта ====
 Из  различных  директив,  определяющих  элементы  данных, Из  различных  директив,  определяющих  элементы  данных,
Строка 294: Строка 291:
 слова MPY вместо обычного мнемокода MUL. слова MPY вместо обычного мнемокода MUL.
  
-===== работа с фай+===== Работа с файлами в MS-DOS ===== 
 + 
 +==== Функции типа дескриптора ==== 
 + 
 +В MS-DOS начиная со второй версии файловая система стала иерархической, т.е. появились каталоги (или их можно назвать папками, или директориями). С иерархической файловой системой вы знакомы из опыта общения с OS Windows. Полное имя файла представляет из себя обозначение дисковода, путь до файла и имя файла. По ограничениям MS-DOS размер имени файла не может превышать 8 символов на собственно имя и 3 символов на расширение. Полное имя файла в MS-DOS можно представить, например, так: 
 +    C:\SYSTEM\COMMAND.COM 
 +Специфика MS-DOS такова, что в имени файла регистр не учитывается, то есть вы можете записать как COMMAND.COM, так и command.com. Приведённый пример вообще говоря представляется в виде ASCIIZ последовательности - это значит, что каждому символу соответствует число из таблицы кодов ASCII символов, а также в конец строки добавляется число 0, то есть запись 
 +   C:\SYSTEM\COMMAND.COM 
 +преобразуется в 
 +   43 3a 5c 53 59 53 54 45 4d 5c 43 4f 4d 4d 41 4e 44 2e 43 4f 4d 00 
 +Для работы с файлом с помощью функции типа дескриптора, нужно поместить адрес имени файла в DS:DX. В регистр ah помещается номер функции, после чего вызывается прерывание int 21H. Все функции типа дескриптора после выполнения возвращают опущенный флаг переноса, если функция выполнена успешно и наоборот. Чтобы совершить переход к вашему обработчику ошибки, выполните команду 
 +    jc      error 
 +где error - указатель на начало обработчика. 
 +Теперь рассмотрим некоторые функции типа дескриптора, которые нам сегодня пригодятся. 
 +=== Создание файла === 
 +По заданному в коде ASCIIZ пути создаёт новый файл на указанном или текущем диске или на указанном или текущем каталоге. Если указанный файл существует, то он усекается до нулевой длины. В любом случае открывается файл и возвращается дескриптор (16-разрядное число, которое нужно просто запомнить - именно с помощью этого числа в дальнейшем программа сможет обратиться к именно этому файлу). 
 +При вызове: 
 +  * AH = 3cH 
 +  * CX = атрибут (в нашем случае всегда 0) 
 +  * DS:DX - адрес строки, содержащей имя файла 
 +При возврате: 
 +Успешно - флаг переноса сброшен 
 +  * AX = дескриптор 
 +Неудачно - флаг переноса установлен 
 +  * AX = код ошибки 
 +=== Открытие файла === 
 +По заданному в коде ASCIIZ пути открывает файл на указанном или текущем диске или на указанном или текущем каталоге. Возвращается дескриптор. 
 +При вызове: 
 +  * AH = 3dH 
 +  * AL = режим доступа 
 +   Биты      Описание 
 +   0-2       000=чтение 
 +             001=запись 
 +             010=чтение/запись 
 +  * DS:DX - адрес строки, содержащей имя файла 
 +При возврате: 
 +Успешно - флаг переноса сброшен 
 +  * AX = дескриптор 
 +Неудачно - флаг переноса установлен 
 +  * AX = код ошибки 
 +=== Закрытие файла === 
 +При вызове: 
 +   * AH = 3Eh 
 +   * BX =  дескриптор 
 +При возврате: 
 +Успешно - флаг переноса сброшен 
 +Неудачно - флаг переноса установлен 
 +  * AX = код ошибки 
 +=== Чтение файла === 
 +При вызове: 
 +  * AH = 3Fh 
 +  * BX = дескриптор 
 +  * CX = число байт для чтения 
 +  * DS:DX = адрес буфера 
 +При возврате: 
 +Успешно - флаг переноса сброшен 
 +  * AX = число переданных байтов (может быть меньше CX!) 
 +Неудачно - флаг переноса установлен 
 +  * AX = код ошибки 
 +=== Запись в файл === 
 +При вызове: 
 +  * AH = 40h 
 +  * BX = дескриптор 
 +  * CX = число байт для вывода записи 
 +  * DS:DX = адрес буфера 
 +При возврате: 
 +Успешно - флаг переноса сброшен 
 +  * AX = число переданных байтов (может быть меньше CX!) 
 +Неудачно - флаг переноса установлен 
 +  * AX = код ошибки