Joining the conversation late... I agree that there is a need to know the details of the peripherals, but not necessarily the architecture of the CPU (CPU registers, etc.) in many cases. I grew up doing assembly (PDP-8, PDP-11, MC6800, then PIC16, PIC18). Since moving to PIC24 and PIC32, the only assembly I've had to deal with is for writing bootloaders. That's also the place where I had to deal with linker scripts. On the PIC32, I needed the C startup code to run before my C bootload code. Then, when the application runs, it runs its own compiler generated startup code. I did my bootloader startup code by looking at the disassembly of a normal startup and adapting it to what I need. One interesting thing I found just last week was I had a jump to the start of my C code at the end of the startup. Worked fine in the simulator, but crashed on hardware. The PIC32 (and generally MIPS cores) executes the instruction after the jump before doing the jump. There WAS no instruction after the jump, so the CPU executed erased flash, which caused an exception. THAT was fun to figure out! So... I'm now mostly using C, but now and then have to dig into assembly. Harold --=20 FCC Rules Updated Daily at http://www.hallikainen.com - Advertising opportunities available! --=20 http://www.piclist.com PIC/SX FAQ & list archive View/change your membership options at http://mailman.mit.edu/mailman/listinfo/piclist .