Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.96/294: Рейтинг темы: голосов - 294, средняя оценка - 4.96
sosus
0 / 0 / 0
Регистрация: 19.12.2012
Сообщений: 140
1

Ассемблер STM8

25.12.2012, 04:40. Просмотров 53245. Ответов 87
Метки нет (Все метки)

В связи с тем что ассемблер этих контроллеров описан очень плохо, и с ошибками открываю эту тему, и сразу же имеется вопрос:
как осуществить вычитание с переносом байта(константы) из слова с помощью sub и sbc?
Дело в том что пока я гружу в аккумулятор байт, т.к. sub и sbc работают только с аккумулятором, флаг переноса теряется. В результате получаю сложение слова с инвертированным байтом. Пока выкрутился так:
Код
   ld xh,a
subw x,#$003c
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.12.2012, 04:40
Ответы с готовыми решениями:

Еще один ассемблер для STM8 (ST7)
Наткнулся в инете на этот сайт. Вообще то этим кросс-ассемблером пользовался во времена i8031, но в...

Ищу людей кто может помочь протестировать ассемблер для STM8
Такое дело... в общем, бесплатный ассемблер для STM8 скоро появится в свободном виде под лицензией...

кто сделает экспорт SDCC STM8 -> IAR STM8 ?
а то труды пропадут... https://github.com/eddyem/STM8_samples

STM8 прошивка
Подскажите новичку и сильно не пинайте. Есть плата от автомобильной головы, построена на...

IAR for STM8 V2.10
Коллеги, ни у кого не завалялась инсталляха IAR for STM8 V2.10? Можно и не крякнутый. На...

87
Bytt
0 / 0 / 0
Регистрация: 22.08.2009
Сообщений: 525
27.12.2012, 10:08 2
Цитата Сообщение от sosus
Дело в том что пока я гружу в аккумулятор байт, т.к. sub и sbc работают только с аккумулятором, флаг переноса теряется.
А почему именно вы так решили?
0
sosus
0 / 0 / 0
Регистрация: 19.12.2012
Сообщений: 140
28.12.2012, 17:19 3
А почему именно вы так решили?

<Изображение удалено>

