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

📄 dhry_2.lst

📁 ARM入门的好帮手.包含了从简单到相对较复杂的程序.
💻 LST
📖 第 1 页 / 共 2 页
字号:
##############################################################################
#                                                                            #
# IAR ARM ANSI C/EC++ Compiler V3.10A/W32              05/Nov/2001  14:53:17 #
# Copyright 1999-2001 IAR Systems. All rights reserved.                      #
#                                                                            #
#    Cpu mode     =  arm                                                     #
#    Code model   =  small                                                   #
#    Endian       =  little                                                  #
#    Source file  =  C:\At91\software\projects\bench\Source\dhry_2.c         #
#    Command line =  -I C:\Compil\EW23\ARM\INC\ -I ..\..\..\ -lC             #
#                    C:\At91\software\projects\bench\IAR\ARM_external\List\  #
#                    -lA C:\At91\software\projects\bench\IAR\ARM_external\Li #
#                    st\ -o C:\At91\software\projects\bench\IAR\ARM_external #
#                    \Obj\ -e -s9 --debug --cpu_mode arm --code_model small  #
#                    --endian little --cpu=arm7tdmi                          #
#                    C:\At91\software\projects\bench\Source\dhry_2.c         #
#    List file    =  C:\At91\software\projects\bench\IAR\ARM_external\List\d #
#                    hry_2.lst                                               #
#    Object file  =  C:\At91\software\projects\bench\IAR\ARM_external\Obj\dh #
#                    ry_2.r79                                                #
#                                                                            #
#                                                                            #
##############################################################################

