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

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

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

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 09.10.2010, 19:01   #1
Petruha-nsk
Пользователь
 
Аватар для Petruha-nsk
 
Регистрация: 10.04.2009
Сообщений: 69
По умолчанию удаление из исходной строки заданной конфигурации символов

Народ,я сам программер С++ и ассемблер ни капли не знаю. На учебной практике попросили наваять небольшую программку на ассемблере,а как делать я не представляю... Если вас не затруднит, помогите пожалуйста...
Задача заключается в том,чтобы в среде VS'08 сделать консольное приложение, которое бы удаляло из исходной строки заданную конфигурации символов.

Заранее спасибо.
Petruha-nsk вне форума
Старый 09.10.2010, 22:22   #2
SwiP
Форумчанин
 
Регистрация: 18.03.2009
Сообщений: 101
По умолчанию

Неужели вот так вот просто задали, не обучая асму? Тогда за учебники.
SwiP вне форума
Старый 10.10.2010, 07:38   #3
Petruha-nsk
Пользователь
 
Аватар для Petruha-nsk
 
Регистрация: 10.04.2009
Сообщений: 69
По умолчанию

практику ведет препод из другого вуза и ему ровно что мы не изучали,он заинтересован в том чтоб мы сдали все работы,которые даст, и поставить нам "зачет по учебной практике" или "незачет". дал методу,состоящую только из таблиц. Вроде на синтаксис языка похоже,однако ни логики,ни про структуру программы нигде не говорится. В общем, буду признателен любой помощи,кто чем сможет и кому чего не жалко...

Последний раз редактировалось Petruha-nsk; 10.10.2010 в 07:40.
Petruha-nsk вне форума
Старый 10.10.2010, 12:38   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Всмысле из строки адаляло подстроку. И это ассамблерными вставками?
Строка подразумевается char[]?
I'm learning to live...
Stilet вне форума
Старый 10.10.2010, 12:43   #5
Petruha-nsk
Пользователь
 
Аватар для Petruha-nsk
 
Регистрация: 10.04.2009
Сообщений: 69
По умолчанию

верно. из строки нужно удалить подстроку(-и). вроде бы нет.
в примере проги на ассемблере использовалась процедура CharToOemA. видимо это ASCII.

вот что я сам смог наваять до сего момента:
Код:
.386
.MODEL FLAT,STDCALL
	EXTRN  GetStdHandle@4:NEAR
	EXTRN  WriteConsoleA@20:NEAR
	EXTRN  CharToOemA@8:NEAR
	EXTRN  ReadConsoleA@20:NEAR
	EXTRN  ExitProcess@4:NEAR ; функция выхода из программы
	EXTRN  lstrlenA@4:NEAR ; функция определения длины строки
	EXTRN  wsprintfA:NEAR
	
.DATA		;сегмент данных
	DIN1 DD ?	;ДЕСКРИПТОР ВВОДА СТРОКИ
	DIN2 DD ?	;ДЕСКРИПТОР СТРОКИ,СИМВОЛОВ УДАЛИТЬ КОТОРЫЕ НУЖНО
	DOUT DD ?	;ДЕСКРИПТОР ВЫВОДИМОЙ СТРОКИ
	
	STRN DB "ВВЕДИТЕ ПОДСТРОКУ, А ЗАТЕМ СТРОКУ: ",13,10,0	;СТРОКА-ПРИГЛАШЕНИЕ
	LENS DD ?	;КОЛ-ВО ФАКТИЧЕСКИ ВЫВЕДЕННЫХ СИМВОЛОВ
	
	BUFE DB 200 dup(?)	;БУФЕР ДЛЯ ВВОДИМОЙ СТРОКИ
	BUFD DB 200 dup(?)	;БУФЕР ДЛЯ УДАЛЯЕМЫХ СИМВОЛОВ
	
