а чтобы не терялся бит при сдвиге, сдвиг нужно делать через перенос (rol ZH).
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Код: Выделить всё
#define __SFR_OFFSET 0
#include "avr/io.h"
/* Секция кода */
/*
1 0x000(1) RESET External Pin, Power-on Reset, Brown-out Reset, and Watchdog Reset
2 0x001 INT0 External Interrupt Request 0
3 0x002 INT1 External Interrupt Request 1
4 0x003 TIMER2 COMP Timer/Counter2 Compare Match
5 0x004 TIMER2 OVF Timer/Counter2 Overflow
6 0x005 TIMER1 CAPT Timer/Counter1 Capture Event
7 0x006 TIMER1 COMPA Timer/Counter1 Compare Match A
8 0x007 TIMER1 COMPB Timer/Counter1 Compare Match B
9 0x008 TIMER1 OVF Timer/Counter1 Overflow
10 0x009 TIMER0 OVF Timer/Counter0 Overflow
11 0x00A SPI, STC Serial Transfer Complete
12 0x00B USART, RXC USART, Rx Complete
13 0x00C USART, UDRE USART Data Register Empty
14 0x00D USART, TXC USART, Tx Complete
15 0x00E ADC ADC Conversion Complete
16 0x00F EE_RDY EEPROM Ready
17 0x010 ANA_COMP Analog Comparator
18 0x011 TWI Two-wire Serial Interface
19 0x012 SPM_RDY Store Program Memory Ready
*/
.section .text
.org 0x0000
rjmp RESET_vect
reti ; INT0
reti ; INT1
reti ; TIMER2_COMP
reti ; TIMER2_OVF
reti ; TIMER1_CAPT
reti ; TIMER1_COMPA
reti ; TIMER1_COMPB
reti ; TIMER1_OVF
reti ; TIMER0_OVF
reti ; SPI_STC
reti ; USART_RXC
reti ; USART_UDRE
reti ; USART_TXC
reti ; ADC
reti ; EE_RDY
reti ; ANA_COMP
reti ; TWI
reti ; SPM_RDY
RESET_vect:
ldi r16, RAMEND & 0xff
out SPL, r16
ldi r16, RAMEND >> 8
out SPH, r16
ldi r16, 0xff
out DDRC, r16
ldi r16, 0b00000000
out PORTC, r16
ldi ZL, lo8(variable)
ldi ZH, hi8(variable)
lsl ZL
rol ZH
lpm
out PORTC, r0
_main:
rjmp _main
variable:
.word 0xdead
Код: Выделить всё
ldi ZL, lo8(variable)
ldi ZH, hi8(variable)
lsl ZL
rol ZHldi ZL, lo8(variable*2)
ldi ZH, hi8(variable*2)
Код: Выделить всё
ldi ZL, lo8(variable)
ldi ZH, hi8(variable)
lsl ZL
rol ZH[/uquote]ldi ZL, lo8(variable*2)
ldi ZH, hi8(variable*2)
Код: Выделить всё
0<<1Код: Выделить всё
0<<1Код: Выделить всё
ldi ZL, lo8(table)
ldi ZH, hi8(table)