WMmail.ru - сервис почтовых рассылок

понедельник, 4 декабря 2017 г.

RFpro.ru: Ассемблер? Это просто! Учимся программировать

  
Фирма "1С" приглашает на День Бухгалтерии в Большом Московском цирке 8 декабря! Подробнее...
  
Subscribe.ru
RFpro.ru: Ассемблер? Это просто! Учимся программировать

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Лучшие эксперты в разделе

Коцюрбенко Алексей aka Жерар
Статус: Мастер-Эксперт
Рейтинг: 448
• повысить рейтинг »
Evgen aka Chuma
Статус: 5-й класс
Рейтинг: 27
• повысить рейтинг »
quirck
Статус: 1-й класс
Рейтинг: 0
• повысить рейтинг »

• Assembler

Номер выпуска:1672
Дата выхода:04.12.2017, 16:15
Администратор рассылки:Лысков Игорь Витальевич (Старший модератор)
Подписчиков / экспертов:49 / 18
Вопросов / ответов:2 / 2

Консультация # 191926: Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос: Образовать строку из исходной, повторив i элемент i раз, i+1 элемент i+1 раз, i+2 элемент i+2 раза. Платформа ДОС. На TASM, модель памяти SMALL. Заранее спасибо) ...
Консультация # 191932: Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос: Дано задание: Образовать строку, повторив фрагмент исходной строки с заданной позиции данной длины требуемое кол-во раз. Выделить нужный фрагмент получается, но с его повторением проблемы. Не могли бы вы помочь разобрать, как лучше это сделать? TASM ...

Консультация # 191926:

Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос:
Образовать строку из исходной, повторив i элемент i раз, i+1 элемент i+1 раз, i+2 элемент i+2 раза.
Платформа ДОС. На TASM, модель памяти SMALL. Заранее спасибо)

Дата отправки: 28.11.2017, 17:28
Вопрос задал: vik.privalova (Посетитель)
Всего ответов: 1
Страница онлайн-консультации »


Консультирует Зенченко Константин Николаевич (Модератор):

Здравствуйте, vik.privalova!

Смотрите код:

Код (Assembler) :: выделить код
dos21	macro	str  	mov	ah,09  	mov	dx,offset str  	int	21h  endm  model	small  stack	100h  code  start:  mov 	ax,@DATA    	mov 	ds,ax  	mov 	es,ax  ;выводим приглашение к ввводу    	dos21	enterStr;вводим строку   	mov 	ah,0ah   	mov 	dx,offset myStrMax   	int 	21h;ввод символа  ;выводим приглашение к ввводу    	dos21	enterSim  ;вводим символ   	mov 	ah,1   	int 	21h   	mov	ah,al;запомним эталонный символ  ;готовимся обрабатывать строку   	xor 	ch,ch   	xor	bx,bx;обнулим bx   	cld  	mov 	cl,myStrLen   	mov 	si,offset myStr  	mov 	di,offset getStr  ;участок анализа  @@S0:	push	cx;в стек cx  	lodsb	;в al один байт из строки mystr  	or	bx,bx;ВХ-флаг и счетчик  	jnz	@@S1;если ВХ обльше 0 -счет пошел  	mov	cx,1;влюбом случае 1  	cmp	ah,al;Проверяем текущий символ с введенным  	jnz	@@S2;если не равны выведем 1 символ  @@S1:	inc	bx;увеличим bx на единицу  	mov	cx,bx;занесем его в cx  @@S2:	rep	stosb; в стоку getstr записываем байт из al пока cx не равно нулю  	pop	cx;востанавливаем cx  	loop	@@S0;на метку цикла  ;конец строки  	mov	byte ptr[di],'$'  	dos21	endstr  	dos21	getstr  	mov	ah,4ch  	int	21h  data  enterStr	db	'Vvedite stroku: $'  enterSim	db	'Vvedite simbol: $'  endStr		db	0ah,0dh,'Polu4ennaya stroka: $'  ;добавил переход на следующию строку  myStrMax	db	6; максимальный размер буфера ввода  myStrLen		db	?; размер буфера после считывания  myStr		db	6 dup(?)  getStrMax	db	22;=6+5+4+3+2+1+'$'  getStr		db	22 dup(?)  	end	start

Удачи!

Консультировал: Зенченко Константин Николаевич (Модератор)
Дата отправки: 29.11.2017, 19:12
Рейтинг ответа:

НЕ одобряю 0 одобряю!