.CODE		;сегмент кода
START:		;метка точки входа
	;ПЕРЕКОДИРОВКА СТРОКИ STRN
			PUSH OFFSET STRN	;КЛАДЕМ СМЕЩЕНИЕ СТРОКИ КОТОРУЮ ХОТИМ ПЕРЕКОДИРОВАТЬ
			PUSH OFFSET STRN	;КЛАДЕМ СМЕЩЕНИЕ СТРОКИ В КОТОРУЮ ХОТИМ ЗАПИСАТЬ
		CALL CharToOemA@8	;ВЫЗВАЛИ ФУНКЦИЮ
	
	;ПОЛУЧЕНИЕ ДЕСКРИПТОРОВ ВВОДА
			PUSH -10
		CALL GetStdHandle@4
		MOV DIN1,EAX	;ПЕРЕМЕСТИМ РЕЗУЛЬТАТ ИЗ РЕГИСТРА ЕАХ В ЯЧЕЙКУ ПАМЯТИ ДЛЯ ESTR
		
			PUSH -10
		CALL GetStdHandle@4
		MOV DIN2,EAX	;ПЕРЕМЕСТИМ РЕЗУЛЬТАТ ИЗ РЕГИСТРА ЕАХ В ЯЧЕЙКУ ПАМЯТИ ДЛЯ DSTR
		
	;ПОЛУЧЕНИЕ ДЕСКРИПТОРА ВЫВОДА
			PUSH -11
		CALL GetStdHandle@4
		MOV DOUT,EAX	;ПЕРЕМЕСТИМ РЕЗУЛЬТАТ ИЗ РЕГИСТРА ЕАХ В ЯЧЕЙКУ ПАМЯТИ DOUT
		
	;ОПРЕДЕЛИМ ДЛИНУ СТРОКИ STRN
			PUSH OFFSET STRN	;ПОЛОЖИТЬ УКАЗАТЕЛЬ НА СТРОКУ В СТЕК
		CALL lstrlenA@4		;ПОЛУЧИЛИ ДЛИНУ СТРОКИ,РЕЗУЛЬТАТ В ЕАХ
		
	;ВЫВОД СТРОКИ STRN НА ЭКРАН
			PUSH 0				;РЕЗЕРВНЫЙ ПАРАМЕТР
			PUSH OFFSET LENS	;В ЭТУ ПЕРЕМЕННУЮ ПОЛОЖИМ ФАКТИЧЕСКОЕ КОЛ-ВО ВЫВЕДЕННЫХ СИМВОЛОВ
			PUSH EAX			;КОЛ-ВО СИМВОЛОВ,КОТОРОЕ НУЖНО ВЫВЕСТИ
			PUSH OFFSET STRN	;БУФЕР СО СТРОКОЙ
			PUSH DOUT			;ДЕСКРПИТОР ВЫВОДА
		CALL WriteConsoleA@20
		
	;ВВОД СТРОК BUFE И BUFD
			PUSH 0			;ДЛЯ BUFD
			PUSH OFFSET LENS
			PUSH 200
			PUSH OFFSET BUFD
			PUSH DIN2
		CALL ReadConsoleA@20
			PUSH 0			;ДЛЯ BUFE
			PUSH OFFSET LENS
			PUSH 200
			PUSH OFFSET BUFE
			PUSH DIN1
		CALL ReadConsoleA@20

	;ПРЕОБРАЗОВАНИЕ ВВЕДЕННЫХ СТРОК
		MOV ESI, OFFSET BUFE	;В ESI КЛАДЕМ АДРЕС СТРОКИ,КОТОРУЮ БУДЕТ ПРЕОБРАЗОВЫВАТЬ (ПРИЕМНИК)
		MOV EDI, OFFSET BUFD	;В EDI КЛАДЕМ АДРЕС ПОДСТРОКИ,КОТОРУЮ БУДЕМ УДАЛЯТЬ ИЗ СТРОКИ BUFE(ИСТОЧНИК)
		MOV ECX, LENS			;УКАЗАЛИ КОЛ-ВО ИТЕРАЦИЙ РЕГИСТРУ ЕСХ
		
		MainCycle:						;ГЛАВНЫЙ ЦИКЛ
			
			?????????????????????????
		LOOP MainCycle
	
	;ЗАДЕРЖКА И ВЫХОД
		MOV ECX,05FFFFFFFH	;ЗАДЕРЖКА
		PUSH 0	; ПАРАМЕТР ВЫХОДА
		CALL ExitProcess@4
END START	;конец сегмента кода
на месте вопросов пока не сообразил что должен написать.
Petruha-nsk вне форума
Старый 10.10.2010, 17:43   #6
Petruha-nsk
Пользователь
 
Аватар для Petruha-nsk
 
Регистрация: 10.04.2009
Сообщений: 69
По умолчанию

Ситуация немного изменилась. Вот программа, которую я наваял.
Код:
.386
.MODEL FLAT,STDCALL
	EXTRN  GetStdHandle@4:NEAR
	EXTRN  WriteConsoleA@20:NEAR
	EXTRN  CharToOemA@8:NEAR
	EXTRN  ReadConsoleA@20:NEAR
	EXTRN  ExitProcess@4:NEAR ; функция выхода из программы
	EXTRN  lstrlenA@4:NEAR ; функция определения длины строки
	EXTRN  wsprintfA:NEAR
	
