Страница 1 из 2

текстовый редактор на Асме

Добавлено: 25 апр 2008, 17:10
Fox_UnkinD
Мне нужно написать тектовый редактор на ассемблере..
если есть какие нибуть алгоритмы,исходники или мысли о программе напишите пожалуйста)
заранее благодарен.

Re: текстовый редактор на Асме

Добавлено: 25 апр 2008, 23:17
airyashov
Есть программа, только очень ограниченная, позволяет вводить символы, работает с одним экраном (80*25), навигация по тексту стрелки, удалять BackSpace, если есть желание разбираться давайте майл, в программе три экрана где-то текста.

Re: текстовый редактор на Асме

Добавлено: 26 апр 2008, 12:40
Fox_UnkinD
Спасибо! Fox_ne@mail.ru
с удовольствием приму еси ещё что то есть)

Re: текстовый редактор на Асме

Добавлено: 26 апр 2008, 17:14
Serge_Bliznykov
ну, редактор не такая уже и элементарная задача..
тем более на асме.
ну вот, порыскал по сети чуток..
может пригодятся ссылочки:
http://programmerts.by.ru/assembler/ishod/
http://mc-black.narod.ru/x3mEd.htm

Re: текстовый редактор на Асме

Добавлено: 08 май 2008, 20:11
mc-black
Собственно вот и сам автор этого безобразия:
http://mc-black.narod.ru/x3mEd.htm
Если его надо сдать как курсовик, то я бы на вашем месте убрал из него поиск по тексту - там сильно глючило и вообще сам проект давно заброшен. Есть редактор в знаменитых пособиях iczellion'a и ещё пяток - не меньше - редактором можно найти в исходниках на васме (wasm.ru)

Re: текстовый редактор на Асме

Добавлено: 08 май 2008, 20:13
mc-black
Что меня часто убивает, это то, что люди сами плохо понимают (или не дают знать), на какую платформу они хотят получить готовое решение: dos или win32 или экзотику ;)

Re: текстовый редактор на Асме

Добавлено: 10 май 2008, 15:41
Draeden
Я мог бы выставить свой редактор (70kb, tasm) если интересно. Он может прокручивать текст, менять цвет, есть коммандная строка и т.п.

P.S. если бы мне позволили прикрепить файл :(

Re: текстовый редактор на Асме

Добавлено: 21 май 2008, 00:20
Fox_UnkinD
70 kb мощно конечно)))))) не разберусь))

Re: текстовый редактор на Асме

Добавлено: 21 май 2008, 13:50
Fox_UnkinD
; редактор
.model small
.stack 100h
.data
InfoMess db 'Text editor.',0ah,0dh
db 'Any key - run programm',0ah,0dh,'$'
Xmax equ 80
Ymax equ 25
enter db 0ah,0dh
cOff dw 0
.code

MoveCursor proc
cmp dl,0
jge mc_next1
mov dl,Xmax-1
dec dh
cmp dh,0
jge test_cur
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
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
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

Ent proc
mov ah, 07h
int21h
cmp ah, enter
je bl1
bl1:

cmp

Ent endp

AddrSym proc
push cx
push ax
push bx

mov si,dx
xor ax,ax; =0
xor bx,bx; =0
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
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
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
вот прога...сюда надо вставить выход по клавише,переход на новуцю строку по нажатию enter...и много ли будет кода для подключения возможности выделения\копипаста? и ещё вопрос в сохранении,открывании файла,много это работы?
заранее благодарю)

Re: текстовый редактор на Асме

Добавлено: 14 дек 2009, 11:18
zapredelniy
Ребята выручайте, мне нужна блок-схема данной программы (исходник выше)___он мне как раз подходит. И комментари к коду...чтобы для простого смертного как я было понятно, что происходит на каждом этапе.

Разумеется за вознаграждение :)