home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 15 / 15.iso / s / s220 / 4.ddi / EXAMPLE.LST < prev    next >
Encoding:
File List  |  1989-09-07  |  27.1 KB  |  591 lines

  1. ####################################################################################################
  2. #                                                                                                  #
  3. #     Archimedes 8051 C-Compiler V2.20A/MD2                                07/Sep/89  15:00:13     #
  4. #                                                                                                  #
  5. #           Memory model  =  large reentrant                                                       #
  6. #           Source file   =  example.c                                                             #
  7. #           List file     =  example.lst                                                           #
  8. #           Object file   =  example.r03                                                           #
  9. #           Command line  =  example -m0 -V -e -g -L -q                                            #
  10. #                                                                                                  #
  11. #                                                      (c) Copyright Archimedes Software Inc. 1988 #
  12. ####################################################################################################
  13.  
  14.    \   0000                    NAME    example(16)
  15.    \   0000                    RSEG    CODE(0)
  16.    \   0000                    RSEG    ECSTR(0)
  17.    \   0000                    RSEG    CCSTR(0)
  18.    \   0000                    RSEG    UDATA(0)
  19.    \   0000                    RSEG    CDATA(0)
  20.    \   0000                    RSEG    IDATA(0)
  21.    \   0000                    PUBLIC  do_io(147,31)
  22.    \   0000                    PUBLIC  flags(10,171)
  23.    \   0000                    PUBLIC  main(147,31)
  24.    \   0000                    EXTERN  printf(155,66)
  25.    \   0000                    EXTERN  pulse(117,128)
  26.    \   0000                    EXTERN  putchar(22,128)
  27.    \   0000                    PUBLIC  ring_bell(147,31)
  28.    \   0000                    PUBLIC  set_timer(147,31)
  29.    \   0000                    PUBLIC  sieve(147,31)
  30.    \   0000                    EXTERN  ?POP_R5_L17
  31.    \   0000                    EXTERN  ?I_ADD_L14
  32.    \   0000                    EXTERN  ?I_ADD_ASG_L00
  33.    \   0000                    EXTERN  ?ENTER_L17
  34.    \   0000                    EXTERN  ?LEAVE_L17
  35.    \   0000                    EXTERN  ?ST_IND1_L08
  36.    \   0000                    EXTERN  ?ST_REL1_L13
  37.    \   0000                    EXTERN  ?ST_REL2_L13
  38.    \   0000                    EXTERN  ?LD_REL1_L11
  39.    \   0000                    EXTERN  ?LD_REL2_L11
  40.    \   0000                    EXTERN  ?PUSH_R3_L17
  41.    \   0000                    EXTERN  ?PUSH_R5_L17
  42.    \   0000                    EXTERN  ?PUSH_R2_R3_L17
  43.    \   0000                    EXTERN  ?SI_CMP_LE_L02
  44.    \   0000                    EXTERN  ?I_CMP_EQ_L02
  45.    \   0000                    EXTERN  ?PRINC1_L05
  46.    \   0000                    EXTERN  ?POINC1_L05
  47.    \   0000                    EXTERN  ?CL8051_2_20_L17
  48.    \   0000                    EXTERN  _R
  49.    \   0000                    RSEG    CODE
  50.       1          /* EXAMPLE.C:  Some sample code for the Archimedes C-51 compiler kit.
  51.       2           * See the file EXAMPLE.DOC and the Tutorial Introduction to the 
  52.       3           * manual for more information.  Revised 9-14-87, VC.  */
  53.       4          
  54.       5          #include <stdio.h>      /* required header for printf, putchar */
  55.       6          #include <io51.h>       /* required header for output, bit_set, etc. */
  56.       7          
  57.       8          #define TRUE 1
  58.       9          #define FALSE 0
  59.      10          #define BELL 7          /* ASCII terminal bell */
  60.      11          
  61.      12          /* The following is a function prototype for the assembly
  62.      13           * language routine, pulse.  See the source file PULSE.S03 */
  63.      14          
  64.      15          extern int pulse(int count, char value);
  65.      16          
  66.      17          
  67.      18          /* ------------------------------------------------------------ */
  68.      19          void set_timer()   /* initialize Timer 0 to generate interupts */
  69.      20          { 
  70.    \   0000            set_timer:
  71.    \   0000  E4                CLR     A
  72.    \   0001  7800              MOV     R0,#0
  73.    \   0003  7904              MOV     R1,#4
  74.    \   0005  120000            LCALL   ?ENTER_L17
  75.      21            output(TMOD,1);       /* Timer-0: mode 1 (16-bit timer) */
  76.    \   0008  7B01              MOV     R3,#1
  77.    \   000A  8B89              MOV     137,R3
  78.      22            output(TH0,0x4C);     /* load 4C00h for interrupt every 50 ms */
  79.    \   000C  7B4C              MOV     R3,#76
  80.    \   000E  8B8C              MOV     140,R3
  81.      23            output(TL0,0);
  82.    \   0010  7B00              MOV     R3,#0
  83.    \   0012  8B8A              MOV     138,R3
  84.      24            set_bit(TR0_bit);             /* set Timer 0 run control bit */
  85.    \   0014  D28C              SETB    TCON.4
  86.      25            set_bit(ET0_bit);             /* set interrupt mask bit ET0 */
  87.    \   0016  D2A9              SETB    IE.1
  88.      26            set_bit(EA_bit);              /* enable interrupts bit EA */
  89.    \   0018  D2AF              SETB    IE.7
  90.      27          }
  91.    \   001A            ?0000:
  92.    \   001A  020000            LJMP    ?LEAVE_L17
  93.      28          
  94.      29          
  95.      30          /* ------------------------------------------------------------ */
  96.      31          void ring_bell()   /* Timer-0 interrupt handler, rings the CRT
  97.      32                              * bell approximately every 3 seconds; called
  98.      33                              * from vector in CSTARTUP module */
  99.      34          {
  100.    \   001D            ring_bell:
  101.    \   001D  E4                CLR     A
  102.    \   001E  7800              MOV     R0,#0
  103.    \   0020  7904              MOV     R1,#4
  104.    \   0022  120000            LCALL   ?ENTER_L17
  105.      35            static int intr_ctr = 0;  /* counter for number of interrupts */
  106.      36          
  107.      37            output(TH0,0x4C);     /* reload timer again, hi byte */
  108.    \   0025  7B4C              MOV     R3,#76
  109.    \   0027  8B8C              MOV     140,R3
  110.      38            output(TL0,0);        /* low byte */
  111.    \   0029  7B00              MOV     R3,#0
  112.    \   002B  8B8A              MOV     138,R3
  113.      39            if(++intr_ctr == 60)  /* only do every 60 interrupts */
  114.    \   002D  7B00              MOV     R3,#LOW(?0001)
  115.    \   002F  7A00              MOV     R2,#HIGH(?0001)
  116.    \   0031  120000            LCALL   ?PRINC1_L05
  117.    \   0034  02                DB      2
  118.    \   0035  8B05              MOV     _R+5,R3
  119.    \   0037  8A04              MOV     _R+4,R2
  120.    \   0039  7B3C              MOV     R3,#60
  121.    \   003B  7A00              MOV     R2,#0
  122.    \   003D  120000            LCALL   ?I_CMP_EQ_L02
  123.    \   0040  6016              JZ      ?0003
  124.    \   0042            ?0002:
  125.      40            {
  126.      41              putchar(BELL);      /* ring the bell, or do some useful task */
  127.    \   0042  7B07              MOV     R3,#7
  128.    \   0044  7A00              MOV     R2,#0
  129.    \   0046  900002            MOV     DPTR,#2
  130.    \   0049  120000            LCALL   putchar
  131.      42              intr_ctr = 0;
  132.    \   004C  7B00              MOV     R3,#0
  133.    \   004E  7A00              MOV     R2,#0
  134.    \   0050  900000            MOV     DPTR,#?0001
  135.    \   0053  EA                MOV     A,R2
  136.    \   0054  F0                MOVX    @DPTR,A
  137.    \   0055  EB                MOV     A,R3
  138.    \   0056  A3                INC     DPTR
  139.    \   0057  F0                MOVX    @DPTR,A
  140.    \   0058            ?0003:
  141.      43            }
  142.      44          }
  143.    \   0058            ?0004:
  144.    \   0058  020000            LJMP    ?LEAVE_L17
  145.      45          
  146.      46          
  147.      47          /* ------------------------------------------------------------ */
  148.      48          
  149.      49          #define BIT_VAR 0       /* 1st bit address in internal RAM (20.0 hex) */
  150.      50          
  151.      51          void do_io()    /* demonstrate 8051 I/O functions */
  152.      52          { 
  153.    \   005B            do_io:
  154.    \   005B  E4                CLR     A
  155.    \   005C  7800              MOV     R0,#0
  156.    \   005E  7905              MOV     R1,#5
  157.    \   0060  120000            LCALL   ?ENTER_L17
  158.      53            char c;
  159.      54          
  160.      55              /* write and read Port 1 */
  161.      56            output(P1,0x0F);
  162.    \   0063  7B0F              MOV     R3,#15
  163.    \   0065  8B90              MOV     144,R3
  164.      57            printf("\nPort 1: %02X\n",input(P1));
  165.    \   0067  AB90              MOV     R3,144
  166.    \   0069  7A00              MOV     R2,#0
  167.    \   006B  120000            LCALL   ?PUSH_R2_R3_L17
  168.    \   006E  7B00              MOV     R3,#LOW(?0005)
  169.    \   0070  7A00              MOV     R2,#HIGH(?0005)
  170.    \   0072  900004            MOV     DPTR,#4
  171.    \   0075  120000            LCALL   printf
  172.      58                  /* Write and read an absolute external data address,
  173.      59               * such as a UART or other memory-mapped I/O device.  
  174.      60               * "(char *)" casts the int constant to a char pointer. */
  175.      61            *(char *)0xE000 = c;          /* write */
  176.    \   0078  120000            LCALL   ?LD_REL1_L11
  177.    \   007B  0400              DW      1024
  178.    \   007D  8B05              MOV     _R+5,R3
  179.    \   007F  7B00              MOV     R3,#0
  180.    \   0081  7AE0              MOV     R2,#224
  181.    \   0083  120000            LCALL   ?ST_IND1_L08
  182.      62            c = *(char *)0xE000;   /* read */
  183.    \   0086  7B00              MOV     R3,#0
  184.    \   0088  7AE0              MOV     R2,#224
  185.    \   008A  8A83              MOV     DPH,R2
  186.    \   008C  8B82              MOV     DPL,R3
  187.    \   008E  E0                MOVX    A,@DPTR
  188.    \   008F  FB                MOV     R3,A
  189.    \   0090  120000            LCALL   ?ST_REL1_L13
  190.    \   0093  0400              DW      1024
  191.      63            c = read_XDATA(0xE00);        /* another way, for SMALL model */
  192.    \   0095  7B00              MOV     R3,#0
  193.    \   0097  7A0E              MOV     R2,#14
  194.    \   0099  8A83              MOV     DPH,R2
  195.    \   009B  8B82              MOV     DPL,R3
  196.    \   009D  E0                MOVX    A,@DPTR
  197.    \   009E  FB                MOV     R3,A
  198.    \   009F  120000            LCALL   ?ST_REL1_L13
  199.    \   00A2  0400              DW      1024
  200.      64            printf("Data at E000h = %02Xh\n",c);
  201.    \   00A4  120000            LCALL   ?LD_REL1_L11
  202.    \   00A7  0400              DW      1024
  203.    \   00A9  7A00              MOV     R2,#0
  204.    \   00AB  120000            LCALL   ?PUSH_R2_R3_L17
  205.    \   00AE  7B0F              MOV     R3,#LOW(?0006)
  206.    \   00B0  7A00              MOV     R2,#HIGH(?0006)
  207.    \   00B2  900004            MOV     DPTR,#4
  208.    \   00B5  120000            LCALL   printf
  209.      65              /* read a byte of CODE memory */
  210.      66            printf("Location 0 in code memory is: %02X",read_CODE(0));
  211.    \   00B8  7B00              MOV     R3,#0
  212.    \   00BA  7A00              MOV     R2,#0
  213.    \   00BC  8A83              MOV     DPH,R2
  214.    \   00BE  8B82              MOV     DPL,R3
  215.    \   00C0  E4                CLR     A
  216.    \   00C1  93                MOVC    A,@A+DPTR
  217.    \   00C2  FB                MOV     R3,A
  218.    \   00C3  7A00              MOV     R2,#0
  219.    \   00C5  120000            LCALL   ?PUSH_R2_R3_L17
  220.    \   00C8  7B26              MOV     R3,#LOW(?0007)
  221.    \   00CA  7A00              MOV     R2,#HIGH(?0007)
  222.    \   00CC  900004            MOV     DPTR,#4
  223.    \   00CF  120000            LCALL   printf
  224.      67                  /* show use of bit-addressable RAM variables */
  225.      68            if(read_bit(P1_0_bit) || read_bit(P1_1_bit))
  226.    \   00D2  209003            JB      P1.0,?0008
  227.    \   00D5  309102            JNB     P1.1,?0009
  228.    \   00D8            ?0010:
  229.    \   00D8            ?0011:
  230.    \   00D8            ?0008:
  231.      69              set_bit(BIT_VAR);   
  232.    \   00D8  D200              SETB    32.0
  233.    \   00DA            ?0009:
  234.      70          }
  235.    \   00DA            ?0012:
  236.    \   00DA  020000            LJMP    ?LEAVE_L17
  237.      71          
  238.      72          /* ------------------------------------------------------------
  239.      73           * Eratosthenese Sieve program from BYTE, 1/83  */
  240.      74           
  241.      75          #define SIZE 8190               /* size of array for sieve routine */
  242.      76          char flags[SIZE+1];     /* array for sieve */
  243.      77          
  244.      78          void sieve()  
  245.      79          {
  246.    \   00DD            sieve:
  247.    \   00DD  E4                CLR     A
  248.    \   00DE  7800              MOV     R0,#0
  249.    \   00E0  790E              MOV     R1,#14
  250.    \   00E2  120000            LCALL   ?ENTER_L17
  251.      80            register int i,k;     /* register class NOT supported -- ignored */
  252.      81            int prime,count,iter;
  253.      82          
  254.      83            printf("\nSieve: 10 iterations...\n");
  255.    \   00E5  7B49              MOV     R3,#LOW(?0013)
  256.    \   00E7  7A00              MOV     R2,#HIGH(?0013)
  257.    \   00E9  900002            MOV     DPTR,#2
  258.    \   00EC  120000            LCALL   printf
  259.      84            for (iter = 1; iter <= 10; iter++)        /* do program 10 times */
  260.    \   00EF  7B01              MOV     R3,#1
  261.    \   00F1  7A00              MOV     R2,#0
  262.    \   00F3  120000            LCALL   ?ST_REL2_L13
  263.    \   00F6  0C00              DW      3072
  264.    \   00F8            ?0015:
  265.    \   00F8  120000            LCALL   ?LD_REL2_L11
  266.    \   00FB  0C00              DW      3072
  267.    \   00FD  8B05              MOV     _R+5,R3
  268.    \   00FF  8A04              MOV     _R+4,R2
  269.    \   0101  7B0A              MOV     R3,#10
  270.    \   0103  7A00              MOV     R2,#0
  271.    \   0105  120000            LCALL   ?SI_CMP_LE_L02
  272.    \   0108  7003              JNZ     $+5
  273.    \   010A  020235            LJMP    ?0014
  274.    \   010D            ?0016:
  275.      85            {
  276.      86              count = 0;          /* initialize prime counter */
  277.    \   010D  7B00              MOV     R3,#0
  278.    \   010F  7A00              MOV     R2,#0
  279.    \   0111  120000            LCALL   ?ST_REL2_L13
  280.    \   0114  0A00              DW      2560
  281.      87              for (i = 0; i <= SIZE; i++)   /* set all flags true */
  282.    \   0116  7B00              MOV     R3,#0
  283.    \   0118  7A00              MOV     R2,#0
  284.    \   011A  120000            LCALL   ?ST_REL2_L13
  285.    \   011D  0400              DW      1024
  286.    \   011F            ?0019:
  287.    \   011F  120000            LCALL   ?LD_REL2_L11
  288.    \   0122  0400              DW      1024
  289.    \   0124  8B05              MOV     _R+5,R3
  290.    \   0126  8A04              MOV     _R+4,R2
  291.    \   0128  7BFE              MOV     R3,#254
  292.    \   012A  7A1F              MOV     R2,#31
  293.    \   012C  120000            LCALL   ?SI_CMP_LE_L02
  294.    \   012F  602A              JZ      ?0018
  295.    \   0131            ?0020:
  296.      88                flags[i] = TRUE;
  297.    \   0131  7B01              MOV     R3,#1
  298.    \   0133  8B05              MOV     _R+5,R3
  299.    \   0135  7B00              MOV     R3,#LOW(flags)
  300.    \   0137  7A00              MOV     R2,#HIGH(flags)
  301.    \   0139  120000            LCALL   ?PUSH_R5_L17
  302.    \   013C  8B05              MOV     _R+5,R3
  303.    \   013E  8A04              MOV     _R+4,R2
  304.    \   0140  120000            LCALL   ?LD_REL2_L11
  305.    \   0143  0500              DW      1280
  306.    \   0145  120000            LCALL   ?I_ADD_L14
  307.    \   0148  120000            LCALL   ?POP_R5_L17
  308.    \   014B  120000            LCALL   ?ST_IND1_L08
  309.    \   014E  7404              MOV     A,#4
  310.    \   0150  2F                ADD     A,R7
  311.    \   0151  FB                MOV     R3,A
  312.    \   0152  E4                CLR     A
  313.    \   0153  3E                ADDC    A,R6
  314.    \   0154  FA                MOV     R2,A
  315.    \   0155  120000            LCALL   ?POINC1_L05
  316.    \   0158  02                DB      2
  317.      89              for (i = 0; i <= SIZE; i++)
  318.    \   0159  80C4              SJMP    ?0019
  319.    \   015B            ?0018:
  320.    \   015B  7B00              MOV     R3,#0
  321.    \   015D  7A00              MOV     R2,#0
  322.    \   015F  120000            LCALL   ?ST_REL2_L13
  323.    \   0162  0400              DW      1024
  324.    \   0164            ?0023:
  325.    \   0164  120000            LCALL   ?LD_REL2_L11
  326.    \   0167  0400              DW      1024
  327.    \   0169  8B05              MOV     _R+5,R3
  328.    \   016B  8A04              MOV     _R+4,R2
  329.    \   016D  7BFE              MOV     R3,#254
  330.    \   016F  7A1F              MOV     R2,#31
  331.    \   0171  120000            LCALL   ?SI_CMP_LE_L02
  332.    \   0174  7003              JNZ     $+5
  333.    \   0176  020227            LJMP    ?0022
  334.    \   0179            ?0024:
  335.      90              {
  336.      91                if (flags[i])     /* found a prime */
  337.    \   0179  7B00              MOV     R3,#LOW(flags)
  338.    \   017B  7A00              MOV     R2,#HIGH(flags)
  339.    \   017D  8B05              MOV     _R+5,R3
  340.    \   017F  8A04              MOV     _R+4,R2
  341.    \   0181  120000            LCALL   ?LD_REL2_L11
  342.    \   0184  0400              DW      1024
  343.    \   0186  120000            LCALL   ?I_ADD_L14
  344.    \   0189  8A83              MOV     DPH,R2
  345.    \   018B  8B82              MOV     DPL,R3
  346.    \   018D  E0                MOVX    A,@DPTR
  347.    \   018E  7003              JNZ     $+5
  348.    \   0190  020219            LJMP    ?0027
  349.    \   0193            ?0026:
  350.      92                {
  351.      93                  prime = i + i + 3;        /* twice index + 3 */
  352.    \   0193  120000            LCALL   ?LD_REL2_L11
  353.    \   0196  0400              DW      1024
  354.    \   0198  8B05              MOV     _R+5,R3
  355.    \   019A  8A04              MOV     _R+4,R2
  356.    \   019C  120000            LCALL   ?LD_REL2_L11
  357.    \   019F  0400              DW      1024
  358.    \   01A1  120000            LCALL   ?I_ADD_L14
  359.    \   01A4  8B05              MOV     _R+5,R3
  360.    \   01A6  8A04              MOV     _R+4,R2
  361.    \   01A8  7B03              MOV     R3,#3
  362.    \   01AA  7A00              MOV     R2,#0
  363.    \   01AC  120000            LCALL   ?I_ADD_L14
  364.    \   01AF  120000            LCALL   ?ST_REL2_L13
  365.    \   01B2  0800              DW      2048
  366.      94                  for (k = i + prime; k <= SIZE; k += prime)
  367.    \   01B4  120000            LCALL   ?LD_REL2_L11
  368.    \   01B7  0400              DW      1024
  369.    \   01B9  8B05              MOV     _R+5,R3
  370.    \   01BB  8A04              MOV     _R+4,R2
  371.    \   01BD  120000            LCALL   ?LD_REL2_L11
  372.    \   01C0  0800              DW      2048
  373.    \   01C2  120000            LCALL   ?I_ADD_L14
  374.    \   01C5  120000            LCALL   ?ST_REL2_L13
  375.    \   01C8  0600              DW      1536
  376.    \   01CA            ?0029:
  377.    \   01CA  120000            LCALL   ?LD_REL2_L11
  378.    \   01CD  0600              DW      1536
  379.    \   01CF  8B05              MOV     _R+5,R3
  380.    \   01D1  8A04              MOV     _R+4,R2
  381.    \   01D3  7BFE              MOV     R3,#254
  382.    \   01D5  7A1F              MOV     R2,#31
  383.    \   01D7  120000            LCALL   ?SI_CMP_LE_L02
  384.    \   01DA  6032              JZ      ?0028
  385.    \   01DC            ?0030:
  386.      95                    flags[k] = FALSE;       /* kill all multiples */
  387.    \   01DC  7B00              MOV     R3,#0
  388.    \   01DE  8B05              MOV     _R+5,R3
  389.    \   01E0  7B00              MOV     R3,#LOW(flags)
  390.    \   01E2  7A00              MOV     R2,#HIGH(flags)
  391.    \   01E4  120000            LCALL   ?PUSH_R5_L17
  392.    \   01E7  8B05              MOV     _R+5,R3
  393.    \   01E9  8A04              MOV     _R+4,R2
  394.    \   01EB  120000            LCALL   ?LD_REL2_L11
  395.    \   01EE  0700              DW      1792
  396.    \   01F0  120000            LCALL   ?I_ADD_L14
  397.    \   01F3  120000            LCALL   ?POP_R5_L17
  398.    \   01F6  120000            LCALL   ?ST_IND1_L08
  399.    \   01F9  120000            LCALL   ?LD_REL2_L11
  400.    \   01FC  0800              DW      2048
  401.    \   01FE  8B05              MOV     _R+5,R3
  402.    \   0200  8A04              MOV     _R+4,R2
  403.    \   0202  7406              MOV     A,#6
  404.    \   0204  2F                ADD     A,R7
  405.    \   0205  FB                MOV     R3,A
  406.    \   0206  E4                CLR     A
  407.    \   0207  3E                ADDC    A,R6
  408.    \   0208  FA                MOV     R2,A
  409.    \   0209  120000            LCALL   ?I_ADD_ASG_L00
  410.      96                  count++;        /* primes found */
  411.    \   020C  80BC              SJMP    ?0029
  412.    \   020E            ?0028:
  413.    \   020E  740A              MOV     A,#10
  414.    \   0210  2F                ADD     A,R7
  415.    \   0211  FB                MOV     R3,A
  416.    \   0212  E4                CLR     A
  417.    \   0213  3E                ADDC    A,R6
  418.    \   0214  FA                MOV     R2,A
  419.    \   0215  120000            LCALL   ?POINC1_L05
  420.    \   0218  02                DB      2
  421.    \   0219            ?0027:
  422.    \   0219  7404              MOV     A,#4
  423.    \   021B  2F                ADD     A,R7
  424.    \   021C  FB                MOV     R3,A
  425.    \   021D  E4                CLR     A
  426.    \   021E  3E                ADDC    A,R6
  427.    \   021F  FA                MOV     R2,A
  428.    \   0220  120000            LCALL   ?POINC1_L05
  429.    \   0223  02                DB      2
  430.      97                  }
  431.      98                }
  432.      99            }
  433.    \   0224  020164            LJMP    ?0023
  434.    \   0227            ?0022:
  435.    \   0227  740C              MOV     A,#12
  436.    \   0229  2F                ADD     A,R7
  437.    \   022A  FB                MOV     R3,A
  438.    \   022B  E4                CLR     A
  439.    \   022C  3E                ADDC    A,R6
  440.    \   022D  FA                MOV     R2,A
  441.    \   022E  120000            LCALL   ?POINC1_L05
  442.    \   0231  02                DB      2
  443.     100            printf("%d primes, sieve done.\n",count); /* found in 10th pass */
  444.    \   0232  0200F8            LJMP    ?0015
  445.    \   0235            ?0014:
  446.    \   0235  120000            LCALL   ?LD_REL2_L11
  447.    \   0238  0A00              DW      2560
  448.    \   023A  120000            LCALL   ?PUSH_R2_R3_L17
  449.    \   023D  7B63              MOV     R3,#LOW(?0032)
  450.    \   023F  7A00              MOV     R2,#HIGH(?0032)
  451.    \   0241  900004            MOV     DPTR,#4
  452.    \   0244  120000            LCALL   printf
  453.     101          }
  454.    \   0247            ?0033:
  455.    \   0247  020000            LJMP    ?LEAVE_L17
  456.     102          
  457.     103          /* ------------------------------------------------------------ */
  458.     104          void main()   /* Main EXAMPLE.C program */
  459.     105          {
  460.    \   024A            main:
  461.    \   024A  E4                CLR     A
  462.    \   024B  7800              MOV     R0,#0
  463.    \   024D  7904              MOV     R1,#4
  464.    \   024F  120000            LCALL   ?ENTER_L17
  465.     106            printf("EXAMPLE.C sample program.\n");
  466.    \   0252  7B7B              MOV     R3,#LOW(?0034)
  467.    \   0254  7A00              MOV     R2,#HIGH(?0034)
  468.    \   0256  900002            MOV     DPTR,#2
  469.    \   0259  120000            LCALL   printf
  470.     107            set_timer();          /* turn on timer and interrupts */
  471.    \   025C  900000            MOV     DPTR,#0
  472.    \   025F  120000            LCALL   set_timer
  473.     108            printf("Timer enabled, bell should ring every 3 seconds.\n\n");
  474.    \   0262  7B96              MOV     R3,#LOW(?0035)
  475.    \   0264  7A00              MOV     R2,#HIGH(?0035)
  476.    \   0266  900002            MOV     DPTR,#2
  477.    \   0269  120000            LCALL   printf
  478.     109            do_io();               /* display RAM, Port1, etc. */
  479.    \   026C  900000            MOV     DPTR,#0
  480.    \   026F  12005B            LCALL   do_io
  481.     110            printf("\nPulsing Port 1.7 (8051 pin 8)\n");
  482.    \   0272  7BC9              MOV     R3,#LOW(?0036)
  483.    \   0274  7A00              MOV     R2,#HIGH(?0036)
  484.    \   0276  900002            MOV     DPTR,#2
  485.    \   0279  120000            LCALL   printf
  486.     111            pulse(200,0xA5);      /* call assembler routine pulse P1 */
  487.    \   027C  7BA5              MOV     R3,#165
  488.    \   027E  120000            LCALL   ?PUSH_R3_L17
  489.    \   0281  7BC8              MOV     R3,#200
  490.    \   0283  7A00              MOV     R2,#0
  491.    \   0285  900003            MOV     DPTR,#3
  492.    \   0288  120000            LCALL   pulse
  493.     112            sieve();              /* do the Sieve benchmark */
  494.    \   028B  900000            MOV     DPTR,#0
  495.    \   028E  1200DD            LCALL   sieve
  496.     113          }
  497.    \   0291            ?0037:
  498.    \   0291  020000            LJMP    ?LEAVE_L17
  499.    \   0000                    RSEG    ECSTR
  500.    \   0000            ?0005:
  501.    \   000F                    DS      15
  502.    \   000F            ?0006:
  503.    \   0026                    DS      23
  504.    \   0026            ?0007:
  505.    \   0049                    DS      35
  506.    \   0049            ?0013:
  507.    \   0063                    DS      26
  508.    \   0063            ?0032:
  509.    \   007B                    DS      24
  510.    \   007B            ?0034:
  511.    \   0096                    DS      27
  512.    \   0096            ?0035:
  513.    \   00C9                    DS      51
  514.    \   00C9            ?0036:
  515.    \   00E9                    DS      32
  516.    \   0000                    RSEG    CCSTR
  517.    \   0000  0A506F72          DB      10,'Port 1: %02X',10,0
  518.    \   0004  7420313A
  519.    \   0008  20253032
  520.    \   000C  580A00
  521.    \   000F  44617461          DB      'Data at E000h = %02Xh',10,0
  522.    \   0013  20617420
  523.    \   0017  45303030
  524.    \   001B  68203D20
  525.    \   001F  25303258
  526.    \   0023  680A00
  527.    \   0026  4C6F6361          DB      'Location 0 in code memory is: %02X',0
  528.    \   002A  74696F6E
  529.    \   002E  20302069
  530.    \   0032  6E20636F
  531.    \   0036  6465206D
  532.    \   003A  656D6F72
  533.    \   003E  79206973
  534.    \   0042  3A202530
  535.    \   0046  325800
  536.    \   0049  0A536965          DB      10,'Sieve: 10 iterations...',10,0
  537.    \   004D  76653A20
  538.    \   0051  31302069
  539.    \   0055  74657261
  540.    \   0059  74696F6E
  541.    \   005D  732E2E2E
  542.    \   0061  0A00
  543.    \   0063  25642070          DB      '%d primes, sieve done.',10,0
  544.    \   0067  72696D65
  545.    \   006B  732C2073
  546.    \   006F  69657665
  547.    \   0073  20646F6E
  548.    \   0077  652E0A00
  549.    \   007B  4558414D          DB      'EXAMPLE.C sample program.',10,0
  550.    \   007F  504C452E
  551.    \   0083  43207361
  552.    \   0087  6D706C65
  553.    \   008B  2070726F
  554.    \   008F  6772616D
  555.    \   0093  2E0A00
  556.    \   0096  54696D65          DB      'Timer enabled, bell should ring every 3 seconds.',10,10,0
  557.    \   009A  7220656E
  558.    \   009E  61626C65
  559.    \   00A2  642C2062
  560.    \   00A6  656C6C20
  561.    \   00AA  73686F75
  562.    \   00AE  6C642072
  563.    \   00B2  696E6720
  564.    \   00B6  65766572
  565.    \   00BA  79203320
  566.    \   00BE  7365636F
  567.    \   00C2  6E64732E
  568.    \   00C6  0A0A00
  569.    \   00C9  0A50756C          DB      10,'Pulsing Port 1.7 (8051 pin 8)',10,0
  570.    \   00CD  73696E67
  571.    \   00D1  20506F72
  572.    \   00D5  7420312E
  573.    \   00D9  37202838
  574.    \   00DD  30353120
  575.    \   00E1  70696E20
  576.    \   00E5  38290A00
  577.    \   0000                    RSEG    UDATA
  578.    \   0000            flags:
  579.    \   1FFF                    DS      8191
  580.    \   0000                    RSEG    CDATA
  581.    \   0000  0000              DW      0
  582.    \   0000                    RSEG    IDATA
  583.    \   0000            ?0001:
  584.    \   0002                    DS      2
  585.    \   0002                    END
  586.  
  587. Errors: none
  588. Warnings: none
  589. Code size: 660
  590.  
  591.