20.03.2011, 01:35
|
|
Гражданин KAZUS.RU
Регистрация: 02.06.2003
Адрес: Челябинск
Сообщений: 545
Сказал спасибо: 10
Сказали Спасибо 341 раз(а) в 202 сообщении(ях)
|
Re: STM8(S/L), первые впечатления
Сообщение от omercury
|
Понятно, что не специально. Логика примерно ясна.
Скромничаете?
|
Просто стараюсь быть объективным по отношению к себе.
|
|
|
|
23.03.2011, 12:35
|
|
Прохожий
Регистрация: 06.05.2009
Сообщений: 4
Сказал спасибо: 1
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: STM8(S/L), первые впечатления
Знакомый исходник ковыряете )
Сообщение от Bill
|
Чуть элегантнее (быстрее)
Код:
|
; unsigned int _lcd_putstr(unsigned char *s)
xdef __lcd_putstr
__lcd_putstr:
jra __lcd_putstr1 ; Поехали!
_lcd_putstr_0:
call __lcd_putchar ; выводим символ
incw X ; смещаем указатель к следующему символу
_lcd_putstr_1:
ld A,(X) ; берем очередной символ строки
jrne _lcd_putstr_0 ; не ноль - на вывод
ret |
Или нет?
|
В ассемблере можно и так:
Код:
|
; unsigned int _lcd_putstr(unsigned char *s)
xdef __lcd_putstr
__lcd_putstr_0:
call __lcd_putchar ; выводим символ
incw X ; смещаем указатель к следующему
__lcd_putstr:
ld A,(X) ; берем очередной символ строки
jrne _lcd_putstr_0 ; не ноль - на вывод
ret |
Не очень красиво, но минус один переход
__________________
To beer or not to beer?
That is a question...
|
|
|
|
23.03.2011, 13:21
|
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: STM8(S/L), первые впечатления
Сообщение от Dr_Watson
|
Не очень красиво, но минус один переход
|
Очень некрасиво.
Там была процедура вывода форматированной строки. Признак конца строки - "0".
Ваш вариант пройдёт, если точно известно, что первый байт не "0". Такой подход неправилен потому, что Вы оставили возможность ошибочной работы процедуры. Например вывод строки бесконечной длины.
А переход сработает всего один раз при входе в процедуру - это вход в цикл.
|
|
|
|
25.03.2011, 01:19
|
|
Прохожий
Регистрация: 06.05.2009
Сообщений: 4
Сказал спасибо: 1
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: STM8(S/L), первые впечатления
Ответ неверный, внимательнее надо быть.
__________________
To beer or not to beer?
That is a question...
|
|
|
|
25.03.2011, 01:24
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
|
Re: STM8(S/L), первые впечатления
Dr_Watson, Извиняюсь , забыл уточнить , что это ваш исходник...
__________________
Осторожно , злой кот
|
|
|
|
02.04.2011, 10:42
|
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: STM8(S/L), первые впечатления
Сообщение от Dr_Watson
|
Знакомый исходник ковыряете )
В ассемблере можно и так:
Код:
|
; unsigned int _lcd_putstr(unsigned char *s)
xdef __lcd_putstr
__lcd_putstr_0:
call __lcd_putchar ; выводим символ
incw X ; смещаем указатель к следующему
__lcd_putstr:
ld A,(X) ; берем очередной символ строки
jrne _lcd_putstr_0 ; не ноль - на вывод
ret |
Не очень красиво, но минус один переход
|
Океюшки.
По строкам (без меток, ессно):
1. Вход в процедуру, загрузка адреса буфера.
2. Вызов подпрограммы собственно вывода символа.
3. Инкремент адреса буфера.
4. Загрузка в аккумулятор символа для вывода.
5. Проверка на окончание строки, цикл.
6. Выход из процедуры.
Вопросы:
1. Откуда в аккумуляторе взялся первый символ для вывода?
2. Как догадались, что строка ещё не закончилась?
|
|
|
|
02.04.2011, 11:13
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
|
Re: STM8(S/L), первые впечатления
Сообщение от omercury
|
Вопросы:
1. Откуда в аккумуляторе взялся первый символ для вывода?
2. Как догадались, что строка ещё не закончилась?
|
Адрес строки - указатель в X . Передаем сами же .
Строка нультерминэйт.
__________________
Осторожно , злой кот
|
|
|
|
02.04.2011, 12:07
|
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: STM8(S/L), первые впечатления
Так в том-то и дело, что для первого символа их надо бы задать отдельно, без этого перехода их нету.... Также без него нет проверки первого символа на предмет окончания строки....
Кстати - ВСЕХ С ВОЗВРАЩЕНИЕМ!
ЗЫ.
Dosicus, рейтинг повышаешь - аж целых 3 сообщения одинаковых? ![Прикольно](images/smilies/icon_wink3.gif)
... тормознее всё стало.... и нету "цитаты выделенного" - неудобно. При клике на ник оппонента автоматом не вставляется в ответ. Борьба с вирями?
ЗЗЫ.
Компоненты в Нижнем
...вдруг интересно...
|
|
|
|
02.04.2011, 15:33
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
|
Re: STM8(S/L), первые впечатления
Сообщение от omercury
|
Так в том-то и дело, что для первого символа их надо бы задать отдельно, без этого перехода их нету.... Также без него нет проверки первого символа на предмет окончания строки....
|
Указатель , он именно и задает первый символ последовательности.
В данном случае указатель типа char на последовательность символов (строка char).
В процессе увеличиваем указатель ( адрес), пока (адрес)указатель не будет содержать 0 .
Код:
|
incw X ; увеличиваем адрес(перебираем строку)
__lcd_putstr:
ld A,(X) ; берем очередной символ строки
jrne _lcd_putstr_0 ; пока не 0 выводим
ret |
__________________
Осторожно , злой кот
Последний раз редактировалось dosikus; 02.04.2011 в 15:36.
|
|
|
|
02.04.2011, 18:28
|
|
Гражданин KAZUS.RU
Регистрация: 16.06.2005
Сообщений: 944
Сказал спасибо: 25
Сказали Спасибо 174 раз(а) в 123 сообщении(ях)
|
Re: STM8(S/L), первые впечатления
Сообщение от omercury
|
нету "цитаты выделенного" - неудобно.
|
Наоборот, стало удобнее. Выделил то, что надо, нажал на появившуюся кнопочку цитировать. И процитировал.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 15:55.
|
|