Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.11.2010, 19:10   #1
Flyguy06
Новичок
Джуниор
 
Регистрация: 23.11.2010
Сообщений: 2
Вопрос Текстовый редактор

Помогите,может у кого есть.Написать программу-примитивный текстовый редактор. программа должна вводить информацию с клавиатуры и отображать ее на экране монитора. Программа должна выполнять нажатия на клавиши Enter, BackSpace, Delete, а так же ←,↑,→ и ↓,и сохранение в файл. Под TASM

Помогите пожалуйста))
У меня есть еще код,но там не полный редактор.


Код:
; редактор
.model small
.stack 100h
.data
	InfoMess db 'Text editor.',0ah,0dh
		 	 db 'Any key - run programm',0ah,0dh,'$'
	Xmax equ 80  
	Ymax equ 25
	
	cOff dw 0
.code

MoveCursor proc; dh-стр, dl-стл
	cmp dl,0
	jge mc_next1; >=0
	mov dl,Xmax-1
	dec dh
	cmp dh,0
	jge test_cur; >=0
	xor dx,dx
	jmp test_cur		
mc_next1:
	cmp dl,Xmax-1 
	jle mc_next2 ;<=
	xor dl,dl
	inc dh
	cmp dh,Ymax-1
	jle	mov_cur;<=
	mov dl,Xmax-1
	mov dh,Ymax-1
	jmp test_cur	
mc_next2:	
	cmp dh,0
	jge mc_next3;>=
	xor dh,dh
	jmp test_cur
mc_next3:	
	cmp dh,Ymax-1
	jle test_cur;<=
	mov dh,Ymax-1	
test_cur:
	call AddrSym
	cmp si,bp
	jg no_move
mov_cur:
	xor bx,bx
	mov ax,0200h
	int 10h
	ret
no_move:
	mov dx,bx
	ret
MoveCursor endp

DelSym proc ;dh-стр, dl-стл Удаление символа с позиции курсора
	call AddrSym
	;проветить нажата ли инсерт или нет
	;если нет
	dec bp
	mov cx,bp
	sub cx,si
	mov di,si
	inc si
	shl si,1
	shl di,1
	push ds
	push es
	pop ds
	cld
	rep movsw
	pop ds
	mov word ptr es:[di],0720h
	ret
DelSym endp

InsSym proc; dh-стр, dl-стл, al-символ Вставка симола в позицию курсора
	cmp bp, 80*25
	jae  exit_InsSym
	call AddrSym
	;проветить нажата ли инсерт или нет
	;если нет
	mov cx,bp
	sub cx,si
	
	jcxz no_sym
	push si
	mov di,bp
	mov si,bp
	dec si
	shl si,1
	shl di,1
	push ds
	push es
	pop ds
	std
	rep movsw
	pop ds
	pop si
no_sym:
	shl si,1
	mov word ptr es:[si],ax
	inc dl
	inc bp
	call MoveCursor	
exit_InsSym:	
	ret
InsSym endp

AddrSym proc; dh-стр, dl-стл; SI адрес в поле 80х25
	push cx
	push ax
	push bx

	mov si,dx
	xor ax,ax
	xor bx,bx
	and si,00ffh
	mov bl,dh
	mov al,dh
	shl al,1
	shl al,1
	mov cx,4
	add ax, bx
	shl ax, cl
	
	add si,ax

	pop bx
	pop ax
	pop cx
	ret
AddrSym endp

.startup
	mov dx,offset InfoMess ; вывести информационное сообщение
	mov ax,0900h
	int 21h
	mov ax,0c07h ; ожидаем нажатие клавиши для запуска программы
	int 21h
run:
	mov ax,0f00h ;чтение информации о режиме экрана
	int 10h
	mov ah,bh 
	push ax
	
	mov ax,0003h ; 3 режим 80х25 
	int 10h
;	mov ax,0500h ; 2 страница активная
;	int 10h

	mov ax,0b800h
	mov es,ax
	xor dx,dx;начальное положение курсора
	xor bp,bp;счетчик символов 
getchar:
	mov ax,0700h ; ожидаем нажатие на клавишу
	int 21h

	cmp al,27;Esc	
	jne edit
	jmp exit
	
edit:
	mov bx,dx;запомнить старое положение курсора
	cmp al,8; BS
	jne edit0
	test dx,dx
	jz getchar;край экрана
		
	dec dl;сдвинуть курсор влево 
	call MoveCursor
	
	call DelSym;удалить символ под курсором
	jmp getchar
edit0:	
	cmp al,20h
	jb edit1
	cmp al,7dh
	ja edit1
	call InsSym 
	jmp getchar

edit1:
	cmp al,0; расширенный ASCII
	jne getchar
	mov ax,0700h
	int 21h	
	
	;mov bx,dx;запомнить старое положение курсора
	;cmp al,53;Del
	
	cmp al,48h; стрелка вверх
	jne kDown	
	dec dh
	jmp lSetCursor
kDown:
	cmp al,50h; стрелка вниз
	jne kLeft
	inc dh 
	jmp lSetCursor
kLeft:	
	cmp al,4bh; стрелка влево
	jne kRigth
	dec dl
	jmp lSetCursor
kRigth:
	cmp al,4dh; стрелка вправо 
	jne getchar
	inc dl

lSetCursor:
	call MoveCursor
	jmp getchar ; вернутся к опросу клавиатуры
exit:
	pop dx ;восстанавливаем режим экрана
	mov ax,0000h
	mov al,dl
	int 10h
	mov ax,0500h ;восстанавливаем активную страницу
	mov al,dh
	int 10h
exit1:
	mov ax, 4c00h ; закончить программу
	int 21h
end
Flyguy06 вне форума Ответить с цитированием
Старый 23.11.2010, 22:27   #2
alexcoder
Форумчанин
 
Регистрация: 31.05.2009
Сообщений: 786
По умолчанию

Я когда-то делал, но там есть лишние функции: загрузка, сохранение, может еще что, уже не помню.
Помощь с программами:
vk.com/alexcoder1
e-mail: informatik101@mail.ru
alexcoder вне форума Ответить с цитированием
Старый 24.11.2010, 13:26   #3
Flyguy06
Новичок
Джуниор
 
Регистрация: 23.11.2010
Сообщений: 2
По умолчанию

Цитата:
Сообщение от alexcoder Посмотреть сообщение
Я когда-то делал, но там есть лишние функции: загрузка, сохранение, может еще что, уже не помню.
Мне бы как раз подошло.Если он под TASM написан.Был бы благодарен.
Flyguy06 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Текстовый редактор в Си joks Общие вопросы C/C++ 1 17.11.2010 00:49
C текстовый редактор djbah Помощь студентам 2 24.09.2010 17:13
Текстовый редактор Яр|/||< (^_^) Общие вопросы Delphi 7 22.12.2009 20:01
Текстовый редактор Михаил Юрьевич Общие вопросы Delphi 7 04.04.2008 22:54