.DATA		;сегмент данных
	DIN1 DD ?	;ДЕСКРИПТОР ВВОДА СТРОКИ
	DIN2 DD ?	;ДЕСКРИПТОР СТРОКИ,СИМВОЛОВ УДАЛИТЬ КОТОРЫЕ НУЖНО
	DOUT DD ?	;ДЕСКРИПТОР ВЫВОДИМОЙ СТРОКИ
	
	BUFE DD 200 dup(?)	;БУФЕР ДЛЯ ВВОДИМОЙ СТРОКИ
	BUFD DD 200 dup(?)	;БУФЕР ДЛЯ УДАЛЯЕМЫХ СИМВОЛОВ
	
	LENE DD ?	;КОЛ-ВО ФАКТИЧЕСКИ ВЫВЕДЕННЫХ СИМВОЛОВ В СТРОКЕ BUFE
	LEND DD ?	;КОЛ-ВО ФАКТИЧЕСКИ ВЫВЕДЕННЫХ СИМВОЛОВ В СТРОКЕ BUFD
	STRN DB "ВВЕДИТЕ СТРОКУ, А ЗАТЕМ ПОДСТРОКУ: ",13,10,0	;СТРОКА-ПРИГЛАШЕНИЕ
	
.CODE		;сегмент кода
START:		;метка точки входа
	;ПЕРЕКОДИРОВКА СТРОКИ STRN
			PUSH OFFSET STRN	;КЛАДЕМ СМЕЩЕНИЕ СТРОКИ КОТОРУЮ ХОТИМ ПЕРЕКОДИРОВАТЬ
			PUSH OFFSET STRN	;КЛАДЕМ СМЕЩЕНИЕ СТРОКИ В КОТОРУЮ ХОТИМ ЗАПИСАТЬ
		CALL CharToOemA@8	;ВЫЗВАЛИ ФУНКЦИЮ
	
	;ПОЛУЧЕНИЕ ДЕСКРИПТОРОВ ВВОДА
			PUSH -10
		CALL GetStdHandle@4
		MOV DIN1,EAX	;ПЕРЕМЕСТИМ РЕЗУЛЬТАТ ИЗ РЕГИСТРА ЕАХ В ЯЧЕЙКУ ПАМЯТИ ДЛЯ BUFE
		
			PUSH -10
		CALL GetStdHandle@4
		MOV DIN2,EAX	;ПЕРЕМЕСТИМ РЕЗУЛЬТАТ ИЗ РЕГИСТРА ЕАХ В ЯЧЕЙКУ ПАМЯТИ ДЛЯ BUFD
		
	;ПОЛУЧЕНИЕ ДЕСКРИПТОРА ВЫВОДА
			PUSH -11
		CALL GetStdHandle@4
		MOV DOUT,EAX	;ПЕРЕМЕСТИМ РЕЗУЛЬТАТ ИЗ РЕГИСТРА ЕАХ В ЯЧЕЙКУ ПАМЯТИ DOUT
		
	;ОПРЕДЕЛИМ ДЛИНУ СТРОКИ STRN
			PUSH OFFSET STRN	;ПОЛОЖИТЬ УКАЗАТЕЛЬ НА СТРОКУ В СТЕК
		CALL lstrlenA@4		;ПОЛУЧИЛИ ДЛИНУ СТРОКИ,РЕЗУЛЬТАТ В ЕАХ
		
	;ВЫВОД СТРОКИ STRN НА ЭКРАН
			PUSH 0				;РЕЗЕРВНЫЙ ПАРАМЕТР
			PUSH OFFSET LENE	;В ЭТУ ПЕРЕМЕННУЮ ПОЛОЖИМ ФАКТИЧЕСКОЕ КОЛ-ВО ВЫВЕДЕННЫХ СИМВОЛОВ
			PUSH EAX			;КОЛ-ВО СИМВОЛОВ,КОТОРОЕ НУЖНО ВЫВЕСТИ
			PUSH OFFSET STRN	;БУФЕР СО СТРОКОЙ
			PUSH DOUT			;ДЕСКРПИТОР ВЫВОДА
		CALL WriteConsoleA@20
		
	;ВВОД СТРОК BUFE И BUFD
			PUSH 0			;ДЛЯ BUFE
			PUSH OFFSET LENE
			PUSH 200
			PUSH OFFSET BUFE
			PUSH DIN1
		CALL ReadConsoleA@20
			PUSH 0			;ДЛЯ BUFD
			PUSH OFFSET LEND
			PUSH 200
			PUSH OFFSET BUFD
			PUSH DIN2
		CALL ReadConsoleA@20
			
	;ПРЕОБРАЗОВАНИЕ ВВЕДЕННЫХ СТРОК
		MOV EDI, OFFSET BUFD	;В EDI КЛАДЕМ АДРЕС ПОДСТРОКИ,КОТОРУЮ БУДЕМ УДАЛЯТЬ ИЗ СТРОКИ BUFE(ИСТОЧНИК)
		MOV ECX, LENE			;УКАЗАЛИ КОЛ-ВО ИТЕРАЦИЙ РЕГИСТРУ ЕСХ
		MOV EAX, BUFD			;В АККУМУЛЯТОР УКАЗЫВАЕМ ТО,ЧТО БУДЕМ СКАНИРОВАТЬ
		REPNE SCAS BUFE			;СКАНИРУЕМ ВХОДНУЮ СТРОКУ НА НАЛИЧИЕ ПОДСТРОК АККУМУЛЯТОРА
		JE FOUND				;ЕСЛИ НАЙДЕМ ТАКУЮ ПОДСТРОКУ
		FOUND:					;СРАБОТАЕТ ОБРАБОТЧИК
				DEC DI			;УКАЗАЛИ ПОЗИЦИЮ,ГДЕ СОВПАЛО
				???????????????
		
	;ЗАДЕРЖКА И ВЫХОД
		EXIT:	
			MOV ECX,05FFFFFFFH	;ЗАДЕРЖКА
			EXPECTION:
				LOOP EXPECTION
			PUSH 0	; ПАРАМЕТР ВЫХОДА
			CALL ExitProcess@4
