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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.09.2011, 17:20   #1
pupilMartyr
Пользователь
 
Аватар для pupilMartyr
 
Регистрация: 02.05.2011
Сообщений: 45
Вопрос Assembler_работа_со_строками

Здравствуйте. Помогите пожалуйста разобраться с программой. В коде я ошибок не вижу (естественно), но она не работает. Задание:Ввод строки (длина 1..255 байт) и символа. Поиск символа в строке и вывод номера позиции/(номеров позиций) символа на экран. Код:
Код:
Text		segment			        
		assume CS:text,DS:data	        
Begin:	        mov AX,data			
		mov DS,AX

		mov AH,09h	
                mov DX,offset message1
                int 21h
		
		lea SI, string
		xor cx,cx
			
input_begin: 	mov AH,01h	
		int 21h 
	        
                cmp AL,44h             	;сравниваем содержимое AL с кодом клавиши F10	
                je  exit

		cmp AL, '.'	       	;сравниваем содержимое AL с кодом клавиши '.'
		je input_end
		mov byte ptr [SI], AL  	;заносим в 'строку' очередной введенный символ
		inc SI         	       	;передвигаем позицию в 'строке'
		inc CX			;увеличиваем счетчик введенных символов		
		jmp input_begin

input_end:	mov byte ptr[SI],'$'

		mov AH, 09h	
                mov DX, offset message2
                int 21h

		xor AX,AX

		mov AH,01h		;вводим символ для поиска
		int 21h 

		xor BX,BX
		mov BH, AH		;занесем его в BX

		mov AH,09h
                mov DX,offset message3
                int 21h

		xor SI, SI

search:		lods string		;считаем символ из строки в аккумулятор
		cmp AL, BH
		jne not_

		mov AH, 09h		;выводим позицию символа в строке поиска
		mov DX, SI
		add DX, 30h
		int 21h
		mov DX,' '
		int 21h

not_:		loop search

		mov AH, 07h		;ждем ввода клавиши
		int 21h

exit:           mov AX,4C00h       ;завершаем работу программы
                int 21h
Text            ends	        

data            segment
  	string     db  255  dup(0)
	message1   db 10,13,'- Enter string: $'
	message2   db 10,13,'- Enter symbol: $'
	message3   db 10,13,'- Position: $' 
	len dw ?
data ends
		
stk		segment stack 'stack'	        ;(23)Начало сегмента стека
		dw 128 dup (0)		        ;(24)Стек
stk		ends				;(25)Конец сегмента стека
		end begin			;(26)Конец текста программы
Я нажимаю ctrl+F8, чтобы отладить она вылетает. Может это плохой отладчик, не знаю. Подскажите хотя бы если визуально заметите ошибку. Кстати, очередной введенный символ я сравниваю с точкой - определяю точкой конец строки. Спасибо

Последний раз редактировалось pupilMartyr; 03.09.2011 в 17:22.
pupilMartyr вне форума Ответить с цитированием
Старый 03.09.2011, 19:11   #2
VadikV
Форумчанин
 
Аватар для VadikV
 
Регистрация: 08.01.2011
Сообщений: 226
По умолчанию

вот тут:
Код:
mov AH, 09h		;выводим позицию символа в строке поиска
		mov DX, SI
		add DX, 30h
		int 21h
		mov DX,' '
		int 21h
ты выводишь один символ, а используешь функцию вывода строки.
для вывода символа нужно использовать функцию 02h:
Код:
mov AH, 02h
icq 223-630-454
e-mail vysotskiy@list.ru
сайт http://www.big-library.net/
VadikV вне форума Ответить с цитированием
Старый 03.09.2011, 20:51   #3
pupilMartyr
Пользователь
 
Аватар для pupilMartyr
 
Регистрация: 02.05.2011
Сообщений: 45
По умолчанию

Спасибо.
Но ничего не изменилось. Я ввожу строку после Enter string, символ для поиска после Enter symbol. и после Position у меня никогда ничего не выдает. Мне кажется, что может как-то в строку string неверно заносит.
Если у кого-то есть возможность посмотреть как он в строку заносит, помогите пожалуйста.
pupilMartyr вне форума Ответить с цитированием
Старый 03.09.2011, 21:05   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А если искать так:
Код:
 xor ax,ax
 mov al,<искомый символ>;
 mov di,m
 repne scasb
 mov bx,di
 sub bx,m
В ВХ будет номер символа в строке
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 03.09.2011, 23:44   #5
pupilMartyr
Пользователь
 
Аватар для pupilMartyr
 
Регистрация: 02.05.2011
Сообщений: 45
По умолчанию

Спасибо.
Ошибка нашлась! Там, где я заношу в BX символ для поиска
Код:
xor BX, BX
mov BH, AH
нужно заносить
Код:
mov BH, AL
потому что в AH заносим код команды для ввода, а сам символ записывается в AL. Поэтому он никогда и не находил. Глупая ошибка отняла кучу времени)
Всем спасибо за помощь!

Последний раз редактировалось pupilMartyr; 03.09.2011 в 23:47.
pupilMartyr вне форума Ответить с цитированием
Ответ


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