Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
my 4.docx
Скачиваний:
1
Добавлен:
16.12.2018
Размер:
283.89 Кб
Скачать

Цель работы – выполнение задач ввода-вывода и интерпретации управляющей программы в системах ЧПУ оборудованием, разработка интерпретатора управляющей программы в системах ЧПУ.

Рабочее задание

  1. Разработать и осуществить ввод управляющей программы с клавиатуры и вывод на дисплей.

  2. Разработать и осуществить ввод управляющей программы из файла и вывод на дисплей.

  3. Разработать интерпретатор управляющей программы в системах числового программного управления.

Выполнение работы

1. Ввод-вывод управляющей программы с клавиатуры.

Zad1: ClearScreen

Locate 0,0 ;курсор в позицию 0,0

tt1: ClearScreen

Locate 0,0 ;курсор в позицию 0,0

Call _Wwod ;ввод текста

Locate 0,1 ;курсор в позицию 0,1

Call _Wiwod ;вывод введенного текста

Locate 0,2 ;курсор в позицию 0,2

KeyWait

PrintXY 0,4,RT

KeyWait

;ClearScreen

cmp al,'y'

jz tt1

cmp al,'Y'

jz tt1

KeyWait

jmp menu ;выход в меню программы

;================================

Результат выполнения:

Использованные процедуры:

Proc _Wwod ;процедура

push ax ;сохранить

push dx ;регистры

CursorOn ;включить курсор

mov di,OFFSET Bufer ;адрес приемника символов

mov cx,0 ;cчетчик введенных символов

@@1: mov ah,0 ;ввод символа с клавиатуры

int 16h ;в регистр al

cmp al,0 ;признак функциональной клавиши

jz @@1 ;не принимать функциональные клавиши

cmp al,08h ;это клавиша Backspace (← удалить )?

jnz @@2 ;если нет, дальше

cmp cx,0 ;да, обрабатываем удаление, все удалено?

jz @@1 ;да, за новым символом

Tout 20h ;нет, надо удалить: код пробела → на экран

Tout 8 ;и шаг назад

dec cx ;уменьшить число введенных символов

dec di ;и счетчик текущего адреса в буфере

mov [byte ptr di],20h ;код пробела в буфер(косвенно)

jmp @@1 ;за новым символом

@@2: cmp al,13 ;это enter?

jnz @@4 ;если нет, дальше

mov [byte ptr di],al ;да, символ →в текстовый буфер

inc cx ;увеличить адрес знакоместа

jmp short @@5 ;да, на завершение

@@4: mov [byte ptr di],al ;не Enter, символ в буфер

inc cx ;позиция на экране

inc di ;позиция в буфере

jmp @@1 ;за очередным символом

@@5: mov [LenStr],cx ;длина текста с учетом Enter

pop dx ;восстановить измененные

pop ax ;регистры

ret ;завершение ввода

ENDP

;===================================

Proc _Wiwod

mov ah,40h ;вывести на экран из буфера символов

mov bx,01 ;в количестве, заданном в сх

mov dx,OFFSET Bufer ;из буфера с именем Bufer

int 21h ;с помощью прерывания с номером 21h

ret

ENDP

;================================

2. Ввод-вывод управляющей программы из файла.

Zad2:

Locate 0,0 ;позиция курсора

Call _FName ;вводим имя файла

Locate 0,1 ;курсор, завершение ввода

mov ah,40h ;вывести на экран из буфера символов

mov bx, 01 ;в количестве, заданном в сх

mov dx,OFFSET FName ;из буфера имя файла

int 21h ;с помощью прерывания с номером 21h

;завершен ввод имени файла

KeyWait ;останов для прочтения введенного имени файла

Call _FileRead ;читаем файл с диска в BuferData

cmp [Er],0 ;ошибки есть?

jz cle ;если нет, дальше; иначе

ClearScreen ;чистка экрана и

jmp menu ;на меню после ошибки чтения файла

;выводим его на экран, если нет ошибок в чтении файла

cle: Locate 0,3 ;курсор

mov cx, [FileLen] ;выводим на экран файл с УП

mov ah,40h ;из буфера BuferData

mov bx,01 ;в количестве, заданном в сх

mov dx,OFFSET BuferData ;адрес источника

int 21h ;с помощью прерывания с номером 21h

KeyWait ;останов для просмотра вывода

jmp menu ;выход в меню программы

;================================

Необходимые данные в сегменте данных:

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

ExSg dw 0 ;хранение регистра ES

FName db 63 DUP (0) ;поле имени (пути) файла

BuferData db 4096 DUP(0) ;буфер для размещения файла

FileLen dw 0 ;длина файла

Handle dw 0 ;номер (дескриптор) файла

Hand dw 0

FileNumber dw 0

LenStr dw ;длина строки

RT db `Введете следующий кадр? Да – Y$`

;==================================

Результат выполнения:

Использованные процедуры:

Proc _FileName ; ввод имени файла в буфер FName

CursorOn ;установить курсор

mov di,OFFSET FName ;начальный адрес буфера

;ввод имени файла с УП

mov cx,0 ;cчетчик удалений

wwa: mov ah,01 ;ввод символа с эхо

int 21h ;от клавиатуры

cmp al,0

jz wwa ;не принимать функциональные клавиши

@@1:

cmp al,08h ;это Backspace?

jnz @@2

cmp cx,0 ;да, все удалено?

jz wwa ;да, за новым символом

Tout 20h ;надо удалить, пробел на экран

Tout 8 ;и шаг назад

dec cx ;уменьшить счетчик после удаления

dec di ;и счетчик текущего адреса в буфере УП

mov [byte ptr di],20h ;код пробела в буфер

jmp wwa ;за символом

@@2: cmp al,13 ;это enter ?

jnz @@3 ;нет, уйти

mov [byte ptr di],0 ;имя файла заканчивается нулем

jmp short mm ;да, на завершение

@@3: cmp al,' ' ;это пробел?

jnz @@4

jmp wwa ;да пробел, не обрабатывать

@@4: mov [di],al ;нет, символ в буфер

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]