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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.11.2008, 23:56   #1
FreeMadMan
Новичок
Джуниор
 
Регистрация: 27.11.2008
Сообщений: 2
Радость Assembler простейший текстовый редактор.

Программу написать под компилятор Турбо Ассемблера для среды ДОС.

Простейшиё редактор в котором можно писать, сохранять и загружать.
Просто на бумагу перенести.

Последний раз редактировалось FreeMadMan; 27.11.2008 в 23:59.
FreeMadMan вне форума Ответить с цитированием
Старый 28.11.2008, 00:11   #2
FreeMadMan
Новичок
Джуниор
 
Регистрация: 27.11.2008
Сообщений: 2
По умолчанию

Кто нибудь...
FreeMadMan вне форума Ответить с цитированием
Старый 28.11.2008, 19:07   #3
ams007
Пользователь
 
Регистрация: 19.11.2008
Сообщений: 35
По умолчанию

Вообще это денеХХ стоит, но у меня НУ ОЧЕНЬ хорошее настроение
Код:
.model small
.DATA
	buf   		db 512 dup(0)
	zx    		db ?
	zy    		db ?
	attr 	 	db ?
	page 		db ?
	satr 		db ?
	char 		db ?
	keycode  	db ?
	scancode 	db ?
	lname	 	db "lab. N 3",13,10,'$'
	head1 		db "Was created by",13,10,'$'
	head2 		db "students gr 02VV2",13,10,'$'
	head3 		db "Andreev M, ",13,10,'$'
	head4 		db "Bochkov A,",13,10,'$'	
	head5 		db "Golovanov A.",13,10,'$'
	head6 		db "Press Esc to exit",13,10,'$
	head7 		db "<~> all print",13,10,'$'
	head8 		db "<Tab> print",13,10,'$'
	
	pp db ?

	msg_not_ready           db      'Device not ready',13,10,'$'          
	msg_not_paper      	db      'Paper out',13,10,'$'		 
	msg_io_err         	db      'I/O error',13,10,'$'		
	msg_not_act             db      'Device not active',13,10,'$'	
	msg_tm_out              db      'Time out',13,10,'$'		

	msg_still_pr  db      'Wait printing screen...',13,10,'$'   
	msg_err_pr_5h db      'INT 5h corrupted',13,10,'$'


	buf100 db  100 dup(' '),13,10,0
		

	
	

setscreenmod macro mod
	mov ah,0
	mov al, mod
	int 10h
	endm
 
setcursel macro strnum,ox,oy
	mov ah,2
	mov bh, strnum
	mov dh, byte ptr ox
	mov dl, byte ptr oy
	int 10h
	endm

setactpage macro act
	mov ah,5
	mov al,act
	int 10h
	endm

readchar macro act
	mov ah,8
	mov bh,act
	int 10h
	mov satr,ah
	mov char,al
	endm

putchar macro symb,attr,pagenum,repeat
	mov ah,9
	mov al,symb
	mov bl,attr
	mov bh,pagenum
	mov cx, repeat
	int 10h
	endm

printf macro str
	mov ah,9
	mov dx,offset str
	int 21h
	endm

.stack 50h

.CODE


Start:
	mov     ax,DGROUP
        mov     ds,ax
	
	setscreenmod 3
	setactpage 0
	
	mov page,0
	mov attr,00011111b	
	setcursel page,5,5
	putchar 205,attr,page,40; прям линия
	putchar 201,attr,page,1; верхн лев угол
	setcursel page,5,44
	putchar 187,attr,page,1; прав верхн угол

	mov zx,6
	mov cx,15
lin11:	push cx
	setcursel page,zx,5
	putchar ' ',attr,page,40
	putchar 186,attr,page,1; верт линия
	setcursel page,zx,44
	putchar 186,attr,page,1; верт линия
	add zx,1
	pop cx
loop    lin11
	
	setcursel page,21,5
	putchar 205,attr,page,40; прям линия
	putchar 200,attr,page,1; нижн лев угол
	setcursel page,21,44
	putchar 188,attr,page,1;нижн прав угол


	mov attr,01011010b	
	setcursel page,5,47
	putchar 205,attr,page,20; прям линия
	putchar 201,attr,page,1; верхн лев угол
	setcursel page,5,67
	putchar 187,attr,page,1; прав верхн угол


	mov zx,6
	mov cx,15
