Code:
SBI - Set Bit in I/O Register
Description:
Sets a specified bit in an I/O register. This instruction operates on the lower 32 I/O registers - addresses 0-31.
Operation:
(i)I/O(A,b) ← 1
Syntax: Operands: Program Counter:
(i)SBI A,b 0 ≤ A ≤ 31, 0 ≤ b ≤ 7 PC ← PC + 1
16-bit Opcode:
Status Register (SREG) and Boolean Formula:
I |
T |
H |
S |
V |
N |
Z |
C |
- |
- |
- |
- |
- |
- |
- |
- |
Example:
out $1E,r0 ; Write EEPROM address
sbi $1C,0 ; Set read bit in EECR
in r1,$1D ; Read EEPROM data
Words: 1 (2 bytes)
Cycles: 2
Cycles xmega/AVR8L: 1
Natürlich steht da drin auch z.B. die Länge des Befehls, der Maschinencode für den Befehl selbst sowie die Ausführungsdauer in Maschinencyclen :
Code:
ALCo.elf: file format elf32-avr
Sections:
Idx Name Size VMA LMA File off Algn
0 .data 00000b08 00800100 000048fe 000049b2 2**0
CONTENTS, ALLOC, LOAD, DATA
1 .text 000048fe 00000000 00000000 000000b4 2**1
CONTENTS, ALLOC, LOAD, READONLY, CODE
2 .bss 0000037a 00800c08 00800c08 000054ba 2**0
ALLOC
3 .eeprom 00000315 00810000 00810000 000054ba 2**0
CONTENTS, ALLOC, LOAD, DATA
4 .debug_aranges 00000020 00000000 00000000 000057cf 2**0
CONTENTS, READONLY, DEBUGGING
5 .debug_pubnames 000008ac 00000000 00000000 000057ef 2**0
CONTENTS, READONLY, DEBUGGING
6 .debug_info 00002c39 00000000 00000000 0000609b 2**0
CONTENTS, READONLY, DEBUGGING
7 .debug_abbrev 000003e9 00000000 00000000 00008cd4 2**0
CONTENTS, READONLY, DEBUGGING
8 .debug_line 000039cd 00000000 00000000 000090bd 2**0
CONTENTS, READONLY, DEBUGGING
9 .debug_frame 000005a0 00000000 00000000 0000ca8c 2**2
CONTENTS, READONLY, DEBUGGING
10 .debug_str 000007bc 00000000 00000000 0000d02c 2**0
CONTENTS, READONLY, DEBUGGING
11 .debug_loc 000013b9 00000000 00000000 0000d7e8 2**0
CONTENTS, READONLY, DEBUGGING
12 .debug_ranges 000001b0 00000000 00000000 0000eba1 2**0
CONTENTS, READONLY, DEBUGGING
Disassembly of section .text:
00000000 <__vectors>:
0: 0c 94 46 00 jmp 0x8c ; 0x8c <__ctors_end>
4: 0c 94 65 00 jmp 0xca ; 0xca <__bad_interrupt>
8: 0c 94 65 00 jmp 0xca ; 0xca <__bad_interrupt>
c: 0c 94 65 00 jmp 0xca ; 0xca <__bad_interrupt>
10: 0c 94 65 00 jmp 0xca ; 0xca <__bad_interrupt>
14: 0c 94 65 00 jmp 0xca ; 0xca <__bad_interrupt>
18: 0c 94 65 00 jmp 0xca ; 0xca <__bad_interrupt>
1c: 0c 94 65 00 jmp 0xca ; 0xca <__bad_interrupt>
20: 0c 94 65 00 jmp 0xca ; 0xca <__bad_interrupt>
24: 0c 94 45 0a jmp 0x148a ; 0x148a <__vector_9>
28: 0c 94 65 00 jmp 0xca ; 0xca <__bad_interrupt>
2c: 0c 94 65 00 jmp 0xca ; 0xca <__bad_interrupt>
30: 0c 94 65 00 jmp 0xca ; 0xca <__bad_interrupt>
34: 0c 94 e6 06 jmp 0xdcc ; 0xdcc <__vector_13>
38: 0c 94 cc 09 jmp 0x1398 ; 0x1398 <__vector_14>
3c: 0c 94 65 00 jmp 0xca ; 0xca <__bad_interrupt>
40: 0c 94 65 00 jmp 0xca ; 0xca <__bad_interrupt>
44: 0c 94 65 00 jmp 0xca ; 0xca <__bad_interrupt>
48: 0c 94 65 00 jmp 0xca ; 0xca <__bad_interrupt>
4c: 0c 94 65 00 jmp 0xca ; 0xca <__bad_interrupt>
50: 0c 94 a4 00 jmp 0x148 ; 0x148 <__vector_20>
54: 0c 94 d3 00 jmp 0x1a6 ; 0x1a6 <__vector_21>
58: 0c 94 65 00 jmp 0xca ; 0xca <__bad_interrupt>
5c: 0c 94 65 00 jmp 0xca ; 0xca <__bad_interrupt>
60: 0c 94 26 0b jmp 0x164c ; 0x164c <__vector_24>
64: 0c 94 65 00 jmp 0xca ; 0xca <__bad_interrupt>
68: 0c 94 48 01 jmp 0x290 ; 0x290 <__vector_26>
6c: 0c 94 65 00 jmp 0xca ; 0xca <__bad_interrupt>
70: 0c 94 65 00 jmp 0xca ; 0xca <__bad_interrupt>
74: 0c 94 65 00 jmp 0xca ; 0xca <__bad_interrupt>
78: 0c 94 65 00 jmp 0xca ; 0xca <__bad_interrupt>
7c: 0c 94 65 00 jmp 0xca ; 0xca <__bad_interrupt>
80: 0c 94 65 00 jmp 0xca ; 0xca <__bad_interrupt>
84: 0c 94 65 00 jmp 0xca ; 0xca <__bad_interrupt>
88: 0c 94 65 00 jmp 0xca ; 0xca <__bad_interrupt>
0000008c <__ctors_end>:
8c: 11 24 eor r1, r1
8e: 1f be out 0x3f, r1 ; 63
90: cf ef ldi r28, 0xFF ; 255
92: d0 e4 ldi r29, 0x40 ; 64
94: de bf out 0x3e, r29 ; 62
96: cd bf out 0x3d, r28 ; 61
00000098 <__do_copy_data>:
98: 1c e0 ldi r17, 0x0C ; 12
9a: a0 e0 ldi r26, 0x00 ; 0
9c: b1 e0 ldi r27, 0x01 ; 1
9e: ee ef ldi r30, 0xFE ; 254
a0: f8 e4 ldi r31, 0x48 ; 72
a2: 00 e0 ldi r16, 0x00 ; 0
a4: 0b bf out 0x3b, r16 ; 59
a6: 02 c0 rjmp .+4 ; 0xac <__do_copy_data+0x14>
a8: 07 90 elpm r0, Z+
aa: 0d 92 st X+, r0
ac: a8 30 cpi r26, 0x08 ; 8
ae: b1 07 cpc r27, r17
b0: d9 f7 brne .-10 ; 0xa8 <__do_copy_data+0x10>
000000b2 <__do_clear_bss>:
b2: 1f e0 ldi r17, 0x0F ; 15
b4: a8 e0 ldi r26, 0x08 ; 8
b6: bc e0 ldi r27, 0x0C ; 12
b8: 01 c0 rjmp .+2 ; 0xbc <.do_clear_bss_start>
000000ba <.do_clear_bss_loop>:
ba: 1d 92 st X+, r1
000000bc <.do_clear_bss_start>:
bc: a2 38 cpi r26, 0x82 ; 130
be: b1 07 cpc r27, r17
c0: e1 f7 brne .-8 ; 0xba <.do_clear_bss_loop>
c2: 0e 94 1a 22 call 0x4434 ; 0x4434 <main>
c6: 0c 94 7d 24 jmp 0x48fa ; 0x48fa <_exit>
000000ca <__bad_interrupt>:
ca: 0c 94 00 00 jmp 0 ; 0x0 <__vectors>
000000ce <init_uart0>:
// count up and wrap around
// ============================================================================== =
void init_uart0( u16 bauddivider )
{
UBRR0H = bauddivider >> 8;
ce: 90 93 c5 00 sts 0x00C5, r25
UBRR0L = bauddivider; // set baud rate
d2: 80 93 c4 00 sts 0x00C4, r24
UCSR0A = 0; // no U2X, MPCM
d6: 10 92 c0 00 sts 0x00C0, r1
UCSR0C = 1<<UCSZ01^1<<UCSZ00 // 8 Bit
da: 86 e0 ldi r24, 0x06 ; 6
dc: 80 93 c2 00 sts 0x00C2, r24
#ifdef URSEL0
^1<<URSEL0 // if UCSR0C shared with UBRR0H
#endif
;
UCSR0B = 1<<RXEN0^1<<TXEN0^ // enable RX, TX
e0: 88 e9 ldi r24, 0x98 ; 152
e2: 80 93 c1 00 sts 0x00C1, r24
1<<RXCIE0; // enable RX interrupt
rx_in = rx_out; // set buffer empty
e6: 80 91 8b 0c lds r24, 0x0C8B
ea: 80 93 8a 0c sts 0x0C8A, r24
tx_in = tx_out;
ee: 80 91 0d 0d lds r24, 0x0D0D
f2: 80 93 0c 0d sts 0x0D0C, r24
}
f6: 08 95 ret
000000f8 <ukbhit0>:
// ============================================================================== =
Da siehst Du am Fortschritt des Programmcounters (Beispiel rot markiert) - ob der um zwei oder vier Registerzellen weiterzählt (na ja, müsste ausführlicher beschrieben werden) - die Länge des Befehls.
Lesezeichen