Консультация # 191932:

Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос:
Дано задание:
Образовать строку, повторив фрагмент исходной строки с заданной позиции данной длины требуемое кол-во раз.
Выделить нужный фрагмент получается, но с его повторением проблемы. Не могли бы вы помочь разобрать, как лучше это сделать? TASM

Дата отправки: 28.11.2017, 21:02
Вопрос задал: ann.zinger2010 (Посетитель)
Всего ответов: 1
Страница онлайн-консультации »


Консультирует Зенченко Константин Николаевич (Модератор):

Здравствуйте, ann.zinger2010!

Смотрите код:

Код (Assembler) :: выделить код
model	small  data  szStr	equ	250  dbStrng	db	10,13,'Enter string:$'  dbPstn	db	10,13,'Enter position:$'  dbLngth	db	10,13,'Enter length:$'  dbCnt	db	10,13,'Enter count:$'  dbRes	db	10,13,'Result:$'    dbMax	db	szStr  dbLen	db	?  dbStr	db	2*szStr dup(?)    dwNum1	dw	?;  dwNum2	dw	?;  dwNum3	dw	?;  stack	100h  code  ;адресуем сегментные регистры  begin:	mov	ax,@data  	mov	ds,ax  	mov	es,ax  ;просим ввести строку  Str1:	mov	ah,9  	lea	dx,dbStrng  	int	21h  ;вводим  	mov	ah,10  	lea	dx,dbMax  	int	21h  ;контроль пустой строки  	mov	al,dbLen  	or	al,al  	jz	Str1  ;просим ввести позицию  Num1:	lea	dx,dbPstn  	call	InpNum  	dec	ax  ;контролируем позицию и длину строки  	cmp	al,dbLen  	jae	Num1;больше повторяем  	mov	dwNum1,ax  ;просим ввести длину копируемого участка  Num2:	lea	dx,dbLngth  	call	InpNUm  ;контролируем длину копирования и длину строки  	mov	bl,dbLen  	add	bl,al  	cmp	bl,dbLen  	jb	Num2;больше переходим  	mov	dwNum2,ax  ;просим ввести количество копий  Num3:	lea	dx,dbCnt  	call	InpNUm  	mov	dwNum3,ax  ;готовим строку для вывода  	lea	si,dbStr  	mov	dl,dbLen  	xor	dh,dh  	add	si,dx  	mov	byte ptr[si],'$'  ;готовимся к перерносу кода  	mov	bx,dwNum2  	mul	bl  	mov	di,ax;=количество копий * длина копирования  	add	di,si  	dec	di  	xor	ch,ch  	mov	cl,dbLen  	add	si,dwNum1  	sub	cx,dwNum1  ;перносим  	std  	rep	movsb  ;готовимся копировать код  	mov	cx,dwNum3  	lea	si,dbStr  	mov	ax,dwNum2  	add	si,dwNum1  	mov	di,si  	cld  ;копируем  Copy1:	push	si  	push	cx  	mov	cx,ax  	rep	movsb  	pop	cx  	pop	si  	loop	Copy1  ;выодим результат  	mov	ah,9  	lea	dx,dbRes  	int	21h  	mov	ah,9  	lea	dx,dbStr  	int	21h  ;выход  	mov	ax,4C00h  	int	21h  ;вводим одну цифру  InpNum:	mov	ah,9  	int	21h  	mov	ah,1  	int	21h  ;не цифра повторяем ввод  	cmp	al,'1'  	jb	InpNum  	cmp	al,'9'  	ja	InpNum  	and	ax,0Fh  	ret  	end	begin

Удачи!

Консультировал: Зенченко Константин Николаевич (Модератор)
Дата отправки: 29.11.2017, 20:18
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Оценить выпуск | Задать вопрос экспертам

главная страница  |  стать участником  |  получить консультацию
техническая поддержка

Дорогой читатель!
Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались. Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора - для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение. Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал, который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом. Заходите - у нас интересно!
МЫ РАБОТАЕМ ДЛЯ ВАС!


 
     Прошлые выпуски
RFpro.ru: Ассемблер? Это просто! Учимся программировать RFpro.ru: Ассемблер? Это просто! Учимся программировать RFpro.ru: Ассемблер? Это просто! Учимся программировать Все выпуски рассылки
 
Если выпуск не отображается, вы можете прочесть его на сайте

Это сообщение было отправлено на admin10383.deep@blogger.com потому, что вы подписались на рассылку comp.prog.assembler на subscribe.ru.
Чтобы гарантировать получение писем от нас — добавьте наш адрес в адресную книгу.

Вы можете отказаться от получения писем.

Архив рассылки Поддержка подписчиков

Комментариев нет:

Отправить комментарий