I put up a new version of the .asmh file.
It includes some macros STRUCTDEF/STRUCTEND and support infrastructure, to allow simple C structures to be relatively easily converted to assembler symbols. So code that looks like:
/**
* @brief CRC calculation unit
*/
STRUCTDEF CRC
__IO uint32_t DR;
__IO uint8_t IDR;
uint8_t RESERVED0;
uint16_t RESERVED1;
__IO uint32_t CR;
ENDSTRUCT
(which is easy to get from the C-style .h file using some editor keyboard macros) ends up producing assembler that defines CRC_DR=0, CRC_IDR=4, CRC_RESERVED0=5, CRC_RESERVED1=6, CRC_CR=8...
And then I added all the stm32f103 peripheral internal structure definitions.
(The CAN peripheral is incomplete. A CAN peripheral apparently includes arrays of CAN_TxMailBox structures, and my macros aren't up to doing nested structures.)
This requires a bit of editing of the blink.S sketch I posted (remove the _O from the offset names of the manually-defined GPIO peripheral registers.)
(Needless to say, this has not been extensively debugged.)
I suggest adding "-mcpu=cortex-m3" to the assembler command line, and you might want to consider "-asl=blink.lis" to generate a "significantly aware" listing file (which has advantages and disadvantages. The concise output produced by objdump is ... concise. The assembler listing ... isn't. (91 pages for blink.lis Mostly the (largely useless) bitmask symbols, which could be omitted by using -al=blink.lis instead.)