Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

С третьего байта записывается вводимая строка, включая последний символ CR (0Dh).




Таким образом, для получения 50 - символьной строки надо отвести под буфер минимум 53 байта памяти:

– в первый байт памяти записать число ASCII 51;

– после ввода 50 символов второй байт дескриптора будет содержать ASCII 50;

– 53-й байт отведённой памяти будет содержать ASCII 13 (0Dh).

Пример 2:

; - - - в сегменте данныхSTRING DB 53 DUP(?); область для 50 символов; - - - получение строки с клавиатурыLEA DX, STRING; DS:DX - адрес строкиMOV BX,DXMOV AL,51; установка длины строки (+1 для CR)MOV [BX], AL; посылаем в первый байт дескриптора; длину строкиMOV AH, 0AH; номер функцииINT 21H; - - - получаем в AH длину строкиMOV AH, [BX]+1; теперь реальная длина в AH

Пример 3:

; Программа считывает строку символов и выводит ее на экран.

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

masm

model small

.stack 100h

.data

crlf DB 0Dh, 0Ah, '$'; символы перехода на начало новой строки

buf DB 6; выделяем буфер для ПЯТИ видимых символов

.code

start:

mov ax,@data

mov ds,ax

MOV DX,offset buf;DX = адрес буфера

MOV AH,0Ah;AH = номер функции 0Аh

INT 21h;вызов функции 0Ah

 

;Если введенную с клавиатуры строку необходимо вывести на экран, то в

;конец строки нужно записать символ $. Для этого нужно получить адрес

;буфера, узнать длину реально введенной строки и прибавить к полученному

;значению 2, т.к. первые 2 байта содержат служебную информацию. Это

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

;строки. В этот адрес и записывается символ $

MOV DХ,offset buf; DХ = адрес буфера

MOV BX,0h; ВХ = 0

MOV BL,[DХ+1]; BL = длинa строки

MOV BYTE PTR [DХ+BX+2], '$'; DХ+BX+2 - адрес, который следует

;за последним символом строки

MOV DX,offset buf; DX = адрес буфера

ADD DX,2h; прибавляем к DX число 2, т.к. первые

; 2 байта не содержат символов строки

MOV AH,9h; вызываем функцию вывода строки

INT 21h

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

mov AX,4C00h

int 21h

end start

 


Пример 4: Эта программа выводит на экран подряд два символа "А" (латинские);------------------------------------------------------------------------

masm

model small

.stack 100h

.data

start:

mov ax,@data

mov ds,ax

MOV AH,2;АН = 2MOV DL,'A';DL = 41h (код символа А)INT 21h;вызываем функцию DOS 02hMOV AH,2;АН = 2MOV DL,41h;DL = 41h (код символа А)INT 21h;вызываем функцию DOS 02h

 

mov AX,4C00h

int 21h

end start

 


Пример 5. Программа с консоли заполняет файл my_file.txt, который находится в текущей папке. Длина строки, вводимой в файл с консоли не более 80 символов. Ввод с консоли прекращается, когда в новой строке в начале вводится «пробел». (WFile1.asm)

________________________________________________________

masm

model small

.stack 100h

buf_0ah struc

len_buf db 83; длина буфера buf_0ah

len_in db 0; количество реально введенных символов строки

buf_in db 82 dup (20h); буфер для ввода строки + 0dh0ah

ends

 

.data

handle dw 0

filename db 'my_file.txt',0

buf buf_0ah <>

 

.code

start:

mov ax,@data

mov ds,ax

;------------- Открываем файл

mov ah,3dh

mov al,2

mov dx,offset filename

int 21h

jc exit

mov handle,ax

;------------- Позиционируем файловый указатель на начало файла

mov ah,42h

xor al,al

xor cx,cx

xor dx,dx

mov bx,handle

int 21h

;--------------Вводим очередную строку с клавиатуры

cycl:

lea dx,buf

mov ah,0ah

int 21h

;--------------для красоты выводим на экран символ 0аh

mov dl,0ah

mov ah,2

int 21h

 

cmp buf.buf_in,20h

je exit

 

lea si,buf.buf_in

mov al,buf.len_in; в al количество реально введённых символов

mov ah,0h

push si

add si,ax