Из мануала.
Флаг смотрел в дебагере, при выполнении LD он снимается, хотя в мануале про это ничего нет.
0
Bytt
0 / 0 / 0
Регистрация: 22.08.2009
Сообщений: 525
28.12.2012, 23:40 4
[QUOTE="sosus"][QUOTE="Цитата:[/QUOTE]
А почему именно вы так решили?
LD_SUB.JPG
Из мануала.
Флаг смотрел в дебагере, при выполнении LD он снимается, хотя в мануале про это ничего нет.
В руководстве видно, что инструкция LD изменяет только флаги Z и N, флаг C не меняется. Так что вопрос остается: каким образом вы увидели изменение флага C после выполнения инструкции LD?
0
28.12.2012, 23:40
sosus
0 / 0 / 0
Регистрация: 19.12.2012
Сообщений: 140
29.12.2012, 01:46 5
Код
   ld a,xl
sub a,#$3C
ld xl,a
ld a,xh
sbc a,#0
ld xh,a
Прошу прощения, похоже это я гдето тупил, сейчас все чотко рабтает
0
dosykus_2
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 4,017
29.12.2012, 10:30 6
А как же быть с вашим постулатом, уважаемый ?
Цитата Сообщение от sosus
В связи с тем что ассемблер этих контроллеров описан очень плохо, и с ошибками ...
У вас пальпация опережает мыслительные функции?
Дайте угадаю, предыдущие, терзаемые вами МК были исключительно AVR ?
Скачайте по этой ссылке http://www.st.com/internet/som/TECHN...CD00161709.pdf
PM0044: STM8 CPU programming manual .
0
sosus
0 / 0 / 0
Регистрация: 19.12.2012
Сообщений: 140
29.12.2012, 14:30 7
Код
В связи с тем что ассемблер этих контроллеров описан очень плохо, и с ошибками ...
Если знаете ответ напишите его, мануалы уже перечитаны
PM0044
стр.61(73)
Mmimo SRLW, Dessription: Shift word right arithmetic - сдвиг оказался логическим

Mmimo JRF, Dessription: Nener Jump - это описание как понять можно?

и в чем разница между JRT и JRA?
0
dosykus_2
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 4,017
29.12.2012, 16:07 8
Цитата Сообщение от sosus
стр.61(73)
Mmimo SRLW, Dessription: Shift word right arithmetic - сдвиг оказался логическим
Типичная опечатка. Мнемоника указывает именно на логический сдвиг.

Цитата Сообщение от sosus
Mmimo JRF, Dessription: Nener Jump - это описание как понять можно?
Никогда не переходить. Что заглушки не имеют право на существование?

Цитата Сообщение от sosus
и в чем разница между JRT и JRA?
А где здесь ошибка? Что неужели не прыгают?
Другое дело - зачем их обе задокументировали...
0
Bytt
0 / 0 / 0
Регистрация: 22.08.2009
Сообщений: 525
29.12.2012, 17:01 9
Цитата Сообщение от sosus
Код:
В связи с тем что ассемблер этих контроллеров описан очень плохо, и с ошибками ... Если знаете ответ напишите его, мануалы уже перечитаны
PM0044
стр.61(73)
Mmimo SRLW, Dessription: Shift word right arithmetic - сдвиг оказался логическим

Mmimo JRF, Dessription: Nener Jump - это описание как понять можно?

и в чем разница между JRT и JRA?
Не знаю как у вас, а у меня а руководстве черным по белому написано: Shift Right Logical Word
А что касается инструкций JRT и JRA, то разницы между ними нет. Другое дело, что обычно для этих используется мнемоника JR. И тогда никаких не возникает.
0
dosykus_2
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 4,017
29.12.2012, 17:50 10
Цитата Сообщение от Bytt
Не знаю как у вас, а у меня а руководстве черным по белому написано: Shift Right Logical Word
Он про сводную таблицу:


<Изображение удалено>
0
Bytt
0 / 0 / 0
Регистрация: 22.08.2009
Сообщений: 525
29.12.2012, 17:56 11
Цитата Сообщение от dosykus_2
Он про сводную таблицу:
Спасибо! Понял. Просто я в сводную таблицу не заглядывал.
0
sosus
0 / 0 / 0
Регистрация: 19.12.2012
Сообщений: 140
30.12.2012, 01:55 12
Как и в каких случаях используется директива JRF? Эта команда для меня абсолютно новая, можете разъяснить?
0
yr0407
0 / 0 / 0
Регистрация: 31.10.2012
Сообщений: 51
30.12.2012, 02:17 13
Цитата Сообщение от sosus
Как и в каких случаях используется директива JRF? Эта команда для меня абсолютно новая, можете разъяснить?
Считай, что это полный аналог команды NOP.
И вот тут про нее немного есть.
0
sosus
0 / 0 / 0
Регистрация: 19.12.2012
Сообщений: 140
30.12.2012, 04:27 14
Спасибо, похоже это самый ленивый камень. Больше я нигде не видел комбинацию:
NOP - ниче не делать, JRF - никуда не ходить :) Всех с наступающим!!!
0
sosus
0 / 0 / 0
Регистрация: 19.12.2012
Сообщений: 140
01.01.2013, 00:37 15
Всех с праздником! После отладки пришло время оптимизации кода с целью уменьшения процессорного времени и объема, программа в основном работает с ОЗУ, но меня немного смущает постоянная загрузка/выгрузка в аккумулятор, и появилось желание избавиться от такого рода операций использовав указатель стека. Из мануала видно что операторы работают как с аккумулятором так и с указателем стека. Кто работал со стеком в качестве операнда, и какие могут быть грабли? Мне известно про него только то что содержимое стека не должно отличаться после входа в прерывание и до выхода из него. Буду благодарен если подкинете пару примеров.
0
BykTiho
0 / 0 / 0
Регистрация: 12.04.2010
Сообщений: 3,260
01.01.2013, 02:48 16
Если содержимое стека будет отличаться, то ничего не взорвется. Оно не должно отличаться, чтобы не сбивалась последовательность выполнения программы, и возврат всегда происходил на следующую команду после вызова процедуры. Однако, история знает примеры, когда в подпрограмме специально меняется содержимое стека, чтобы по программе ret вернуться не в место вызова подпрограммы. Но если на это решиться, то следует учитывать, что это требует особой внимательности и тщательных расчетов.
0
OmikymForti
0 / 0 / 0
Регистрация: 18.03.2010
Сообщений: 1,116
02.01.2013, 10:14 17
Цитата Сообщение от BykTiho
Однако, история знает примеры, когда в подпрограмме специально меняется содержимое стека, чтобы по программе ret вернуться не в место вызова подпрограммы. Но если на это решиться, то следует учитывать, что это требует особой внимательности и тщательных расчетов.
На Speccy постоянно так делали. Иногда просто меняли указатель стека после распаковки очередного блока кода и делали ret.
0
sosus
0 / 0 / 0
Регистрация: 19.12.2012
Сообщений: 140
02.01.2013, 21:17 18
Неужели использовать указатель стека для ветвлений удобно? Возможно таким образом дизассемблирование усложняли..
0
Kotz
0 / 0 / 0
Регистрация: 28.01.2010
Сообщений: 570
02.01.2013, 21:35 19
Цитата Сообщение от OmykymForti
На Speccy постоянно так делали. Иногда просто меняли указатель стека после распаковки очередного блока кода и делали ret.
В нынешние времена за такое принято... канделябром, хотя решение изящное... ;)
В последний раз встречал такое для перенаправления вектора прерывания в зависимости от обстоятельств его возникновения (это было для 51, но не столь существенно).Суть в том, что адрес перехода загонялся в переменную, а её в обработчике прерывания заталкивали в стек и делали ret. Получалось очень компактно.
0
OmikymForti
0 / 0 / 0
Регистрация: 18.03.2010
Сообщений: 1,116
04.01.2013, 19:55 20
Цитата Сообщение от Kotz
Суть в том, что адрес перехода загонялся в переменную, а её в обработчике прерывания заталкивали в стек и делали ret. Получалось очень компактно.
И из прерывания возвращались совсем не туда, откуда приходили :) Нехитрые способы обойти дизассемблер-трассировщик. А прятать было что, во времена Dimos и Gifts.
0
04.01.2013, 19:55
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.01.2013, 19:55

stm8 bootloader
Всем привет! Нашел инфу, что STM8s можно прошить через UART посредством встроенного бутлоадера, без...

STM8 и сегментный ЖК
Сегодня подключил обычный 4-х разрядный сегментный индикатор. Оказывается его использование гораздо...

STM8 в работе...
По ходу юзания, появляются вопросы, которые вроде уже не вписываются в тему &quot;STM8 Самое начало&quot;,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru