Page 283 - Introduction to Microcontrollers Architecture, Programming, and Interfacing of The Motorola 68HC12
P. 283

260                                 Chapter 9 Implementation of C Procedures


                 unsigned char guc; int gsi;
                 main(){ char Isc; unsigned int lui;
                    Isc = Isc & guc; Isc &= 0x12; gsi = gsi | lui;
                    gsi = gsi & 0x1234; lui = Isc * guc; lui = lui / guc;
                 }
                                      a. A C program

                  4: main(){ char Isc; unsigned int lui;
              0000095B 1B9D             LEAS -3,SP
                  5:     Isc = Isc & guc; Isc &= 0x12;
              0000095D A682             LDAA 2, SP
              0000095F B40800           ANDA $0800
              00000962 6A82             STAA 2,SP
              00000964 OD82ED            BCLR 2,SP f#237
                  6:     gsi = gsi | lui; gsi = gsi | 0x1234;
              00000967 FC0801           LDD     $0801
              0000096A EA81             GRAB 1,SP
              0000096C AA80             ORAA 0,SP
              0000096E 7C0801            STD    $0801
              00000971 1C080112         BSET $0801,#18
              00000975 1C080234         BSET $0802,#52
                  7:     lui = Isc * guc;
              00000979 A682             LDAA 2,SP
              0000097B B706             SEX A r Y
              0000097D F60800           LDAB $0800
              00000980 87                CLRA
              00000981 13               EMUL
              00000982 6C80              STD    0,SP
                  7:     lui = lui / guc;
              00000984 F60800           LDAB $0800
              00000987 87               CLRA
              00000988 B745             TFR     D,X
              0000098A ECB1             LDD     0,SP
              0000098C 1810              IDIV
              0000098E 6E80              STX    0,SP
                  8: }
              00000990 1B83             LEAS 3,SP
              00000992 3D                RTS
                          b. Assembly Language Generated by Part (a)
                         Figure 93. A C Program with Some Operators

        However, if one of the operands is constant, BSET can be used. The expression gsi =
        gsi | 0x1234; or equivalently gsi |= 0x1234; is realized by
                   BSET $0801,#18 ;OR high byte of global variable gsi with Ox 12
                   BSET $0802, #52 ; OR global variable low byte gsi with 0x34
   278   279   280   281   282   283   284   285   286   287   288