Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
1. ЗАДАНИЕ НА СРС.
Разработать процедуру текстового редактора, обеспечивающую при нажатии функциональной клавиши F2 центрирование строки в выведенном на экран тексте. Редактируемой строкой считать ту, в которой размещен курсор. Вывод на экран текста в формате 5 строк на 20 столбцов, установку курсора в произвольную позицию выведенного текста, ожидание нажатия заданной функциональной клавиши и обращение к процедуре редактирования строки выполнить в технологической части программы, имитирующей внешнюю среду для разрабатываемой процедуры. Позицию курсора в странице номер 0 экрана передать в процедуру через регистр DX (DH - строка курсора, DL - столбец курсора).
2. КРАТКОЕ ОПИСАНИЕ АЛГОРИТМА.
- текст для редактирования вводится с клавиатуры (а не
определяется заранее);
- вывод происходит не на видеостраницу с номером 0,а в свободную
видеостраницу;
- при нажатии данной клавиши производится центровка строки т.е.
подсчитывается количество пробелов которое необходимо для этого
добавить к строке слева исправна
3. ТЕКСТ ПРОГРАММЫ.
.8086
.MODEL TINY
CODE SEGMENT
ASSUME CS: CODE, DS: CODE,ES:CODE
ORG 100H
BEGIN:
JMP START
color equ 0fh
Mode db?
L_Page db?
X db 0
Y db 0
Start:
mov ah,0fh
int 10h
mov Mode,al
mov L_Page,bh
;Сохраняем экран
cld
mov cx,2000
mov ax,0b800h
mov ds,ax
mov dx,cs
mov es,dx
sub si,si
mov di,offset Screen
rep movsw
mov ds,dx
mov ax,83h
int 10h
;Устанавливаем 0 страницу
mov ax,0500h
int 10h
Main:
sub ah,ah
int 16h
or al,al
jz ex_key
cmp ah,1ch
je is_enter
cmp ah,01
jne goto_xy
jmp restore
goto_xy:
push ax
mov dx,word ptr x
sub bh,bh
mov ah,2
int 10h
out_char:
pop ax
mov ah,9
mov cx,1
mov bx,color
int 10h
Control_xy:
mov dx,word ptr x
inc dl
cmp dl,80
jne Skip1
sub dl,dl
l1: inc dh
cmp dh,25
jne Skip1
sub dh,dh
Skip1:
mov word ptr x,dx
sub bh,bh
mov ah,2
int 10h
jmp Main
is_enter:
mov dx,word ptr x
sub dl,dl
jmp l1
ex_key:
cmp ah,3ch
jne l2
mov dx,word ptr X
call Center
mov dx,word ptr X
jmp Skip1
l2:
cmp ah,48h
je is_up
cmp ah,50h
je is_down
cmp ah,4bh
je is_left
cmp ah,4dh
je control_xy
cmp ah,44h
je restore
jmp main
is_up:
mov dx,word ptr x
l4: dec dh
cmp dh,0ffh
jne l3
mov dh,24
l3: jmp Skip1
is_down:
mov dx,word ptr x
jmp l1
is_left:
mov dx,word ptr x
dec dl
cmp dl,0ffh
jne l3
mov dl,79
jmp l4
Restore:
sub ah,ah
mov al,Mode
int 10h
cld
mov cx,2000
mov ax,0b800h
mov es,ax
mov dx,cs
mov ds,dx
sub di,di
mov si,offset Screen
rep movsw
mov ah, 5h
mov al,L_page
int 10h
ret
Text1 db 80 dup(' ')
TEXT db 80 dup(?)
Center proc
mov ax,160
mul dh
mov dx,0b800h
mov bx,cs
mov ds,dx
mov es,bx
mov si,ax
mov di,offset text1
mov cx,80
cld
push cx
mov al,' '
rep stosb
pop cx
loop2:
lodsw
stosb
loop loop2
std
dec di
mov cx,80
mov dx,cx
mov ds,bx
mov al,' '
repe scasb
or cx,cx
jnz l10
l11: ret
l10: cld
inc cx
mov di,offset text
repe scasb
inc cx
sub dx,cx
or dx,dx
jz l11
mov si,di
dec si
mov di,offset text1
sar dx,1
add di,dx
rep movsb
;Выводим полученную строку
mov ax,1300h
mov bp,offset text1
mov cx,80
mov dh,byte ptr y
sub dl,dl
mov bx,color
int 10h
ret
Center endp
screen db?
CODE ENDS
END BEGIN
4. ХАРАКТЕРИСТИКИ ПРОГРАММЫ И ПОЛНОТЫ ЕЕ
ТЕСТИРОВАНИЯ.
Программа была протестирована для всех возможных вариантов
размещения строки на экране. Для всех вариантов были получены
правильные результаты. В целом, эффективность программы можно
оценить как максимальная.
Дата публикования: 2015-10-09; Прочитано: 312 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!