Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер
Регистрация

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

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Ответ
 
Опции темы
Старый 22.01.2010, 11:42   #1
Billy Spleen
Пользователь
 
Регистрация: 22.01.2010
Сообщений: 11
По умолчанию Вывод без лишних символов

; провеярем чтобы число было из диапозона от 0 до 9

cmp al, 30h
jb pos
cmp al, 39h
ja pos
xlat
mov a[si], al
inc di ; запоминаем колличество разрядов числа
inc si
jmp pos

В данном фрагменте программы алгоритм проверяет что бы вводимое с клавиатуры число было из диапозона от 0 до 9. Если оно не соответствует этому условию возвращаемся на новый ввод. Это самое "неправельное" число никуда при этом не записывается но появляется на экране. Как сдалать так что бы оно не появлялось на экране , а просто шел нового числа ввод ?
Billy Spleen вне форума Ответить с цитированием
Старый 22.01.2010, 12:01   #2
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,155
По умолчанию

Billy Spleen
По приведенному фрагменту видно, что идет проверка на диапазон 0-9 а где происходит вывод осталось "за кадром" поэтому как можно советовать чтобы
Цитата:
Сообщение от Billy Spleen
число никуда при этом не записывается но появляется на экране. Как сдалать так что бы оно не появлялось на экране, а просто шел нового числа ввод?
Mikl___ вне форума Ответить с цитированием
Старый 24.01.2010, 09:08   #3
Billy Spleen
Пользователь
 
Регистрация: 22.01.2010
Сообщений: 11
По умолчанию

Поясню. Незнаю поймет кто нибудь или нет что хотел сказать.

При вызове функции Dos по вводу чисел с клавиатуры открывается консоль или диалоговое окно (незнаю как правельно его назвать) где отображаются вводимые с клавиатуры символы. Так вот, если символ из нужного диапозона то он записывается по адрусу a[si], а есле нет то просто висит в al и перезаписывается слудующим символом. Проблема в том что все что вводишь с клавиатуры отображается в этой окне. Мне надо что бы символы которые не из диапозона 0-9 не отображались в этом окне.
Billy Spleen вне форума Ответить с цитированием
Старый 25.01.2010, 03:42   #4
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,429
По умолчанию

Код:
MODEL SMALL
STACK 256
.DATA
	a db '$$$$$$$$$$$$$$$'

.CODE
Start:
	mov ax,@data
	mov ds,ax
	
	xor	si, si
pos:
     	mov  ah,08h
	int  21h
	cmp al, 0Dh
	je end
	cmp al, 30h
	jb pos 
	cmp al, 39h
	ja pos
	mov a[si], al
	inc si
      	mov  dl,al
     	mov  ah,02h
	int  21h
	jmp pos
end:

	
	mov  dl,10
	mov ah,02h        
      	int  21h
      	mov  dl,13
     	mov ah,02h
	int  21h

	lea dx,a
	mov ah,09h
	int 21h

	mov ah,04Ch 	
	mov al,0h 	
	int 21h 	
End Start
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru
Ulex вне форума Ответить с цитированием
Старый 25.01.2010, 10:57   #5
Billy Spleen
Пользователь
 
Регистрация: 22.01.2010
Сообщений: 11
По умолчанию

Спасибо большое, работает, но не у меня (в моей программе конечно) ))). У меня почему то не хочет вводить числа вообще))). Может потому что у меня TASM?

Последний раз редактировалось Billy Spleen; 25.01.2010 в 13:47.
Billy Spleen вне форума Ответить с цитированием
Старый 25.01.2010, 11:19   #6
Goodwin98
equ asm
Участник клуба
 
Аватар для Goodwin98
 
Регистрация: 02.05.2009
Сообщений: 1,605
По умолчанию

Цитата:
У меня почему то не хочет вводить числа вообще)))
Что это означает ?
Какой вопрос - такой ответ. Не забываем пользоваться поиском, гуглом.
Помощь в выполнении работ по ассемблеру ICQ:2725322O4
Goodwin98 вне форума Ответить с цитированием
Старый 25.01.2010, 11:43   #7
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,155
По умолчанию

