This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

I wanted to learn how the ARM architecture works, any directions?

After studying the AVR processor inside the ATMega328P I wanted to learn an architecture that is actually used somewhere, and since ARM cores seem to be into every device on the planet and the x86 architecture looks very complex to me I decided on that.

I have a few doubts though, for one I didn't quite get wether the fact that the designs are all from the same company means that writing assembly code with the same opcodes will run on every chip with minor ajustments.

For two I couldn't find a tab that lists all the opcodes with their respective functions like the one in the ATMega328P datasheet, only descriptions on how the chips function.

For three I didn't quite get wether ARM cpus have built in floating point units or just integer arithmetic.

I'm sorry if this all seems stupid or naive, as most probably I couldn't find all of omegle  this because these are industry secrets. Does anyone know?

Parents
  • For better or worse, "ARM" is actually a family of "vaguely similar" architectures, and the architecture is for the CPU and some "close" peripherals (interrupt controller, sysTick timer)  That means that you pretty much need to pick a particular chip if you want to study things in the same depth that you'd get from studying the ATmega328p datasheet.

    Most of the ARM chips aimed at "8-bit microcontroller replacement" are likely to have a "Cortex-M0plus" "core" (CM0) (smallest, cheapest, most power-efficient, simplest.)  The detailed architecture (including all the instructions) is described in the "ARMv6m Architecture Reference Manual": https://developer.arm.com/documentation/ddi0419/c/  I should probably also recommend Joseph Yiu's book: https://www.amazon.com/Definitive-Guide-Cortex-Cortex-M0-Processors/dp/0128032774  The documentation tends to be scattered through multiple documents, and is sometimes of the annoying form "this architecture supports the same thing as the bigger architecture, except for xxx"  (I think it's gotten better than it used to be, though.)  Some vendor chip-specific documentation will have information about the CPU (SAM3X8) while others simply refer to the ARM documentation (SAMD.)  Grr.

    The ARM ARM does not describe any of the vendor-dependent peripherals; for them you need to refer to the vendors' data sheets or user guides or whatever they call them.

    As for your doubts:

    1. CPUs more advanced than the Cortex-M0+ add instructions (and variations of instructions.)  That means that assembly language written for a CM0 will probably run even on the more advanced CPUs, but not vis versa.  For example, the CM0 does not have a "divide" instruction.  Also, any assembly language that accesses vendor peripherals is probably not portable.
    2. Complete lists of instructions are in the ARM ARM I mentioned earlier.  ARM instruction code (especially when compressed to "THUMB", as is done on the CM0) is ... not as simple as "these are the opcodes."  For example, there are three different "add" instruction formats depending on whether you're adding a register, a 3-bit (!) immediate constant, or an 8-bit immediate constant.
    3. A CM0 CPU does not have floating point instructions.  An M4 ("Cortex M4F" - an ARMv7m architecture) CPU optionally does have floating point, which can be 32bit only, or include double-precision 64bit floats.
Reply
  • For better or worse, "ARM" is actually a family of "vaguely similar" architectures, and the architecture is for the CPU and some "close" peripherals (interrupt controller, sysTick timer)  That means that you pretty much need to pick a particular chip if you want to study things in the same depth that you'd get from studying the ATmega328p datasheet.

    Most of the ARM chips aimed at "8-bit microcontroller replacement" are likely to have a "Cortex-M0plus" "core" (CM0) (smallest, cheapest, most power-efficient, simplest.)  The detailed architecture (including all the instructions) is described in the "ARMv6m Architecture Reference Manual": https://developer.arm.com/documentation/ddi0419/c/  I should probably also recommend Joseph Yiu's book: https://www.amazon.com/Definitive-Guide-Cortex-Cortex-M0-Processors/dp/0128032774  The documentation tends to be scattered through multiple documents, and is sometimes of the annoying form "this architecture supports the same thing as the bigger architecture, except for xxx"  (I think it's gotten better than it used to be, though.)  Some vendor chip-specific documentation will have information about the CPU (SAM3X8) while others simply refer to the ARM documentation (SAMD.)  Grr.

    The ARM ARM does not describe any of the vendor-dependent peripherals; for them you need to refer to the vendors' data sheets or user guides or whatever they call them.

    As for your doubts:

    1. CPUs more advanced than the Cortex-M0+ add instructions (and variations of instructions.)  That means that assembly language written for a CM0 will probably run even on the more advanced CPUs, but not vis versa.  For example, the CM0 does not have a "divide" instruction.  Also, any assembly language that accesses vendor peripherals is probably not portable.
    2. Complete lists of instructions are in the ARM ARM I mentioned earlier.  ARM instruction code (especially when compressed to "THUMB", as is done on the CM0) is ... not as simple as "these are the opcodes."  For example, there are three different "add" instruction formats depending on whether you're adding a register, a 3-bit (!) immediate constant, or an 8-bit immediate constant.
    3. A CM0 CPU does not have floating point instructions.  An M4 ("Cortex M4F" - an ARMv7m architecture) CPU optionally does have floating point, which can be 32bit only, or include double-precision 64bit floats.
Children
No data