РАССЫЛКИ ПОРТАЛА RFPRO.RU Лучшие эксперты в разделе Номер выпуска: | 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!
Смотрите код:
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 Удачи! Консультация # 191932: Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос: Дано задание: Образовать строку, повторив фрагмент исходной строки с заданной позиции данной длины требуемое кол-во раз. Выделить нужный фрагмент получается, но с его повторением проблемы. Не могли бы вы помочь разобрать, как лучше это сделать? TASM Дата отправки: 28.11.2017, 21:02 Вопрос задал: ann.zinger2010 (Посетитель) Всего ответов: 1 Страница онлайн-консультации » Консультирует Зенченко Константин Николаевич (Модератор): Здравствуйте, ann.zinger2010!
Смотрите код:
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 Удачи!
Оценить выпуск | Задать вопрос экспертам главная страница | стать участником | получить консультацию техническая поддержка Дорогой читатель! Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались. Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора - для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение. Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал, который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом. Заходите - у нас интересно! МЫ РАБОТАЕМ ДЛЯ ВАС! |
Комментариев нет:
Отправить комментарий