Администрация форума не несёт ответственности за достоверность информации и оставляет за собой право редактировать или в особых случаях даже удалять посты без предупреждения. Спасибо за понимание.

Программирование ATMEL в BASCOM.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Программирование ATMEL в BASCOM. » О программе BASCOM AVR/8051 » Пару вопросиков по ASM в BASCOM


Пару вопросиков по ASM в BASCOM

Сообщений 1 страница 16 из 16

1

Ps2_stop:
      ldi r16,&b00010000                                    'ïðè íåóäà÷å âûñòàâèì îøèáêó
      sbis pinc,0                                           'ñòîïîâûé áèò âñåãäà "1"
      rjmp Ps2_exit
      lds r16, {Ps2_counter}
      inc r16
      cpi r16,15
      brsh PS2_overflov
      sts {Ps2_counter},r16
      push r26
      push r27
      Loadadr Ps2_buffer , X
      clr r17
      add r26,r16
      adc r27,r17
      lds r16,{Ps2_key}
      st x,r16
      pop r27
      pop r26

      clr r16
      rjmp Ps2_exit
-----------------------------------
Пойдёт такая реализация буфера приёма?

0

2

-NMi- написал(а):

Пойдёт такая реализация буфера приёма?

Чего принимать собираетесь?

0

3

PS/2 клаву, Data на любой пин, CLC на Int0/1 по спаду фронта. Это типа буфер приёма не фильтрованный.

0

4

Кто знает, зачем так делать с регистрами стёка? Может защита какая?

ROM:1039                 push    r10
ROM:103A                 push    r11
ROM:103B                 push    r12
ROM:103C                 push    r13
ROM:103D                 push    r14
ROM:103E                 push    r15
ROM:103F                 push    r16
ROM:1040                 push    r17
ROM:1041                 push    r28
ROM:1042                 push    r29
ROM:1043                 in      r28, SPL
ROM:1044                 in      r29, SPH
ROM:1045                 sbiw    r28, 0xC
ROM:1046                 in      r0, SREG
ROM:1047                 cli
ROM:1048                 out     SPH, r29
ROM:1049                 out     SREG, r0
ROM:104A                 out     SPL, r28
ROM:104B                 in      r0, MCUCSR
ROM:104C                 sbrc    r0, 0

0

5

Комец процедуры:

ROM:1AC3                 adiw    r28, 1
ROM:1AC4                 cli
ROM:1AC5                 out     SPH, r29
ROM:1AC6                 out     SPL, r28
ROM:1AC7                 pop     r29
ROM:1AC8                 pop     r28
ROM:1AC9                 pop     r31
ROM:1ACA                 pop     r30
ROM:1ACB                 pop     r27
ROM:1ACC                 pop     r26
ROM:1ACD                 pop     r25
ROM:1ACE                 pop     r24
ROM:1ACF                 pop     r23
ROM:1AD0                 pop     r22
ROM:1AD1                 pop     r21
ROM:1AD2                 pop     r20
ROM:1AD3                 pop     r19
ROM:1AD4                 pop     r18
ROM:1AD5                 pop     r17
ROM:1AD6                 pop     r16
ROM:1AD7                 pop     r0
ROM:1AD8                 out     SREG, r0
ROM:1AD9                 pop     r0
ROM:1ADA                 pop     r1
ROM:1ADB                 reti

0

6

обычная комплексная операция с прерываниями
в коде всё это можно оптимизировать (в зависимости от конкретной задачи)

0

7

Это:

ROM:1043                 in      r28, SPL
ROM:1044                 in      r29, SPH
ROM:1045                 sbiw    r28, 0xC

и Это:

ROM:1AC3                 adiw    r28, 1
ROM:1AC4                 cli
ROM:1AC5                 out     SPH, r29
ROM:1AC6                 out     SPL, r28

ЗАЧЕМ??? Зачем трогать стёк то?

0

8

кусками ничего непонятно
обычное, двухрегистровое сложение с числом

0

9

А стёк зачем трогать то? Проверять откуда вызов пришёл чтоли?
Я счас раздезю прям кусок прерывания целиком. Чет терзают меня сомнения, похож это защита от трассировки и реверс-инжиниринга.

0

10

Вот раздеза?

