Набросок на скорую руку. не факт, что сделано верно. Из двух пробелов оставляет только один.
не, черная строка это то что я ввожу руками, а синяя строка это результат работы функции )
т.е. при вводе "a_s_d_f_g" выдает результат "asd_fg", а должна оставить строку как есть "a_s_d_f_g"
при вводе "a___s___d___f___g" результат "asd_fg" а должен быть "a_s_d_f_g"
Все равно спасибо, Шурик, что с Бармалеем совместно меня носом в регистр Е ткнули с умной мыслью использовать его ))
это я неправильно понял ) - думал что надо разбивать строку по 3 символа и разделять пробелами )
Dr.Potapov,
Как вариант:
Код:LD HL,ARRAY LD BC,END-ARRAY LL0 LD A,#20 LL1 CPIR RET PO ; Выход JR NZ,LL1 INC BC LD E,L LD D,H CP (HL) LL3 CPI JR Z,LL3 PUSH DE JR C,LL4 DEC HL LD A,C LDIR LD C,A LL4 POP HL JR LL0 ARRAY DB "12 3 456 789",#0D,#0A END:
Последний раз редактировалось drbars; 23.02.2018 в 02:17.
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Если длина массива > 256 то лучше заменить код на:
Принцип работы процедуры нахождении более 1 пробела между словами, и подтягиванием хвоста массива к началуКод:LD A,C ; --> PUSH BC LDIR LD C,A ; --> POP BC LL4 POP HL JR LL0 ; --> JR LL1
Однопроходный алогорим Бармалея правда оптимальнее, пример больше полезен для понимания работы с командами CPI(R).
Мне не сложно в код скопировать ваш вариант, но без подсчета тактов я даже не знаю как замерить скорость да и нужно ли )
Эта функция вызывается по нажатию ENTER, буфер на 128 байт с писаниной пользователя приводится в порядок по пробелам (убираются вначале, в конце и затем лишние в том что осталось). ENTER нажимается не столь часто, поэтому думаю что компактность тут более предпочтительна. Да и задачи по оптимизации пока нет (я еще очень плохо въезжаю в чужой и серьезно оптимизированный код), главное что бы работало и я мог понять что там написано )
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)