C:\At91\software\projects\bench\Source\dhry_2.c
      1          /*
      2           ****************************************************************************
      3           *
      4           *                   "DHRYSTONE" Benchmark Program
      5           *                   -----------------------------
      6           *
      7           *  Version:    C, Version 2.1
      8           *
      9           *  File:       dhry_2.c (part 3 of 3)
     10           *
     11           *  Date:       May 25, 1988
     12           *
     13           *  Author:     Reinhold P. Weicker
     14           *
     15           ****************************************************************************
     16           */
     17          
     18          #include "dhry.h"
     19          #include <string.h>
     20          
     21          #ifndef REG
     22          #define REG
     23                  /* REG becomes defined as empty */
     24                  /* i.e. no register variables   */
     25          #endif
     26          
     27          extern  int     Int_Glob;
     28          extern  char    Ch_1_Glob;
     29          

   \                                 In segment NEARFUNC_A, align 4
   \   00000000                         CODE32   
     30          Boolean Func_3 (Enumeration Enum_Par_Val)
     31          /***************************/
     32              /* executed once        */
     33              /* Enum_Par_Val == Ident_3 */
     34          {
     35              Enumeration Enum_Loc;
     36          
     37              Enum_Loc = Enum_Par_Val;
     38              if (Enum_Loc == Ident_3)
   \                     Func_3:
   \   00000000   FF0000E2              AND      R0,R0,#+0xFF       ;; Zero extend
   \   00000004   020050E3              CMP      R0,#+0x2
     39                  return (true);
   \   00000008   0100A003              MOVEQ    R0,#+0x1
   \   0000000C   0EF0A001              MOVEQ    PC,LR              ;; return
     40              else /* not executed */
     41                  return (false);
   \   00000010   0000A0E3              MOV      R0,#+0x0
   \   00000014   0EF0A0E1              MOV      PC,LR              ;; return
     42          } /* Func_3 */
     43          

   \                                 In segment NEARFUNC_A, align 4, keep-with-next
   \   00000000                         CODE32   
     44          void Proc_6 ( Enumeration Enum_Val_Par, Enumeration *Enum_Ref_Par)
     45          /*********************************/
     46              /* executed once */
     47              /* Enum_Val_Par == Ident_3, Enum_Ref_Par becomes Ident_2 */
     48          {
   \                     Proc_6:
   \   00000000   00402DE9              STMDB    SP!,{LR}           ;; Push
     49              *Enum_Ref_Par = Enum_Val_Par;
   \   00000004   0000C1E5              STRB     R0,[R1, #+0]
     50              if (! Func_3 (Enum_Val_Par))
   \   00000008   FF0000E2              AND      R0,R0,#+0xFF       ;; Zero extend
   \   0000000C   020050E3              CMP      R0,#+0x2
     51                  /* then, not executed */
     52                  *Enum_Ref_Par = Ident_4;
   \   00000010   0320A013              MOVNE    R2,#+0x3
   \   00000014   0020C115              STRNEB   R2,[R1, #+0]
     53              switch (Enum_Val_Par)
   \   00000018   000050E3              CMP      R0,#+0x0
   \   0000001C   0600000A              BEQ      ??Proc_6_0
   \   00000020   010050E3              CMP      R0,#+0x1
   \   00000024   0600000A              BEQ      ??Proc_6_1
   \   00000028   020050E3              CMP      R0,#+0x2
   \   0000002C   0B00000A              BEQ      ??Proc_6_2
   \   00000030   040050E3              CMP      R0,#+0x4
   \   00000034   0B00000A              BEQ      ??Proc_6_3
     54              {
     55                  case Ident_1:
     56                      *Enum_Ref_Par = Ident_1;
     57                      break;
     58                  case Ident_2:
     59                      if (Int_Glob > 100)
     60                          *Enum_Ref_Par = Ident_1;
     61                      else 
     62                          *Enum_Ref_Par = Ident_4;
     63                      break;
     64                  case Ident_3: /* executed */
     65                      *Enum_Ref_Par = Ident_2;
     66                      break;
     67                  case Ident_4: 
     68                      break;
     69                  case Ident_5:
     70                      *Enum_Ref_Par = Ident_3;
     71                      break;
     72              } /* switch */
     73          } /* Proc_6 */
   \   00000038   0080BDE8              LDMIA    SP!,{PC}           ;; return
   \                     ??Proc_6_0:
   \   0000003C   0000A0E3              MOV      R0,#+0x0
   \   00000040   090000EA              B        ??Proc_6_4
   \                     ??Proc_6_1:
   \   00000044   28009FE5              LDR      R0,??Proc_6_5      ;; #Int_Glob
   \   00000048   002090E5              LDR      R2,[R0, #+0]
   \   0000004C   650052E3              CMP      R2,#+0x65
   \   00000050   0000A0A3              MOVGE    R0,#+0x0
   \   00000054   040000AA              BGE      ??Proc_6_4
   \   00000058   0300A0E3              MOV      R0,#+0x3
   \   0000005C   020000EA              B        ??Proc_6_4
   \                     ??Proc_6_2:
   \   00000060   0100A0E3              MOV      R0,#+0x1
   \   00000064   000000EA              B        ??Proc_6_4
   \                     ??Proc_6_3:
   \   00000068   0200A0E3              MOV      R0,#+0x2
   \                     ??Proc_6_4:
   \   0000006C   0000C1E5              STRB     R0,[R1, #+0]
   \   00000070   0080BDE8              LDMIA    SP!,{PC}           ;; return
   \   00000074                         DATA     
   \                     ??Proc_6_5:
   \   00000074   ........              DC32     Int_Glob
     74          
     75          

   \                                 In segment NEARFUNC_A, align 4
   \   00000000                         CODE32   
     76          void Proc_7 ( One_Fifty Int_1_Par_Val, 
     77                        One_Fifty Int_2_Par_Val, 
     78                        One_Fifty *Int_Par_Ref )
     79          /**********************************************/
     80              /* executed three times                                      */
     81              /* first call:      Int_1_Par_Val == 2, Int_2_Par_Val == 3,  */
     82              /*                  Int_Par_Ref becomes 7                    */
     83              /* second call:     Int_1_Par_Val == 10, Int_2_Par_Val == 5, */
     84              /*                  Int_Par_Ref becomes 17                   */
     85              /* third call:      Int_1_Par_Val == 6, Int_2_Par_Val == 10, */
     86              /*                  Int_Par_Ref becomes 18                   */
     87          {
     88              One_Fifty Int_Loc;
     89          
     90              Int_Loc = Int_1_Par_Val + 2;
     91              *Int_Par_Ref = Int_2_Par_Val + Int_Loc;
   \                     Proc_7:
   \   00000000   010080E0              ADD      R0,R0,R1
   \   00000004   020080E2              ADD      R0,R0,#+0x2
   \   00000008   000082E5              STR      R0,[R2, #+0]
     92          } /* Proc_7 */
   \   0000000C   0EF0A0E1              MOV      PC,LR              ;; return
     93          
     94          

   \                                 In segment NEARFUNC_A, align 4, keep-with-next
   \   00000000                         CODE32   
     95          void Proc_8 ( Arr_1_Dim Arr_1_Par_Ref, 
     96                        Arr_2_Dim Arr_2_Par_Ref, 
     97                        int Int_1_Par_Val, 
     98                        int Int_2_Par_Val)
     99          /*********************************************************************/
    100              /* executed once      */
    101              /* Int_Par_Val_1 == 3 */
    102              /* Int_Par_Val_2 == 7 */
    103          {
   \                     Proc_8:
   \   00000000   F0002DE9              STMDB    SP!,{R4-R7}        ;; Push
    104            REG One_Fifty Int_Index;
    105            REG One_Fifty Int_Loc;
    106          
    107              Int_Loc = Int_1_Par_Val + 5;
   \   00000004   052082E2              ADD      R2,R2,#+0x5
    108              Arr_1_Par_Ref [Int_Loc] = Int_2_Par_Val;
   \   00000008   0241A0E1              MOV      R4,R2, LSL #+2
   \   0000000C   003084E7              STR      R3,[R4, +R0]

⌨️ 快捷键说明

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