Лекция по программированию

Автор работы: Пользователь скрыл имя, 11 Января 2011 в 19:34, лекция

Краткое описание

Язык ассемблера - это один из самых старых из всех существующих языков программирования. Когда-то это был один из основных языков программирования, без знания которого нельзя было заставить компьютер сделать что-либо полезное. Появились более удобные средства общения с компьютером. Но в отличии от других языков ассемблер не умирал, более того он это не смог сделать в принципе.

Содержимое работы - 1 файл

LECTS.DOC

— 893.00 Кб (Скачать файл)

               0  Открыть файл только для ввода

               1  Открыть файл только для вывода

               2  Открыть файл для ввода и вывода

Остальные биты регистра AL используются для разделении я файлов  DOS  версии3.0 и старше (см.техническое руководство по DOS).  Обратите вниманиечто для записи файла используется функция создания (шест.3C),  но  не  функция открытия файла. Ниже приведен пример открытия файла для чтения:

               MOV  AH,3DH         ;Запрос на открытие

               MOV  AL,00          ;Только чтение

               LEA  DX,PATHNM1     ;Строка в формате ASCIIZ

               INT  21H            ;Вызов DOS

               JC   error4         ;Выход по ошибке

               MOV  HANDLE2,AX     ;Сохранение номера в DW

     Если файл с  необходимым  именем  существуетто  операция  открытия устанавливает длину  записи  равной  1,  принимает  существующий  атрибут, сбрасывает флаг CF и заносит файловый номер в регистр AX.  Файловый  номер используется в дальнейшем для всех последующих операций.

     Если файл отсутствует, то операция устанавливает флаг CF и заносит  в регистр AX код ошибки: 02, 04, 05 или  12  (смрис.17.1).  Не  забывайте проверять флаг CF.  При успешном создании файла система может установить в регистре AX файловый номер 0005, что легко можно спутать с кодом ошибки 05 (нет доступа).

Чтение файла: Шест.3F

     Для чтения записей файла используется функция DOS шест.3F.  При  этом необходимо установить в регистре BX файловый номерв регистре CX – число байтов и в  регистре  DX  -  адрес  области  вводаВ  следующем  примере происходит считывание 512-байтовой записи:

               HANDLE2     DW   ?

               INPREC      DB   512 DUP (' ')

                           MOV  AH,3FH         ;Запрос на чтение

                           MOV  BX,HANDLE2     ;Файловый номер

                           MOV  CX,512         ;Длина записи

                           LEA  DX,INPREC      ;Адрес области ввода

                           INT  21H           ;Вызов DOS

                           JC   error5         ;Проверка на ошибку

                           CMP  AX,00          ;Прочитано 0 байтов?

                           JE   endfile

     Правильно выполненная операция считывает запись в памятьсбрасывает флаг CF и устанавливает в  регистре  AX  число  действительно  прочитанных байтовНулевое значение в регистре AX обозначает  попытку  чтения  после конца файлаОшибочная операция устанавливает  флаг  CF  и  возвращает  в регистре AX код ошибки 05 (нет доступа) или 06 (ошибка файлового номера).

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

 
 

     ПРОГРАММА: ИСПОЛЬЗОВАНИЕ ФАЙЛОВОГО НОМЕРА ДЛЯ ЧТЕНИЯ ФАЙЛА

; -----------------------------------------------------

STACKSG SEGMENT PARA STACK 'Stack'

        DW      80 DUP(?)

STACKSG ENDS

; -----------------------------------------------------

DATASG  SEGMENT PARA 'Data'

ENDCDE  DB      00

HANDLE  DW      ?

IOAREA  DB      32 DUP(' ')

PATHNAM DB      'D:\NAMEFILE.SRT',0

OPENMSG DB      '*** Open error ***', 0DH, 0AH

READMSG DB      '*** Read error ***', 0DH, 0AH

ROW     DB      00

DATASG  ENDS

; ------------------------------------------------------

CODESG  SEGMENT PARA 'Code'

BEGIN   PROC    FAR

        ASSUME  CS:CODESG,DS:DATASG,SS:STACKSG,ES:DATASG

        PUSH    DS

        SUB     AX,AX

        PUSH    AX

        MOV     AX,DATASG

        MOV     DS,AX

        MOV     ES,AX

        MOV     AX,0600H

        CALL    Q10SCR          ;Очистить экран

        CALL    Q20CURS         ;Установить курсор

Информация о работе Лекция по программированию