ROM:1A91                 ; public USART0_TXC
ROM:1A91 USART0_TXC:                             ; CODE XREF: ROM:002Ej
ROM:1A91                 push    r1
ROM:1A92                 push    r0
ROM:1A93                 in      r0, SREG
ROM:1A94                 push    r0
ROM:1A95                 clr     r1
ROM:1A96                 push    r16
ROM:1A97                 push    r17
ROM:1A98                 push    r18
ROM:1A99                 push    r19
ROM:1A9A                 push    r20
ROM:1A9B                 push    r21
ROM:1A9C                 push    r22
ROM:1A9D                 push    r23
ROM:1A9E                 push    r24
ROM:1A9F                 push    r25
ROM:1AA0                 push    r26
ROM:1AA1                 push    r27
ROM:1AA2                 push    r30
ROM:1AA3                 push    r31
ROM:1AA4                 push    r28
ROM:1AA5                 push    r29
ROM:1AA6                 in      r28, SPL   ----------
ROM:1AA7                 in      r29, SPH              \
ROM:1AA8                 sbiw    r28, 1                  -- Это зачем? Нафиг стёк трогать то???
ROM:1AA9                 out     SPH, r29             /
ROM:1AAA                 out     SPL, r28 ----------

0

11

на самом деле там выходит бесполезное теледвижение, оно никак не влияет на выход
вначале адрес стека вычитают на 1
а потом увеличивают на 1
ничего не меняется

Код:
ROM:1A91                 ; public USART0_TXC
ROM:1A91 USART0_TXC:                             ; CODE XREF: ROM:002Ej
ROM:1A91                 push    r1
ROM:1A92                 push    r0
ROM:1A93                 in      r0, SREG
ROM:1A94                 push    r0
ROM:1A95                 clr     r1
ROM:1A96                 push    r16
ROM:1A97                 push    r17
ROM:1A98                 push    r18
ROM:1A99                 push    r19
ROM:1A9A                 push    r20
ROM:1A9B                 push    r21
ROM:1A9C                 push    r22
ROM:1A9D                 push    r23
ROM:1A9E                 push    r24
ROM:1A9F                 push    r25
ROM:1AA0                 push    r26
ROM:1AA1                 push    r27
ROM:1AA2                 push    r30
ROM:1AA3                 push    r31
ROM:1AA4                 push    r28
ROM:1AA5                 push    r29
ROM:1AA6                 in      r28, SPL   ----------
ROM:1AA7                 in      r29, SPH              \
ROM:1AA8                 sbiw    r28, 1                  -- Это зачем? Нафиг стёк трогать то???
ROM:1AA9                 out     SPH, r29             /
ROM:1AAA                 out     SPL, r28 ----------
------------------------------------------
ROM:1AC3                 adiw    r28, 1
ROM:1AC4                 cli
ROM:1AC5                 out     SPH, r29
ROM:1AC6                 out     SPL, r28
ROM:1AC7                 pop     r29
ROM:1AC8                 pop     r28
ROM:1AC9                 pop     r31
ROM:1ACA                 pop     r30
ROM:1ACB                 pop     r27
ROM:1ACC                 pop     r26
ROM:1ACD                 pop     r25
ROM:1ACE                 pop     r24
ROM:1ACF                 pop     r23
ROM:1AD0                 pop     r22
ROM:1AD1                 pop     r21
ROM:1AD2                 pop     r20
ROM:1AD3                 pop     r19
ROM:1AD4                 pop     r18
ROM:1AD5                 pop     r17
ROM:1AD6                 pop     r16
ROM:1AD7                 pop     r0
ROM:1AD8                 out     SREG, r0
ROM:1AD9                 pop     r0
ROM:1ADA                 pop     r1
ROM:1ADB                 reti

бесполезное дергание  :D
правда попа может получится, когда второе прерывание прелитит

Отредактировано RDW (2015-04-15 18:12:03)

0

12

может это какое-то ограничение демо версии?

0

13

Да вроде всё работает. Нифига не демо версия. В этом шнурке вообще много чего интересного есть в коде. Вот и стало интересно, потому что не понимаю как работает. Могу дамп дать для анализа.

0

14

Не, спасибо (я не для того бэйсик покупал, чтобы потом в этом ковыряться).  :D
Можете попробовать на офф сайте накатать вопрос.

0

15

Так, стоп! Это никак не относится к баскому! Это реверс с готового покупного устройства!

0

16

А как писать библиотеки к Bascom? В текстовом редакторе или есть соответствующая программа?

0


Вы здесь » Программирование ATMEL в BASCOM. » О программе BASCOM AVR/8051 » Пару вопросиков по ASM в BASCOM