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

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

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.04.2011, 12:20   #1
Ael
Пользователь
 
Регистрация: 06.09.2010
Сообщений: 11
По умолчанию Вывод информацию на экран.

Здравствуйте! Прошу помочь с нахождением ошибки. Программа делает следущее - при вводе с клавиатуры печатает введеный символ на экране в позиции 5.5 Белым по синему. При нажатии функциональной клавиши - выполняет то, что определенно для этой функ. клавиши.
код:



Код:
.386p
stk	segment stack use16 'STACK'
	db 64 dup(?)
stk	ends
dseg	segment para public use16 'DATA'
tab	label	byte
        db	72			;код клавиши «стрелочка вверх» 
        dw	offset	cseg:up
	db	3Bh 		
	dw	offset  cseg:exi
        db      50h
        dw      offset cseg:bot  
dseg	ends
cseg	segment para public use16 'CODE'
	assume cs:cseg,ss:stk,ds:dseg
prog	proc	far
	push	ds
	push	0
	mov	ax,dseg
	mov	ds,ax
	call	diag_line
	ret
prog	endp

diag_line	proc	near

        push	ax
	push	bx
	push	cx
	push	dx
	
	mov	ah,15
	int	10h   
	mov	ah,0
	mov	al,2
	int	10h


        mov dh, 5
        mov dl, 5
        mov cx,1

Kla:    
        mov ah,2 
        int 10h
        
        mov ah,2 
        int 10h
         
        mov	ah,00h			; ввод с клавиатуры
	int	16h
	cmp	al,0			; если код расширенный, то  al = 0, иначе там ASCII-код
	je	func	
	jmp	simv

func:    lea	bx,tab  		;загрузить bx адресом начала таблицы

prov:	cmp byte ptr [bx],0		; конец таблицы?
	je	kla			; такой команды в таблице нет 
	cmp	ah,[bx]			; очередное сравнение с введенным кодом
	je	pr			; совпало, перейти к нужной процедуре
	add	bx,3			; не совпало, адрес следующего кода в таблице
	jmp	prov	

simv:   mov cx,1  
        mov ah,2
        int 10h
        mov ah,9
        mov bl, 017h
        int 10h
     

pr:	inc	bx
        call	word ptr[bx]
        cmp cx,20
        je en1   
        jmp Kla
        

en1:	pop	dx
	pop	cx
	pop	bx
	pop	ax
	ret

bot	proc near
        inc dh
        ret
bot	endp

up	proc	near        
        dec dh                                              
	ret
up	endp

exi	 proc near
         mov cx,20
	 ret
exi	 endp
            

diag_line	endp
cseg	ends
	end	prog
хмм, не понял как вставить в сообщение код именно асма так что сделал хтмл. Подскажите кто знает как.

В программе определенно пока три функц. клавиши - стрелочка вниз, вверх и f1. На ф1 - выход из программы. На стрелке вниз - смещение курсора вниз, на стрелке вверх - смещение курсора вверх.

Проблема: при нажатии стрелки вверх курсор прыгает вверх, но дальше ничего не печатается. А вот если нажать вверх еще один раз то пропечатается и следующая нажатая клавиша и та которая была нажата последней перед повторным нажатием стрелки вверх. При нажатии вниз курсор послушно прыгает вниз и можно печатать дальше. И хотя реализованы они почти идентично - вниз работает, а вверх нет :] Вопрос - что не так? Да, самое интересное, в отладчике программа исправно работает. Мне думается что проблема или в перерисовке экрана или в прерываниях, но тогда почему при двойном нажатии "вверх" все работает? Заранее спасибо.
p.s. При многократных нажатиях букв курсор никуда не двигается - так и должно быть.

Последний раз редактировалось Serge_Bliznykov; 02.04.2011 в 12:32.
Ael вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
вывод на экран Nikolai_90 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 11 02.05.2012 09:25
Вывод на экран bookkc Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 5 07.10.2010 10:59
Создать файл записей (таблицу) и вывести на экран информацию о людях (имя, год рожденя, день рождения) пепелаЦО Паскаль, Turbo Pascal, PascalABC.NET 3 24.05.2009 12:15
Вывод на 2-ой экран DShiller Общие вопросы Delphi 0 26.05.2008 15:25