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