roboforum.ru

Технический форум по робототехнике.

7-ми сегментные индикаторы

Программирование микроконтроллеров AVR, PIC, ARM.
Разработка и изготовление печатных плат для модулей.

Сообщение aliens » 09 фев 2005, 04:01

Хочу вот спросить про переменные в асемблере
Как записать значение больше 255? регистр вроде не подойдет, у него то всего 255 значений,
а как зарезервировать и сохранить(а потом и считать)в память определенное
кол-во байтов? (если это возможно конечно) Вот читаю команды AVR'ов и вижу обозначение
.BYTE - оно подходит для моей задачи??
aliens
 
Сообщения: 171
Зарегистрирован: 26 окт 2004, 14:16
Откуда: Севастополь сити...

Сообщение setar » 09 фев 2005, 12:20

Может быть я не доконца постиг дзена программирования на ASM ;)
но кажется никак, точнее по частям.

Есть правда ещё 16 битные регистры Х,У,Z но они кажется только для адресации.

Вот приер работы с большим числом.
Код: Выделить всёРазвернуть
;****************************************************************************************************
;*
;*           Подпрограмма вычисления квадратного корня для 24-ти битного аргумента                  *
;*         (c) 1998 Alexander Trush   http://troosh.pp.ru   troosh (at) kbotd : ru
;*
;
;   Вы можете свободно использовать, распространять, модифицировать этот
;   код до тех пор, пока вы указываете моё авторство и распространяете
;   это требование. Кроме того, я хотел бы получать уведомление о
;   применении этого кода по e-mail (troosh (at) kbotd : ru).

sqrt24:         ldi     mask,1         ; Используем маску в регистре, т.к. команды EORI нет...
      ldi     count,12      ; Последний бит значения корня не требует специального
                  ; подхода - есть запас от потери битов аж 4 бита
      clr16   work_h, work_l
      clr16   dist_h, dist_l      ; Очистка накопителя значения корня


sqrt24_1:       cpi     src_h, 64
      cpc     work_l, dist_l
      cpc     work_h, dist_h
      brcs    sqrt24_2
        subi  src_h, 64
        sbc   work_l, dist_l
        sbc   work_h, dist_h
sqrt24_2:       rol     dist_l      
      rol     dist_h      
      eor     dist_l, mask      ; Инверсия младшего бита значания корня,
                  ; т.к. при заёме должны писать 0, и 1 при отсутствии
      lsl     src_l         ; Сдвиг аргумента на 2 бита
      rol     src_m         ; work_h:work_l:src_h:src_m:src_l <<= 2
      rol     src_h
      rol     work_l
      rol     work_h

      lsl     src_l
      rol     src_m
      rol     src_h
      rol     work_l
      rol     work_h

      dec     count         ; Получили ли все биты значения корня кроме последнего?..
      brne    sqrt24_1


      cp      dist_l, work_l
      cpc     dist_h, work_h
      adc     dist_l, src_m      ; Команды ADCI нет, а src_m точно здесь равен 0
      adc     dist_h, src_m
      ret
;******************************************************************************
Аватара пользователя
setar
Site Admin
 
Сообщения: 10984
Зарегистрирован: 04 окт 2004, 12:58
Откуда: St.Petersburg
Skype: taranenko.sergey
ФИО: Сергей Тараненко

Пред.

Вернуться в Микроконтроллеры

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 17