END START	;конец сегмента кода
осталось одно: на месте вопросов указать что сделать,чтобы удалить элементы из строки BUFE.
Petruha-nsk вне форума
Старый 10.10.2010, 18:31   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ниче не понял. Ты пишешь
Цитата:
Задача заключается в том,чтобы в среде VS'08 сделать консольное приложение, которое бы удаляло из исходной строки заданную конфигурации символов.
Так? А сейчас прям на ассемблере написал, так всетки на чистом ассемблере или на VS? если мне не изменяет память VS не имеет компилятора ассемблера. Или имеет?
I'm learning to live...
Stilet вне форума
Старый 10.10.2010, 18:47   #8
Petruha-nsk
Пользователь
 
Аватар для Petruha-nsk
 
Регистрация: 10.04.2009
Сообщений: 69
По умолчанию

VS2008 имеет поддержку Ассемблера.
1. создать новый ПУСТОЙ консольный проект
2. затем в нем создать новый документ .txt но указать расширение .asm.
3. вставить текст программы на ассемблере
4. запустить компиляцию.
5. возникнет ошибка. так надо. ИСКЛЮЧАЕМ .asm файл из проекта и заново подключаем как существующий
6. в появившемся диалогом окне выбираем правило .MASM
7. запускаем и прогаем
Petruha-nsk вне форума
Старый 10.10.2010, 19:09   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
в появившемся диалогом окне выбираем правило .MASM
Мдя...
Как будет время, просьба наштопать скринов как ты это делаешь. Ибо я в VS2010 не нашел пути такого.
I'm learning to live...
Stilet вне форума
Старый 10.10.2010, 19:16   #10
Petruha-nsk
Пользователь
 
Аватар для Petruha-nsk
 
Регистрация: 10.04.2009
Сообщений: 69
По умолчанию

я же не зря написал что VS2008 ибо 2010 не поддерживает такого. она будет работать с подобным проектом,созданным на 2008 вижуале,но сама не умеет))
Petruha-nsk вне форума
Закрытая тема


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удаление из строки всех не alpha символов skeletor PHP 3 12.07.2010 17:28
Удаление символов из строки Jasper92 Общие вопросы C/C++ 1 17.01.2010 20:41
Удаление символов из строки stscolt Помощь студентам 0 28.12.2009 12:34
Дана строка символов. Удалить из исходной строки все цифры. Striker14 Помощь студентам 4 26.02.2009 15:50
Pascal, нужна помощь с меню заданной конфигурации Хоб Помощь студентам 1 12.02.2008 09:26