Billy Spleen
Для ввода строки символов с клавиатуры без вывода ее на экран (например, для ввода пароля) применяется функция 3Fh прерывания 21h. На адрес памяти куда будет помещена строка указывают регистры DS:DX. Поместите в регистр BX ноль, в регистр CX — максимальное число символов и вызывайте прерывание 21h
Код:
mov ah,3Fh			;номер функции
mov dx,offset BUFFER	;адрес буфера
mov bx,0
mov cx,51
int 21h
Mikl___ вне форума Ответить с цитированием
Старый 25.01.2010, 11:53   #8
Goodwin98
equ asm
Участник клуба
 
Аватар для Goodwin98
 
Регистрация: 02.05.2009
Сообщений: 1,605
По умолчанию

Mikl___, но ведь при этом все символы выводятся.
Какой вопрос - такой ответ. Не забываем пользоваться поиском, гуглом.
Помощь в выполнении работ по ассемблеру ICQ:2725322O4
Goodwin98 вне форума Ответить с цитированием
Старый 25.01.2010, 12:57   #9
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,155
По умолчанию

Billy Spleen
Для скрытого вывода можно изменить цвет символов, чтобы он был равен цвету BackGround'а
Mikl___ вне форума Ответить с цитированием
Старый 25.01.2010, 13:29   #10
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,155
По умолчанию

Billy Spleen
Способ второй:
Код:
.model tiny
.286
.code
org 100h
start:	mov ax,3h; очистили экран
	int 10h
	mov di,offset BUFFER	;адрес буфера
        mov ah,8             ;номер функции
main_loop: int 21h; получили очередной символ
	stosb; отправили его в буфер
	cmp al,0Dh; если нажали на Enter то вышли из цикла
	jne main_loop
	mov byte ptr [di-1],'$'; вместо символа 0Dh поставим символ конец строки
	mov ah,9; выводим введенную строку на экран
	mov dx,offset BUFFER
	int 21h
	mov ah,0
	int 16h
	retn
BUFFER db 50 dup (0); место под строку символов
end start
Способ третий: Все функции DOS вывода на экран используют устройство STDOUT, стандартный вывод. Это позволяет перенаправлять вывод программы в файл или на стандартный ввод другой программы. Например, если написать в командной строке hello-1.com > hello-1.out
то на экран ничего выдано не будет, а в текущем каталоге появится файл hello-1.out, содержащий строку «Hello World!»
Способ четвертый: установить курсор за пределы экрана и тогда при вводе строки ничего не будет видно
Код:
; Вычислим положение курсора в позиции 25 строка 0 столбец
 mov al,25 ; в al=25 строка
 mov ah,80 ; 80 колонок в строке
 mul ah  ; при умножении получим позицию курсора в ax 
 mov bl,al ; сохраним младший байт курсора
 mov dx,3d4h ; регистр управления курсором
 mov al,0eh ; устанавить старший байт курсора
 out dx,ax ; устанавливаем
 inc al  ; установить младший байт курсора
 mov ah,bl ; записываем в ah младший байт курсора
 out dx,ax ; устанавливаем
; Теперь курсор за пределами экрана

Последний раз редактировалось Mikl___; 25.01.2010 в 13:42.
Mikl___ вне форума Ответить с цитированием
Ответ
Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удаление лишних символов из Memo NSV Общие вопросы Delphi 10 23.11.2012 08:38
Как без лишних функций записать файл в string? TwiX Общие вопросы Delphi 10 24.08.2009 12:16
СИ, вывод массива символов ray13 Помощь студентам 4 15.04.2009 23:04
Удаление лишних пробелов. Ввод/вывод в файл. Иван 883 Помощь студентам 13 31.03.2009 19:39
Вывод символов в строке Karl_Karlovi4 БД в Delphi 12 03.06.2008 13:31