GAS LISTING /tmp/ccJMIJTS.s page 1 1 .file "test.c" 2 __SREG__ = 0x3f 3 __SP_H__ = 0x3e 4 __SP_L__ = 0x3d 5 __CCP__ = 0x34 6 __tmp_reg__ = 0 7 __zero_reg__ = 1 10 .text 11 .Ltext0: 71 .global delay_ms 73 delay_ms: 74 .stabd 46,0,0 1:test.c **** #include 2:test.c **** #include 3:test.c **** #include 4:test.c **** #include 5:test.c **** 6:test.c **** void delay_ms(uint32_t time) { 76 .LM0: 77 .LFBB1: 78 /* prologue: function */ 79 /* frame size = 0 */ 81 .LM1: 82 0000 20E0 ldi r18,lo8(0) 83 0002 30E0 ldi r19,hi8(0) 84 0004 40E0 ldi r20,hlo8(0) 85 0006 50E0 ldi r21,hhi8(0) 86 .LBB16: 87 .LBB17: 88 .LBB18: 89 .LBB19: 91 .Ltext1: 1:/usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h **** /* Copyright (c) 2002, Marek Michalkiewicz 2:/usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h **** Copyright (c) 2007 Joerg Wunsch 3:/usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h **** All rights reserved. 4:/usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h **** 5:/usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h **** Redistribution and use in source and binary forms, with or without 6:/usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h **** modification, are permitted provided that the following conditions are met: 7:/usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h **** 8:/usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h **** * Redistributions of source code must retain the above copyright 9:/usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h **** notice, this list of conditions and the following disclaimer. 10:/usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h **** 11:/usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h **** * Redistributions in binary form must reproduce the above copyright 12:/usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h **** notice, this list of conditions and the following disclaimer in 13:/usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h **** the documentation and/or other materials provided with the 14:/usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h **** distribution. 15:/usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h **** 16:/usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h **** * Neither the name of the copyright holders nor the names of 17:/usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h **** contributors may be used to endorse or promote products derived 18:/usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h **** from this software without specific prior written permission. 19:/usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h **** 20:/usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h **** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 21:/usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h **** AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 22:/usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h **** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 23:/usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h **** ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 24:/usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h **** LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 25:/usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h **** CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF GAS LISTING /tmp/ccJMIJTS.s page 2 26:/usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h **** SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 27:/usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h **** INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 28:/usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h **** CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 29:/usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h **** ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 30:/usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h **** POSSIBILITY OF SUCH DAMAGE. */ 31:/usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h **** 32:/usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h **** /* $Id: delay_basic.h,v 1.1 2007/05/13 21:23:20 joerg_wunsch Exp $ */ 33:/usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h **** 34:/usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h **** #ifndef _UTIL_DELAY_BASIC_H_ 35:/usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h **** #define _UTIL_DELAY_BASIC_H_ 1 36:/usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h **** 37:/usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h **** #include 38:/usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h **** 39:/usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h **** /** \file */ 40:/usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h **** /** \defgroup util_delay_basic : Basic busy-wait delay loops 41:/usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h **** \code 42:/usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h **** #include 43:/usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h **** \endcode 44:/usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h **** 45:/usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h **** The functions in this header file implement simple delay loops 46:/usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h **** that perform a busy-waiting. They are typically used to 47:/usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h **** facilitate short delays in the program execution. They are 48:/usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h **** implemented as count-down loops with a well-known CPU cycle 49:/usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h **** count per loop iteration. As such, no other processing can 50:/usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h **** occur simultaneously. It should be kept in mind that the 51:/usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h **** functions described here do not disable interrupts. 52:/usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h **** 53:/usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h **** In general, for long delays, the use of hardware timers is 54:/usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h **** much preferrable, as they free the CPU, and allow for 55:/usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h **** concurrent processing of other events while the timer is 56:/usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h **** running. However, in particular for very short delays, the 57:/usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h **** overhead of setting up a hardware timer is too much compared 58:/usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h **** to the overall delay time. 59:/usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h **** 60:/usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h **** Two inline functions are provided for the actual delay algorithms. 61:/usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h **** 62:/usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h **** */ 63:/usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h **** 64:/usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h **** #if !defined(__DOXYGEN__) 65:/usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h **** static inline void _delay_loop_1(uint8_t __count) __attribute__((always_inline)); 66:/usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h **** static inline void _delay_loop_2(uint16_t __count) __attribute__((always_inline)); 67:/usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h **** #endif 68:/usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h **** 69:/usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h **** /** \ingroup util_delay_basic 70:/usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h **** 71:/usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h **** Delay loop using an 8-bit counter \c __count, so up to 256 72:/usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h **** iterations are possible. (The value 256 would have to be passed 73:/usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h **** as 0.) The loop executes three CPU cycles per iteration, not 74:/usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h **** including the overhead the compiler needs to setup the counter 75:/usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h **** register. 76:/usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h **** 77:/usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h **** Thus, at a CPU speed of 1 MHz, delays of up to 768 microseconds 78:/usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h **** can be achieved. 79:/usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h **** */ 80:/usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h **** void 81:/usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h **** _delay_loop_1(uint8_t __count) 82:/usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h **** { GAS LISTING /tmp/ccJMIJTS.s page 3 83:/usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h **** __asm__ volatile ( 84:/usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h **** "1: dec %0" "\n\t" 85:/usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h **** "brne 1b" 86:/usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h **** : "=r" (__count) 87:/usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h **** : "0" (__count) 88:/usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h **** ); 89:/usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h **** } 90:/usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h **** 91:/usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h **** /** \ingroup util_delay_basic 92:/usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h **** 93:/usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h **** Delay loop using a 16-bit counter \c __count, so up to 65536 94:/usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h **** iterations are possible. (The value 65536 would have to be 95:/usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h **** passed as 0.) The loop executes four CPU cycles per iteration, 96:/usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h **** not including the overhead the compiler requires to setup the 97:/usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h **** counter register pair. 98:/usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h **** 99:/usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h **** Thus, at a CPU speed of 1 MHz, delays of up to about 262.1 100:/usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h **** milliseconds can be achieved. 101:/usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h **** */ 102:/usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h **** void 103:/usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h **** _delay_loop_2(uint16_t __count) 104:/usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h **** { 105:/usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h **** __asm__ volatile ( 93 .LM2: 94 0008 A0ED ldi r26,lo8(2000) 95 000a B7E0 ldi r27,hi8(2000) 96 000c 00C0 rjmp .L2 97 .L3: 98 000e FD01 movw r30,r26 99 /* #APP */ 100 ; 105 "/usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h" 1 101 0010 3197 1: sbiw r30,1 102 0012 01F4 brne 1b 103 ; 0 "" 2 104 /* #NOAPP */ 105 .LBE19: 106 .LBE18: 107 .LBE17: 108 .LBE16: 110 .Ltext2: 7:test.c **** uint32_t i; 8:test.c **** for (i = 0; i < time; i++) { 112 .LM3: 113 0014 2F5F subi r18,lo8(-(1)) 114 0016 3F4F sbci r19,hi8(-(1)) 115 0018 4F4F sbci r20,hlo8(-(1)) 116 001a 5F4F sbci r21,hhi8(-(1)) 117 .L2: 118 001c 2617 cp r18,r22 119 001e 3707 cpc r19,r23 120 0020 4807 cpc r20,r24 121 0022 5907 cpc r21,r25 122 0024 00F0 brlo .L3 123 /* epilogue start */ 9:test.c **** _delay_ms(1); 10:test.c **** } 11:test.c **** } GAS LISTING /tmp/ccJMIJTS.s page 4 125 .LM4: 126 0026 0895 ret 131 .Lscope1: 133 .stabd 78,0,0 136 .global main 138 main: 139 .stabd 46,0,0 12:test.c **** 13:test.c **** #define NOOP asm volatile("nop" ::) 14:test.c **** 15:test.c **** static void setup_clock( void ) 16:test.c **** { 17:test.c **** /*Examine Page 33*/ 18:test.c **** 19:test.c **** CLKPR = 0x80; /*Setup CLKPCE to be receptive*/ 20:test.c **** CLKPR = 0x00; /*No scalar*/ 21:test.c **** 22:test.c **** // OSCCAL = 0xFF; 23:test.c **** 24:test.c **** PLLCSR = _BV(PLLE) | _BV( PCKE ); 25:test.c **** } 26:test.c **** 27:test.c **** #define BASE 0xC5 28:test.c **** 29:test.c **** static void Play( unsigned char v ) 30:test.c **** { 31:test.c **** unsigned char cc, c; 32:test.c **** for( c = 0; c < v; c++ ) 33:test.c **** { 34:test.c **** OSCCAL = BASE; 35:test.c **** OSCCAL = BASE; 36:test.c **** } 37:test.c **** 38:test.c **** for( c = 255; c > v; c-- ) 39:test.c **** { 40:test.c **** OSCCAL = BASE+1; 41:test.c **** OSCCAL = BASE; 42:test.c **** } 43:test.c **** } 44:test.c **** 45:test.c **** int main( t ) 46:test.c **** { 141 .LM5: 142 .LFBB2: 143 /* prologue: function */ 144 /* frame size = 0 */ 145 0028 AC01 movw r20,r24 47:test.c **** unsigned char c, d; 48:test.c **** cli(); 147 .LM6: 148 /* #APP */ 149 ; 48 "test.c" 1 150 002a F894 cli 151 ; 0 "" 2 152 /* #NOAPP */ 153 .LBB20: 154 .LBB21: GAS LISTING /tmp/ccJMIJTS.s page 5 19:test.c **** CLKPR = 0x80; /*Setup CLKPCE to be receptive*/ 156 .LM7: 157 002c 80E8 ldi r24,lo8(-128) 158 002e 86BD out 70-32,r24 20:test.c **** CLKPR = 0x00; /*No scalar*/ 160 .LM8: 161 0030 16BC out 70-32,__zero_reg__ 24:test.c **** PLLCSR = _BV(PLLE) | _BV( PCKE ); 163 .LM9: 164 0032 86E0 ldi r24,lo8(6) 165 0034 87BD out 71-32,r24 166 .LBE21: 167 .LBE20: 49:test.c **** // DDRA = 0x0f; // 0000 1111 50:test.c **** // PORTA = 0x0a; // 0000 1010 51:test.c **** 52:test.c **** setup_clock(); 53:test.c **** 54:test.c **** DDRB = _BV(4) | _BV(3); 169 .LM10: 170 0036 88E1 ldi r24,lo8(24) 171 0038 87BB out 55-32,r24 55:test.c **** PORTB = 0xFF; 173 .LM11: 174 003a 8FEF ldi r24,lo8(-1) 175 003c 88BB out 56-32,r24 56:test.c **** 57:test.c **** #define PWMMODE 58:test.c **** 59:test.c **** #ifndef PWMMODE 60:test.c **** TCCR1 = _BV(CTC1) | _BV(CS10); 61:test.c **** GTCCR = 62:test.c **** _BV(COM1B0) | 63:test.c **** //_BV(COM1B1) | 64:test.c **** //_BV(PWM1B) | 65:test.c **** 0; 66:test.c **** OCR1B = 0; 67:test.c **** OCR1C = 0; 68:test.c **** OCR1A = 0; 69:test.c **** TCNT1 = 0; 70:test.c **** #else 71:test.c **** TCCR1 = _BV(CTC1) | _BV(CS10); 177 .LM12: 178 003e 81E8 ldi r24,lo8(-127) 179 0040 80BF out 80-32,r24 72:test.c **** GTCCR = 181 .LM13: 182 0042 80E5 ldi r24,lo8(80) 183 0044 8CBD out 76-32,r24 73:test.c **** _BV(COM1B0) | 74:test.c **** //_BV(COM1B1) | 75:test.c **** _BV(PWM1B) | 76:test.c **** 0; 77:test.c **** OCR1B = 2; 185 .LM14: 186 0046 82E0 ldi r24,lo8(2) 187 0048 8BBD out 75-32,r24 GAS LISTING /tmp/ccJMIJTS.s page 6 78:test.c **** OCR1C = 3; //2 for /3, 3 for /4 189 .LM15: 190 004a 83E0 ldi r24,lo8(3) 191 004c 8DBD out 77-32,r24 79:test.c **** OCR1A = 0; 193 .LM16: 194 004e 1EBC out 78-32,__zero_reg__ 80:test.c **** TCNT1 = 0; 196 .LM17: 197 0050 1FBC out 79-32,__zero_reg__ 81:test.c **** #endif 82:test.c **** 83:test.c **** //E8 = 89.46 MHz 84:test.c **** //E9 = 90.32 MHz 85:test.c **** 86:test.c **** 87:test.c **** sei(); 199 .LM18: 200 /* #APP */ 201 ; 87 "test.c" 1 202 0052 7894 sei 203 ; 0 "" 2 204 /* #NOAPP */ 205 .LBB22: 206 .LBB23: 34:test.c **** OSCCAL = BASE; 208 .LM19: 209 0054 75EC ldi r23,lo8(-59) 40:test.c **** OSCCAL = BASE+1; 211 .LM20: 212 0056 E6EC ldi r30,lo8(-58) 213 .L10: 214 .LBE23: 215 .LBE22: 88:test.c **** 89:test.c **** 90:test.c **** // Music from very small programs. 91:test.c **** 92:test.c **** for( ;;t++) 93:test.c **** { 94:test.c **** //Play( (t*9 & t>>4 | t*5 & t>>7 | t*3 & t/1024) - 1 ,0 ); 95:test.c **** // Play( (t*5 & t>>7 )| ((t*3&t>>10)-1) ); 96:test.c **** Play( (t*5 & t>>7 )| (t*3&t>>10) ); 217 .LM21: 218 0058 842F mov r24,r20 219 005a 63E0 ldi r22,lo8(3) 220 005c 00D0 rcall __mulqi3 221 005e 9A01 movw r18,r20 222 0060 232F mov r18,r19 223 0062 330F lsl r19 224 0064 330B sbc r19,r19 225 0066 2595 asr r18 226 0068 2595 asr r18 227 006a 982F mov r25,r24 228 006c 9223 and r25,r18 229 006e 842F mov r24,r20 230 0070 65E0 ldi r22,lo8(5) GAS LISTING /tmp/ccJMIJTS.s page 7 231 0072 00D0 rcall __mulqi3 232 0074 9A01 movw r18,r20 233 0076 220F lsl r18 234 0078 232F mov r18,r19 235 007a 221F rol r18 236 007c 330B sbc r19,r19 237 007e 8223 and r24,r18 238 0080 982B or r25,r24 239 0082 80E0 ldi r24,lo8(0) 240 0084 00C0 rjmp .L6 241 .L7: 242 .LBB25: 243 .LBB24: 34:test.c **** OSCCAL = BASE; 245 .LM22: 246 0086 71BF out 81-32,r23 35:test.c **** OSCCAL = BASE; 248 .LM23: 249 0088 71BF out 81-32,r23 32:test.c **** for( c = 0; c < v; c++ ) 251 .LM24: 252 008a 8F5F subi r24,lo8(-(1)) 253 .L6: 254 008c 8917 cp r24,r25 255 008e 00F0 brlo .L7 256 0090 8FEF ldi r24,lo8(-1) 257 0092 00C0 rjmp .L8 258 .L9: 40:test.c **** OSCCAL = BASE+1; 260 .LM25: 261 0094 E1BF out 81-32,r30 41:test.c **** OSCCAL = BASE; 263 .LM26: 264 0096 71BF out 81-32,r23 38:test.c **** for( c = 255; c > v; c-- ) 266 .LM27: 267 0098 8150 subi r24,lo8(-(-1)) 268 .L8: 269 009a 9817 cp r25,r24 270 009c 00F0 brlo .L9 271 .LBE24: 272 .LBE25: 92:test.c **** for( ;;t++) 274 .LM28: 275 009e 4F5F subi r20,lo8(-(1)) 276 00a0 5F4F sbci r21,hi8(-(1)) 277 00a2 00C0 rjmp .L10 285 .Lscope2: 287 .stabd 78,0,0 289 .Letext0: GAS LISTING /tmp/ccJMIJTS.s page 8 DEFINED SYMBOLS *ABS*:00000000 test.c /tmp/ccJMIJTS.s:2 *ABS*:0000003f __SREG__ /tmp/ccJMIJTS.s:3 *ABS*:0000003e __SP_H__ /tmp/ccJMIJTS.s:4 *ABS*:0000003d __SP_L__ /tmp/ccJMIJTS.s:5 *ABS*:00000034 __CCP__ /tmp/ccJMIJTS.s:6 *ABS*:00000000 __tmp_reg__ /tmp/ccJMIJTS.s:7 *ABS*:00000001 __zero_reg__ /tmp/ccJMIJTS.s:73 .text:00000000 delay_ms /tmp/ccJMIJTS.s:138 .text:00000028 main UNDEFINED SYMBOLS __mulqi3