inc si; учитываем в len_in символ 0dh

mov byte ptr [si],0ah; добавляем 0ah в конец введённой строки

;--------------вывод в файл

pop dx

mov bx,handle

add ax,2; учитываем в len_in символы 0dh0ah

mov cx,ax

mov ah,40h

int 21h

jmp cycl

 

exit:

xor ax,ax

mov ah,3eh

mov bx,handle

int 21h

mov AX,4C00h

int 21h

end start

 


Вывод на экран строки

Вход: AH=40h

BX – дескриптор файла;

СХ – Количество байт для запси;

DS:DX – указатель на область из которой записываются данные;

 

Пример 6: Вывести на консоль строку 'Stroka dlya vivoda na ekran funkcieu 40h'. (Vivod1.asm)

masm

model small

.stack 100h

.data

string db 'Stroka dlya vivoda na ekran funkcieu 40h',0

len_string=$-string

 

.code

start:

mov ax,@data

mov ds,ax

mov bx,1

mov cx,len_string

mov dx,offset string

mov ah,40h

int 21h

jc exit

jnc exit1

exit1:

xor ax,ax

mov ah,3eh

mov bx,1

int 21h

exit:

mov AX,4C00h

int 21h

end start

 


Самостоятельно на практике: Разработать программу, которая бы с консоли заполняла файл my_file1.txt в текущей папке. При этом, длина строки, вводимой в файл с консоли должна содержать не более 60 символов. После того как файл создан, в него консольно записана информация необходимо изменить файл, дописав в конец файла Вашу Фамилию, Имя, Отчество. Изменённый файл вывести на консоль.

 


Получить дату и время создания или последней модификации файла

Получить/изменить дату и время создания или модификации файла можно с помощью подфункций функции 57h.

Вход: АХ = 5700h; ВХ = дескриптор файла.

Выход: Если CF = 0: СХ = время, DX = дата.

Если CF = 1: АХ = код ошибки (CF = п. 1 — недопустимый номер подфункции в А1; 6 — недопустимый дескриптор.

Время и дата файла получаются в следующих форматах.

CX=Время DX=Дата
Биты Описание Биты Описание
15-11 Часы (0-23) 15-9 Год
10-5 Минуты 8-5 Месяц
4-0 Секунды 4-0 День

 

Установить дату и время создания или последней модификации файла

Вход: АХ = 5701h; ВХ - дескриптор файла; СХ - новое время, DX = новая дата.

Выход: Если CF = 0: СХ = время, DX = дата.

Если CF = 1 — АХ = код ошибки: 1 — недопустимый номер подфункции в Аl; 6 — недопустимый дескриптор.


Изменение характеристик файлов

Рассмотрим в качестве примера программу задания даты и времени создания файла (пример 13.4).

Пример 7. Назначение файлу даты и времени создания.

;В сегменте команд

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

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

mov AL,2

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

int 21h

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

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

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

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

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

mov сх.,0; очистим Сх

or cx,sec; добавим секунды cx=0000 0000 0000 0110

or cx,min; добавим минуты cx=0000 0001 1110 0110

or cx,hour;добавим часы cx=0110 0001 1110 0110

xor dx,dx; очистим dx

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

or dx,month;добавим месяц

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

int 21h

;В сегменте данных

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

fname db ‘MYFILE.TXT’,0; имя файла

sec dw 6; 6 секунд = 110

min dw 15*32; 15 минут =1111 => 001111 00110

hour dw 12*2048; 12 часов =1100 => 01100 001111 00110

day dw 10; 10 число

month dw 3*32; март

year dw 21*512 21 год от 1980, то есть 2001 г.

 

Для установки даты и времени создания файла используется функция 5701h. Она требует указания даты (в регистре DX) и времени (в регистре СХ) в том же формате, в котором эти данные хранятся в элементе каталога. Сдвиг составляющих даты/времени в соответствующие места осуществляется с помощью команд умножения на этапе трансляции. Например, для сдвига числа минут в группу битов 5... 10 число необходимо умножить на 25=32.


Переименование имеющегося файла

Для переименования имеющегося файла предусмотрена функция 56h. Она требует указания двух спецификаций файла - исходной, чтобы можно было его найти, и новой, присваиваемой файлу.

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

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...