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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.10.2013, 09:41   #1
Eclipse_Me
Пользователь
 
Регистрация: 16.10.2013
Сообщений: 11
Печаль Запись в переменную

Подскажите пожалуйста, как организовать ввод с клавиатуры строки и последующую запись ее в переменную, чтобы потом уже работать непосредственно с ней?
У меня есть код, который производит манипуляции со строкой, но тогда, когда строка объявлена в сегменте данных.
Вот, нужно ее с клавиатуры вводить... HELP!
Код:
masm
model small

.data
Mystr	db	's sss shahh hd d adhh' 	; Исходная строка.
minb db	?					; Наиболее часто встречающийся символ.   
sum db	?
.code
;------------Процедуры_начало------------
compare proc 
	cmp al, 10
	jl  @@metka
	add al, 37h         
	mov dl, al
	mov ah, 02h
	int 21h        
	ret
@@metka:
	add al, 30h  
	mov dl, al
	mov ah, 02h
	int 21h     
    ret
endp
vivod_chislo proc
	mov AL, sum  
	and al, 0f0h
	ror al, 4     
	call compare 
	mov al, sum
	and al, 0fh 
	call compare      	
	ret
endp
calc proc
	mov SI, 0							;j
	mov DI, 0							;i
	mov AL, 0							;sum
	mov CL, 0FFh						;min
@while_OUT: 
	cmp Mystr[DI], 0 
	je @EndWhile_OUT
	mov SI, 0
	mov AL, 0
@while_IN:
	mov BL, Mystr[SI]
	cmp BL, 0 
	je @EndWhile_IN
	mov BL, Mystr[DI]
	cmp Mystr[SI],BL; 
	jne @IfNot_1; 
	inc AL
@IfNot_1:
	inc SI
	jmp @while_IN
@EndWhile_IN:
	cmp CL, AL 
	jna @IfNot_2 
	mov CL, AL
	mov BL, Mystr[DI]
	mov minb, BL
@IfNot_2:
	inc DI
	jmp @while_OUT
@EndWhile_OUT:
	dec AL
	mov sum, AL
	ret
endp
vivod_bukva proc
	mov DX,0
	mov dl, minb 
	mov ah, 02h
	int 21h	
	call vivod_chislo
	ret
endp
;------------Процедуры_конец------------
programm:
	mov AX, @data
	mov DS, AX
	call calc
	call vivod_bukva
		mov ax, 4c00h
	int 21h   
end programm
Eclipse_Me вне форума Ответить с цитированием
Старый 19.10.2013, 15:16   #2
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

Eclipse_Me,
читай о функции 0Ah прерывания 21h, она как раз для этого и предназначена
Mikl___ вне форума Ответить с цитированием
Старый 19.10.2013, 17:10   #3
Eclipse_Me
Пользователь
 
Регистрация: 16.10.2013
Сообщений: 11
По умолчанию

Цитата:
Сообщение от Mikl___ Посмотреть сообщение
Eclipse_Me,
читай о функции 0Ah прерывания 21h, она как раз для этого и предназначена
Я читаю! Не могу вникнуть как ИМЕННО это организовать.
Мне понятно, что строка записывается по адресу: DS:DX и что надо будет каким-то образом добавить смещение на два байта, поскольку, первый и второй байт несут информацию о длине строки. И самое главное, не могу найти, как потом вот это значение впихнуть в переменную.
Подскажите, если не сложно.
Eclipse_Me вне форума Ответить с цитированием
Старый 19.10.2013, 20:06   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
И самое главное, не могу найти, как потом вот это значение впихнуть в переменную.
поймите, не нужно никуда ничего впихивать. У Вас есть адрес вашей строки, с ней и работайте/делайте то, что Вам нужно.

p.s. если реально нужно переписать строку в другое место, то под эту строку должно быть выделено(оставлено) место, строку туда переписывайте с помощью movsb в цикле...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 20.10.2013, 09:57   #5
Eclipse_Me
Пользователь
 
Регистрация: 16.10.2013
Сообщений: 11
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
поймите, не нужно никуда ничего впихивать. У Вас есть адрес вашей строки, с ней и работайте/делайте то, что Вам нужно.

p.s. если реально нужно переписать строку в другое место, то под эту строку должно быть выделено(оставлено) место, строку туда переписывайте с помощью movsb в цикле...
Ну дык, если так все просто, почему никто не может написать?
Я на алгоритмическом уровне понял, не понимаю как команды написать, уже неделю эксперементирую и ни в какую
Eclipse_Me вне форума Ответить с цитированием
Старый 20.10.2013, 10:13   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

если особо не париться, то попробуйте такой код:
Код:
	.data
sInput	db	'Enter string:  $'
sPress	db	0dh, 0ah, 'Press any key$'

buf	label	byte		; буфер для приема строки с клавиатуры (по ф-и 0ah)
max	db	128		; максимальная длина строки
len	db	0		; реальная длина введенной строки
Mystr	db	128 dup (0)	; сама строка
minb db	?					; Наиболее часто встречающийся символ.   
sum db	?
ввод будет выглядеть так:
Код:
	lea	dx, sInput
	mov	ah, 9
	int	21h		; приглашение на экран

	lea	dx, buf
	mov	ah, 0ah
	int	21h		; вводим строку
остальное должно ваше работать. Успехов!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 20.10.2013, 13:04   #7
Eclipse_Me
Пользователь
 
Регистрация: 16.10.2013
Сообщений: 11
Хорошо

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
если особо не париться, то попробуйте такой код:
Код:
	.data
sInput	db	'Enter string:  $'
sPress	db	0dh, 0ah, 'Press any key$'

buf	label	byte		; буфер для приема строки с клавиатуры (по ф-и 0ah)
max	db	128		; максимальная длина строки
len	db	0		; реальная длина введенной строки
Mystr	db	128 dup (0)	; сама строка
minb db	?					; Наиболее часто встречающийся символ.   
sum db	?
ввод будет выглядеть так:
Код:
	lea	dx, sInput
	mov	ah, 9
	int	21h		; приглашение на экран

	lea	dx, buf
	mov	ah, 0ah
	int	21h		; вводим строку
остальное должно ваше работать. Успехов!
Спасибо огромное! Именно мне это и нужно было!
Eclipse_Me вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запись в переменную Ardarik БД в Delphi 5 06.05.2013 20:43
Запись данных из БД в переменную Jopses PHP 12 25.03.2013 13:48
Запись большого числа в переменную pavelitel Общие вопросы C/C++ 16 27.11.2012 21:55
Запись данных ячейки в переменную myxosran Помощь студентам 3 06.03.2010 20:27
Запись из файла в переменную Sekt Общие вопросы C/C++ 1 20.10.2009 13:02