⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 utilities.lst

📁 《单片机仿真入门实用教程》实例(包括源代码) 单片机仿真教程。
💻 LST
字号:
##############################################################################
#                                                                            #
#                                                      12/Oct/2006  10:58:07 #
# IAR Atmel AVR C/C++ Compiler V4.20A/W32, KickStart Version                 #
# Copyright 1996-2006 IAR Systems. All rights reserved.                      #
#                                                                            #
#    Source file  =  D:\IAR Systems\Embedded Workbench 4.0                   #
#                    KickStart\avr\tutor\Utilities.c                         #
#    Command line =  "D:\IAR Systems\Embedded Workbench 4.0                  #
#                    KickStart\avr\tutor\Utilities.c" -v0 -mt -o             #
#                    "F:\zln\AVR与PROTEUS\IAR AVR应用程序\Debug\Obj\" -lCN   #
#                    "F:\zln\AVR与PROTEUS\IAR AVR应用程序\Debug\List\"       #
#                    --initializers_in_flash -z2 --no_cse --no_inline        #
#                    --no_code_motion --no_cross_call --no_clustering        #
#                    --no_tbaa --debug -e -I "D:\IAR Systems\Embedded        #
#                    Workbench 4.0 KickStart\avr\INC\" -I "D:\IAR            #
#                    Systems\Embedded Workbench 4.0 KickStart\avr\INC\CLIB\" #
#    List file    =  F:\zln\AVR与PROTEUS\IAR AVR应用程序\Debug\List\Utilitie #
#                    s.lst                                                   #
#    Object file  =  F:\zln\AVR与PROTEUS\IAR AVR应用程序\Debug\Obj\Utilities #
#                    .r90                                                    #
#                                                                            #
#                                                                            #
##############################################################################

