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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.01.2012, 17:46   #1
BatusaJ
Новичок
Джуниор
 
Регистрация: 05.01.2012
Сообщений: 1
Сообщение Удалить знаки препинания в строке(assembler)

Вообщем, надыбал я на просторах паутины такой код:

Код:
; Делаем COM-файл:
; tasm name.asm
; tlink name /t

	.model	tiny

	.data
sInput	db	'Enter string:  $'
sResult	db	0dh, 0ah, 'Result string: $'
sPress	db	0dh, 0ah, 'Press any key$'
sSepar	db	9,' ,.;:'	;строка разделителей-знаков препинания (при желании, можно подправить)
len_sep	equ	$-sSepar	;длина строки разделителей

buf	label	byte		; буфер для приема строки с клавиатуры (по ф-и 0ah)
max	db	128		; максимальная длина строки
len	db	0		; реальная длина введенной строки
string	db	128 dup (?)	; сама строка

	.code
	.startup

	lea	dx, sInput
	mov	ah, 9
	int	21h		; приглашение на экран

	lea	dx, buf
	mov	ah, 0ah
	int	21h		; вводим строку

	lea	dx, sResult
	mov	ah, 9
	int	21h		; Result string

	lea	si, string	; адрес строки
	call	DelSepar

	lea	dx, string	;выведем результат
	mov	ah, 9
	int	21h
exit:
	lea	dx, sPress
	mov	ah, 9
	int	21h		; press any key
	
	mov	ah, 0		; ждем нажатие клавиши, чтобы не ушло сразу
	int	16h

	mov	ax, 4c00h
	int	21h

;обработка строки по адресу в si
;строка заканчивается 0dh
;результат будет по тому же адресу,
;в конце строки будет записан символ '$' (для ф-и 9 прерывания 21)
DelSepar	proc
	mov	bx, si		;адрес, куда будем писать
MLoop:
	lodsb			; очередной
	cmp	al, 0dh		; введенная строка заканчивается кодом 0dh
	je	return		; на запись в конце символа '$'
	lea	di, sSepar	;адрес строки разделителей 
	mov	cx, len_sep	;длина
	repne	scasb		;ищем в строке [di], пока не равно
	je	MLoop		;нашли - пропускаем и идем на чтение следующего символа
	mov	[bx], al	;запишем 
	inc	bx		;и проинкрементируем адрес
	jmp	MLoop		;на повтор
return:
	mov	byte ptr [bx], '$';закроем строку
	ret
DelSepar	endp

	end
Компановка и линковка проходят безошибочно, а при запуске сом файла в командной строке выходит надпись: The sintax of the command is incorrect. Помогите, пожалуйста решить проблему! Буду очень признателен.


________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.

Последний раз редактировалось Serge_Bliznykov; 06.01.2012 в 11:55.
BatusaJ вне форума Ответить с цитированием
Старый 06.01.2012, 12:01   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

откомпилировал. запустил. всё работает.
выкладываю откомпилированный COM файл.
проверьте, заработает он или нет.
если заработает - значит у Вас проблема в компиляторе.
если не заработает - значит та операционка, которую Вы используете (скорее всего Windows 7) некорректно эмулирует DOS режим. Тогда нужно или поднять виртуальную машинку и поставить там что-то более старенькое. Хотя бы тот же MS DOS. и гоняйте код под виртуалкой.

Либо поставьте под свою операционку программку DosBox - тоже должно помочь.
Вложения
Тип файла: rar name_example.rar (1.0 Кб, 27 просмотров)
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дана строка, вывести на экран знаки препинания, которые встречаются хотя бы 2 раза (Паскаль) GamBitFRK Помощь студентам 0 22.12.2011 17:22
Знаки препинания Ne1StoM Помощь студентам 4 30.05.2011 09:06
(Delphi) Удалить знаки препинания v.v.veter Помощь студентам 1 18.05.2011 06:45
удалить в строке лишние пробелы euhenia Помощь студентам 4 02.12.2009 21:55
Заменить в каждой строке воскл. знаки на точки. - язык Pascal Karinna Помощь студентам 12 08.05.2008 08:13