lin12:	push cx
	setcursel page,zx,47
	putchar ' ',attr,page,20
	putchar 186,attr,page,1; верт линия
	setcursel page,zx,67
	putchar 186,attr,page,1; верт линия
	add zx,1
	pop cx
loop    lin12
	
	setcursel page,21,47
	putchar 205,attr,page,20; прям линия
	putchar 200,attr,page,1; нижн лев угол
	setcursel page,21,67
	putchar 188,attr,page,1;нижн прав угол



	mov attr,01011011b
	setcursel page,6,49
	putchar ' ',attr,page,10
	printf lname
	setcursel page,7,49
	printf head1
	setcursel page,8,49
	printf head2
	setcursel page,9,49
	printf head3
	setcursel page,10,49
	printf head4
	setcursel page,11,49
	printf head5
	
	mov attr,01011011b
	setcursel page,20,49
	putchar ' ',attr,page,17
	printf head6

	mov attr,00011110b
	setcursel page,14,49
	putchar ' ',attr,page,17
	printf head7
	
	mov attr,00011110b
	setcursel page,15,49
	putchar ' ',attr,page,17
	printf head8

	
	
;; до этого - рисование было. далее - суть...

	mov attr,00011101b; ставим цвет букв и фона
	mov zx,6	; началбная позиция курсора
	mov zy,7
	setcursel page,zx,zy; вот тут он собственно и ставится
	
       
	mov bx,offset buf100
	push bx
c1:	mov ax,0; начaло цикла опроса клавиш
	int 16h
	mov keycode,al
	mov scancode,ah; читаем из буфера клавиатуры код символа и сканкод
ams007 вне форума Ответить с цитированием
Старый 28.11.2008, 19:08   #4
ams007
Пользователь
 
Регистрация: 19.11.2008
Сообщений: 35
По умолчанию

продолжение...
Код:
;---------------------стрелочки и печать-------------------
	cmp keycode,0   ;  проверяем, не стрелочки ли нажаты(у них всех код клавиши - 0)
	jne if000		; если нет, то на проверку Интера

down:	cmp scancode,80	; если вниз( сканкод - 80)
	jne up		; если нет, то может вверх?
	cmp zx,20	; проверка нижней границы
	je c1		; если достигнута, то ничего не делаем
	add zx,1	; если нет, то позицию курсора на 1 вниз
	
up:	cmp scancode,72 ; ... аналогично
	jne left
	cmp zx,6
	je c1
	sub zx,1

left:	cmp scancode,75
	jne right
	cmp zy,7
	je c1
	sub zy,1

right:	cmp scancode,77
	jne else
	cmp zy,42
	je c1
	add zy,1

else:	setcursel page,zx,zy  ; если не стрелочки, а другие кнопки с кодом 0 ( ну там Инсерт, Делет, Хоум, Энд и тд),
	jmp c1		      ;то просто фиксируем курсор, где он был, и на опрос кнопок сначала
if000:	cmp keycode,9
	jne if00

	pop bx
	
	mov bx,offset buf100
	push 83
	push bx
	call printbuf
	mov keycode,27
	jmp if1


if00:	cmp keycode,96
	jne if0
	jmp allprint
;---------------------если Enter----------------------------
if0:	cmp keycode,13  	;у Интера код 13
	jne if1			; если нет, то на след. проверку

	pop bx
	mov byte ptr [bx],13
	inc bx
	mov byte ptr [bx],10
	inc bx
	push bx

	mov keycode,' '		; если да, то надо перевести курсор в начало след. строки
	cmp zx,20		; а если строка последняя
	je ent20
	add zx,1
	mov zy,6
	jmp if1
ent20:	sub zy,1		; то не надо
;--------------------если ESC------------------------------
	if1:		; если Эск, то выход из пр-мы
	cmp keycode,27
	jne if3
	mov     ax,4C00h
	int     21h
;-----------------если бекспейс-----------------------------
	if3:              ; если он, то надо стирать
	cmp keycode,8
	jne c2;		; если нет, то см далее...
	mov keycode,' '	; код кловиши ставим равным пробелу. далее им будем затирать
	cmp zy,7	; и опять же куча проверок на границы поля. Кстати они такие: верхн лев угол - 6,7,  нижн прав - 20, 42  вроде
	jne notleft
	cmp zx,6
	jne notup

	sub zy,1
	jmp c2