D:\IAR Systems\Embedded Workbench 4.0 KickStart\avr\tutor\Utilities.c
      1          /**************************************************
      2           *
      3           * IAR EMBEDDED WORKBENCH TUTORIAL
      4           * Utility file
      5           *
      6           * Copyright 1996 - 2003 IAR Systems. All rights reserved.
      7           *
      8           * $Revision: 1.3 $
      9           *
     10           **************************************************/
     11          
     12          #include <stdio.h>
     13          #include "Utilities.h"
     14          
     15          

   \                                 In segment TINY_Z, align 1, keep-with-next
   \   00000000                      REQUIRE `?<Segment init: TINY_Z>`
     16          unsigned int root[MAX_FIB];
   \                     root:
   \   00000000                      DS 20
     17          
     18          /*
     19              Initialize MAX_FIB Fibonacci numbers.
     20          */

   \                                 In segment CODE, align 2, keep-with-next
     21          void init_fib( void )
   \                     init_fib:
     22          {
   \   00000000   ....               RCALL   ?PROLOGUE4_L09
     23            short i = 45;
     24            root[0] = root[1] = 1;
   \   00000002   E001               LDI     R16, 1
   \   00000004   E010               LDI     R17, 0
   \   00000006   ....               LDI     R30, root
   \   00000008   8302               STD     Z+2, R16
   \   0000000A   8313               STD     Z+3, R17
   \   0000000C   ....               LDI     R30, root
   \   0000000E   8300               ST      Z, R16
   \   00000010   8311               STD     Z+1, R17
     25          
     26            for ( i=2 ; i<MAX_FIB ; i++)
   \   00000012   E082               LDI     R24, 2
   \   00000014   E090               LDI     R25, 0
   \                     ??init_fib_0:
   \   00000016   308A               CPI     R24, 10
   \   00000018   E000               LDI     R16, 0
   \   0000001A   0790               CPC     R25, R16
   \   0000001C   F4A4               BRGE    ??init_fib_1
     27              root[i] = get_fib(i) + get_fib(i-1);
   \   0000001E   2F08               MOV     R16, R24
   \   00000020   2F19               MOV     R17, R25
   \   00000022   ....               RCALL   get_fib
   \   00000024   2FA0               MOV     R26, R16
   \   00000026   2FB1               MOV     R27, R17
   \   00000028   2F08               MOV     R16, R24
   \   0000002A   2F19               MOV     R17, R25
   \   0000002C   5001               SUBI    R16, 1
   \   0000002E   4010               SBCI    R17, 0
   \   00000030   ....               RCALL   get_fib
   \   00000032   0F0A               ADD     R16, R26
   \   00000034   1F1B               ADC     R17, R27
   \   00000036   2F28               MOV     R18, R24
   \   00000038   0F22               LSL     R18
   \   0000003A   2FE2               MOV     R30, R18
   \   0000003C   ....               SUBI    R30, (-(root) & 0xFF)
   \   0000003E   8300               ST      Z, R16
   \   00000040   8311               STD     Z+1, R17
   \   00000042   9601               ADIW    R25:R24, 1
   \   00000044   CFE8               RJMP    ??init_fib_0
     28          }
   \                     ??init_fib_1:
   \   00000046   E0E4               LDI     R30, 4
   \   00000048   ....               RJMP    ?EPILOGUE_B4_L09
     29          
     30          /*
     31              Return the Fibonacci number 'nr'.
     32          */

   \                                 In segment CODE, align 2, keep-with-next
     33          unsigned int get_fib( int nr )
   \                     get_fib:
     34          {
   \   00000000   2F20               MOV     R18, R16
   \   00000002   2F31               MOV     R19, R17
     35            if ( nr>0 && nr<=MAX_FIB )
   \   00000004   3021               CPI     R18, 1
   \   00000006   E000               LDI     R16, 0
   \   00000008   0730               CPC     R19, R16
   \   0000000A   F05C               BRLT    ??get_fib_0
   \   0000000C   302B               CPI     R18, 11
   \   0000000E   E000               LDI     R16, 0
   \   00000010   0730               CPC     R19, R16
   \   00000012   F43C               BRGE    ??get_fib_0
     36              return ( root[nr-1] );
   \   00000014   2F02               MOV     R16, R18
   \   00000016   0F00               LSL     R16
   \   00000018   2FE0               MOV     R30, R16
   \   0000001A   ....               SUBI    R30, LOW((-(root - 2) & 0xFF))
   \   0000001C   8100               LD      R16, Z
   \   0000001E   8111               LDD     R17, Z+1
   \   00000020   9508               RET
     37            else
     38              return ( 0 );
   \                     ??get_fib_0:
   \   00000022   E000               LDI     R16, 0
   \   00000024   E010               LDI     R17, 0
   \   00000026   9508               RET
     39          }
     40          
     41          /*
     42              Puts a number between 0 and 65536 to stdout.
     43          */

   \                                 In segment CODE, align 2, keep-with-next
     44          void put_fib( unsigned int out )
   \                     put_fib:
     45          {
   \   00000000   ....               RCALL   ?PROLOGUE6_L09
   \   00000002                      REQUIRE ?Register_R4_is_cg_reg
   \   00000002                      REQUIRE ?Register_R5_is_cg_reg
   \   00000002   2FA0               MOV     R26, R16
   \   00000004   2FB1               MOV     R27, R17
     46            unsigned int dec = 10, temp;
   \   00000006   E08A               LDI     R24, 10
   \   00000008   E090               LDI     R25, 0
     47          
     48            if ( out >= 10000 )
   \   0000000A   31A0               CPI     R26, 16
   \   0000000C   E207               LDI     R16, 39
   \   0000000E   07B0               CPC     R27, R16
   \   00000010   F020               BRCS    ??put_fib_0
     49            {
     50              putchar ( '#' );/* To large value. */
   \   00000012   E203               LDI     R16, 35
   \   00000014   E010               LDI     R17, 0
   \   00000016   ....               RCALL   putchar
     51              return;         /* Print a '#'. */
   \   00000018   C032               RJMP    ??put_fib_1
     52            }
     53          
     54            putchar ( '\n' );
   \                     ??put_fib_0:
   \   0000001A   E00A               LDI     R16, 10
   \   0000001C   E010               LDI     R17, 0
   \   0000001E   ....               RCALL   putchar
     55            while ( dec <= out )
   \                     ??put_fib_2:
   \   00000020   17A8               CP      R26, R24
   \   00000022   07B9               CPC     R27, R25
   \   00000024   F040               BRCS    ??put_fib_3
     56              dec *= 10;
   \   00000026   2F48               MOV     R20, R24
   \   00000028   2F59               MOV     R21, R25
   \   0000002A   E00A               LDI     R16, 10
   \   0000002C   E010               LDI     R17, 0
   \   0000002E   ....               RCALL   ?S_MUL_L02
   \   00000030   2F80               MOV     R24, R16
   \   00000032   2F91               MOV     R25, R17
   \   00000034   CFF5               RJMP    ??put_fib_2
     57          
     58            while ( (dec/=10) >= 10 )
   \                     ??put_fib_3:
   \   00000036   2F08               MOV     R16, R24
   \   00000038   2F19               MOV     R17, R25
   \   0000003A   E04A               LDI     R20, 10
   \   0000003C   E050               LDI     R21, 0
   \   0000003E   ....               RCALL   ?US_DIVMOD_L02
   \   00000040   2F80               MOV     R24, R16
   \   00000042   2F91               MOV     R25, R17
   \   00000044   300A               CPI     R16, 10
   \   00000046   E020               LDI     R18, 0
   \   00000048   0712               CPC     R17, R18
   \   0000004A   F0A0               BRCS    ??put_fib_4
     59            {
     60              temp = out/dec;
   \   0000004C   2F0A               MOV     R16, R26
   \   0000004E   2F1B               MOV     R17, R27
   \   00000050   2F48               MOV     R20, R24
   \   00000052   2F59               MOV     R21, R25
   \   00000054   ....               RCALL   ?US_DIVMOD_L02
   \   00000056   2E40               MOV     R4, R16
   \   00000058   2E51               MOV     R5, R17
     61              putchar ( '0' + temp );
   \   0000005A   2D04               MOV     R16, R4
   \   0000005C   2D15               MOV     R17, R5
   \   0000005E   5D00               SUBI    R16, 208
   \   00000060   4F1F               SBCI    R17, 255
   \   00000062   ....               RCALL   putchar
     62              out -= temp*dec;
   \   00000064   2D44               MOV     R20, R4
   \   00000066   2D55               MOV     R21, R5
   \   00000068   2F08               MOV     R16, R24
   \   0000006A   2F19               MOV     R17, R25
   \   0000006C   ....               RCALL   ?S_MUL_L02
   \   0000006E   1BA0               SUB     R26, R16
   \   00000070   0BB1               SBC     R27, R17
   \   00000072   CFE1               RJMP    ??put_fib_3
     63            }
     64          
     65            putchar ( '0' + out );
   \                     ??put_fib_4:
   \   00000074   2F0A               MOV     R16, R26
   \   00000076   2F1B               MOV     R17, R27
   \   00000078   5D00               SUBI    R16, 208
   \   0000007A   4F1F               SBCI    R17, 255
   \   0000007C   ....               RCALL   putchar
     66          }
   \                     ??put_fib_1:
   \   0000007E   E0E6               LDI     R30, 6
   \   00000080   ....               RJMP    ?EPILOGUE_B6_L09

   Maximum stack usage in bytes:

     Function     CSTACK RSTACK
     --------     ------ ------
     get_fib          0      2
     init_fib         4      2
       -> get_fib     4      2
       -> get_fib     4      2
     put_fib          6      4
       -> putchar     6      2
       -> putchar     6      2
       -> putchar     6      2
       -> putchar     6      2


   Segment part sizes:

     Function/Label Bytes
     -------------- -----
     root             20
     init_fib         74
     get_fib          40
     put_fib         130
      Others           4

 
 244 bytes in segment CODE
   4 bytes in segment INITTAB
  20 bytes in segment TINY_Z
 
 244 bytes of CODE memory (+ 4 bytes shared)
  20 bytes of DATA memory

Errors: none
Warnings: none

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -