For L2 switches, there are mac addresses for different functions (to be able to communicate (when we want to telnet, ping or do snmp to the switch) and spanning tree (to form the bridge ID). On some manufactures switches, they use 1 mac address for all functions, Cisco does not. On the 4/5/6x00 devices, there are 1024 mac addresses assigned to the upervisor (1 or more for the switch, 1000 for spanning tree (PVST, each instance has its' own mac address)). To see the addresses on those switches, do a show module. On the XL series, there is a range, but it seems much smaller (at least on my 2916XL), if you do a show mac self, you would see the range of addresses assigned to the switch. It will use the first one in the range for it self and as part of the bridge id for spanning tree. For Cisco, they are burned in an eprom...but it varies on platform as to were they are located (mother board, supervisor or in the case of the 5500, on the backplane).
Catalyst 6000 family switches have a pool of 1024 MAC addresses that can be used as bridge identifiers for VLANs running under PVST+ or for MISTP instances. You can use the show module command to view the MAC address range.