notup:	sub zx,1
	mov zy,42

	setcursel page,zx,zy
	putchar keycode,attr,page,1
	jmp c1


notleft:sub zy,1
	setcursel page,zx,zy
	putchar keycode,attr,page,1
	sub zy,1

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

	c2:			; если введенное значение - ни одно из вышеперечисленных,то
	cmp zy,43		; опять проверить границы поля ввода
	jne c3
	sub zy,1

c3:	cmp zy,42
	jne next
	cmp zx,20
	jne not20
	putchar keycode,attr,page,1
	jmp c1
not20:	add zx,1
	mov zy,6

next:	putchar keycode,attr,page,1	; собственно вывести этот символ
	add zy,1
	setcursel page,zx,zy

	pop bx
	mov byte ptr [bx],al
       	inc bx
	push bx
       

 	
jmp c1					; зациклить
;=================================
allprint:

        mov ax,0
        mov es,ax
        mov al,es:[500h]
        cmp al,0
        je  all_ok
        cmp al,1
        je  still_print
        cmp al,2
        je  err_5h
        jmp all_ok

still_print:
        mov ah,9
        mov dx,offset msg_still_pr 
        int 21h
        jmp allprint
ams007 вне форума Ответить с цитированием
Старый 28.11.2008, 19:08   #5
ams007
Пользователь
 
Регистрация: 19.11.2008
Сообщений: 35
По умолчанию

и еще...
Код:
err_5h:
        mov ah,9
        mov dx,offset msg_err_pr_5h 
        int 21h
        jmp allprint

all_ok:
        int 5h

	mov     ax,4C00h               
    	int     21h 
;============================
print:;	mov ah,1
;	mov dx,0
;	int 17h
;;	;test ah,01010000b
;;	mov zx,6
;;	mov zy,7
;;
;;	mov cx,14
;;nstr:	
;;	push cx
;;	mov cx,36
;;nstolb: setcursel page,zx,zy
;;	readchar page
;	mov ah,0
;	mov al,char
;	int 17h
;	test ah,10101001b
;	jz err0
;	add zy,1
;	loop nstolb
;	add zx,1
;	pop cx
;;	loop nstr
;	jmp q1



q1:	mov     ax,4C00h               
    	int     21h 

printbuf proc
ARG string:word, num:word
        push bp
        mov  bp,sp
        push bx cx dx

        mov bx,string
        mov cx,num

prstr:
        mov ah,0
        mov al,[bx]
        mov dx,0;LPT_PORT
        int 17h

        cmp al,0Dh
        je  pr_test1
        jmp pr_test2
pr_test1:
        cmp al,0Ah
        je  pr_end

 
pr_test2:
        test ah,01000000b
        jz pr_test3
        mov ah,2
        mov dx,0;LPT_PORT
        int 17h
        jmp pr_test2

pr_test3:

        test ah,10000000b
        jz  pr_test4

        mov ah,9
        mov dx,offset msg_not_ready
        int 21h
        mov al,1        
        jmp pr_end


pr_test4:
        test ah,00100000b
        jz  pr_test5

        mov ah,9
        mov dx,offset msg_not_paper      	
        int 21h
        mov al,1        
        jmp pr_end


pr_test5:
        test ah,00100000b
        jz  pr_test6

        mov ah,9
        mov dx,offset msg_io_err         	
        int 21h
        mov al,1       
        jmp pr_end


pr_test6:
        test ah,00000001b
        jz  pr_ok

        mov ah,9
        mov dx,offset msg_tm_out              
        int 21h
        mov al,1        
        jmp pr_end

pr_ok:

        inc bx
        loop prstr

pr_end:
        pop  dx cx bx
        pop  bp
        ret  4
printbuf endp


END Start

END
ams007 вне форума Ответить с цитированием
Старый 28.11.2008, 19:09   #6
ams007
Пользователь
 
Регистрация: 19.11.2008
Сообщений: 35
По умолчанию

разбрайся сам...)))
ams007 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Текстовый редактор Славный Общие вопросы Delphi 3 02.07.2008 23:17
Текстовый редактор Михаил Юрьевич Общие вопросы Delphi 8 10.04.2008 20:17
Текстовый редактор Михаил Юрьевич Общие вопросы Delphi 7 04.04.2008 22:54
Текстовый редактор. GPhantom Общие вопросы C/C++ 4 02.11.2007 21:24