Ассемблер (ASM) для AVR в вопросах и ответах

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
shonty
Мучитель микросхем
Сообщения: 473
Зарегистрирован: Ср янв 11, 2012 18:20:26

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение shonty »

Adrift писал(а):а gvar2 - в RAM.
небольшое уточнение )

"подразумевает изначальное хранение во FLASH, и последующее копирование в SRAM после сброса RESET" (c)
Adrift
Вымогатель припоя
Сообщения: 540
Зарегистрирован: Вт окт 01, 2024 15:22:33

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Adrift »

[uquote="shonty",url="/forum/viewtopic.php?p=4658009#p4658009"]небольшое уточнение )

"подразумевает изначальное хранение во FLASH, и последующее копирование в SRAM после сброса RESET" (c)[/uquote]
Нет, начальное значение gvar2 не может храниться во флеше, т.к. оно вычисляется в рантайме. Точнее оно там не обязательно будет. Если окажется, что результат calcVar() из другого модуля таки константа, тогда да, но в моем примере calcVar() читает значение с порта )
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15553
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение BOB51 »

Интересно...
Тема вроде про ассемблер, а под насыпали разборок с Си...
8)
Аватара пользователя
Just_Fluffy
Вымогатель припоя
Сообщения: 532
Зарегистрирован: Ср июн 29, 2022 16:25:45

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Just_Fluffy »

BOB51, Да я попыталась вернуть тему от алгоритмов дребезга к асму, так тут же набежали умничать, данные в коде - это код или данные)))))
Белая и Пушистая
Аватара пользователя
ДядяВован
Мучитель микросхем
Сообщения: 491
Зарегистрирован: Вс окт 25, 2020 22:13:25
Откуда: Смоленск

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение ДядяВован »

Вот-вот, и я предлагаю вернуться к asm
Что там получается с определением одного единичного бита? У меня вроде 6 слов (12 байт)
Аватара пользователя
Just_Fluffy
Вымогатель припоя
Сообщения: 532
Зарегистрирован: Ср июн 29, 2022 16:25:45

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Just_Fluffy »

ДядяВован, код в студию. (А то там любитель современного ассемблера в 5 слов уложился вроде)
Белая и Пушистая
Adrift
Вымогатель припоя
Сообщения: 540
Зарегистрирован: Вт окт 01, 2024 15:22:33

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Adrift »

[uquote="Just_Fluffy",url="/forum/viewtopic.php?p=4658089#p4658089"]А то там любитель современного ассемблера в 5 слов уложился вроде[/uquote]
Так уложился или вроде уложился? )

Добавлено after 10 minutes 36 seconds:
[uquote="ДядяВован",url="/forum/viewtopic.php?p=4658084#p4658084"]У меня вроде 6 слов (12 байт)[/uquote]
У меня тоже, можно чуть модифицировать чтоб не 1 возвращало, а было две ветки, но там линейный код находящий единичный бит за 6 тактов, а у вас цикл, так что нужно или хотя бы тоже 6 тактов, или 5 слов )
Аватара пользователя
ДядяВован
Мучитель микросхем
Сообщения: 491
Зарегистрирован: Вс окт 25, 2020 22:13:25
Откуда: Смоленск

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение ДядяВован »

[uquote="Just_Fluffy",url="/forum/viewtopic.php?p=4658089#p4658089"]ДядяВован, код в студию[/uquote]
Так на предыдущей странице выкладывал

Добавлено after 52 minutes 41 second:
Adrift писал(а):линейный код находящий единичный бит за 6 тактов

Код: Выделить всё

      cpi r0,2
      brlo end
      mov r1,r0
      dec r1
      and r0,r1
      inc r0
Об этом коде речь?
ИМХО не всё так однозначно. Нет возможности сравнить r0 с двоечкой.
Предлагаю его немного изменить.

Код: Выделить всё

ldi r16, 1
cp r0,r16
breq метка_имеем_единичный_бит=1
; здесь бит0 не равен "1"
Adrift
Вымогатель припоя
Сообщения: 540
Зарегистрирован: Вт окт 01, 2024 15:22:33

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Adrift »

[uquote="ДядяВован",url="/forum/viewtopic.php?p=4658099#p4658099"]ИМХО не всё так однозначно. Нет возможности сравнить r0 с двоечкой.[/uquote]
Я на AVR ассме писал много лет назад и сейчас у меня нет AVR, потому код проверил shonty и он, видимо, просто подставил другой регистр, ведь никто не регламентировал использование именно r0. А когда я говорил про две ветки, то подразумевал следующее, тут уже и r0 можно использовать:

Код: Выделить всё

      tst r0
      breq notSingleBit
      mov r1,r0
      dec r1
      and r0,r1
      brne notSingleBit
singleBit:
Аватара пользователя
shonty
Мучитель микросхем
Сообщения: 473
Зарегистрирован: Ср янв 11, 2012 18:20:26

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение shonty »

Adrift писал(а):потому код проверил shonty и он, видимо, просто подставил другой регистр,
да, R18 подставлял.. но не стал вдаваться в подробности)

Но если писать коды, то, думаю, что с R16 и выше нужно начинать. Всё что ниже R16 - там использование ограничено.
Adrift
Вымогатель припоя
Сообщения: 540
Зарегистрирован: Вт окт 01, 2024 15:22:33

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Adrift »

Новая версия:

Код: Выделить всё

      mov r16,r0
      subi r16,1
      brcs notSingleBit
      and r16,r0
      brne notSingleBit
singleBit:
Аватара пользователя
ДядяВован
Мучитель микросхем
Сообщения: 491
Зарегистрирован: Вс окт 25, 2020 22:13:25
Откуда: Смоленск

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение ДядяВован »

ИМХО задача состоит в определении, что в байте есть единичный бит в каком-либо разряде. Как это сделать без цикла я не знаю, а в цикле решение уже приводил.
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15553
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение BOB51 »

Можно табличным способом.
Быстро и минимум команд, но таблица много места в ПЗУ займёт (256 байт или более, если команды возврата ставить) .
:roll:
Аватара пользователя
shonty
Мучитель микросхем
Сообщения: 473
Зарегистрирован: Ср янв 11, 2012 18:20:26

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение shonty »

Так Adrift же сделал без цикла и без таблиц. Довольно таки оригинально.
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15553
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение BOB51 »

Единичный бит в любом месте.
Т. е.
Соответствие любой из восьми возможных масок:
00000001
00000010
00000100
00001000
00010000
00100000
01000000
10000000
Тут или массив или циклический сдвиг маски со счётчиком сдвигов. Флага паритета у АВРок ведь нету.
:roll:
А то, что выше у Вас даст лишь контроль чётности, но не учитывает, что битов в проверяемом байте может быть больше, чем один.
:wink:
Аватара пользователя
shonty
Мучитель микросхем
Сообщения: 473
Зарегистрирован: Ср янв 11, 2012 18:20:26

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение shonty »

BOB51 писал(а):А то, что выше у Вас даст лишь контроль чётности, но не учитывает, что битов в проверяемом байте может быть больше, чем один.
Не контроль чётности, а вполне рабочий код. Как раз определяет количество битов больше чем 1.
На практике так же провено.

Добавлено after 3 minutes 22 seconds:
BOB51, посмотрите внимательно, там еденица вычитается из младшего разряда, и инструкция and как раз и определяет, установлено ли больше битов, чем один.

Добавлено after 25 minutes 52 seconds:
Если на примере, то вот так:

0001_0000 - 0x1 = 0000_1111
0001_0000 && 0000_1111 = 0

0001_0100 - 0x1 = 0001_0011
0001_0100 && 0001_0011 = 0001_0000 (не равно 0)
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15553
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение BOB51 »

Верно...
Любой набор единиц старше младшего разряда даст "не равно нулю".
:)
Аватара пользователя
ДядяВован
Мучитель микросхем
Сообщения: 491
Зарегистрирован: Вс окт 25, 2020 22:13:25
Откуда: Смоленск

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение ДядяВован »

shonty писал(а):на примере, то вот так
Спасибо! Я "вкурил" наконец-то)))
Adrift безоговорочный победитель :beer:
Аватара пользователя
Just_Fluffy
Вымогатель припоя
Сообщения: 532
Зарегистрирован: Ср июн 29, 2022 16:25:45

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Just_Fluffy »

Adrift, победитель! :kiss:
Белая и Пушистая
Аватара пользователя
shonty
Мучитель микросхем
Сообщения: 473
Зарегистрирован: Ср янв 11, 2012 18:20:26

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение shonty »

Ну вот) конкурс завершился :) теперь и про дребезг можно :))
Ответить

Вернуться в «AVR»