Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.arch.embedded > #30468
| From | David Brown <david.brown@hesbynett.no> |
|---|---|
| Newsgroups | comp.arch.embedded |
| Subject | Re: Arm registers |
| Date | 2021-04-17 18:50 +0200 |
| Organization | A noiseless patient Spider |
| Message-ID | <s5f3l2$u2k$1@dont-email.me> (permalink) |
| References | <s5cok2$cfj$1@reader1.panix.com> <s5ee5e$9u8$1@dont-email.me> <s5f09r$5rs$2@reader1.panix.com> |
On 17/04/2021 17:53, Hul Tytus wrote: > David - I'm in the process of putting together an assembler for the Arm > 32 bit processors. There is no all-knowing compiler envolved so I need > to know what machine codes are valid for a given processor. Any suggestions > on where that information can be found? > Why? There are perfectly good Arm assemblers available freely. Is this just for fun, or do you have a good reason behind it? Arm use what they call "Unified Assembly Language" to let people write assembly in a single consistent format that can be used to generated object code in the various instruction formats. That means a single UAL instruction might lead to multiple object code instructions if necessary (for example, loading a register with a constant might need multiple instructions depending on the constant value and the instruction set). Add to that there /lots/ of different subsets of the instructions that are available on different devices. It is a big effort writing an assembler her. > > David Brown <david.brown@hesbynett.no> wrote: >> On 16/04/2021 21:30, Hul Tytus wrote: >>> sci.electronics.design >>> Arm Cortex assembley code >>> >>> Does the Arm Cortex support both the "thumb" 16 bit machine codes and also >>> the 32 bit codes? I had been under the impression that Cortex devices only >>> provided the thumb codes but a little time going through "Arm v7-M >>> Architecture Reference Manual" indicates otherwise. Whether or not that >>> reference manual is suitable for Cortex information needs verification also. >>> There may be a more pertinent text available. >>> And another question: the thumb instructions show 8 available registers >>> rather than 16. However, somewhere on the internet a site states that 16 >>> registers are available & which group of 8 varies with the "processor state". >>> Any suggestions on an Arm manual or text that defines "processor state"? The >>> CPS (change processor state) machine code description in the "Arm v7-M >>> Architecture Reference Manual" doesn't mention register groups. >>> > >> You seem to be mixing up a range of different things here. (That is not >> surprising - ARM has /seriously/ confusing terminology here, with >> similar names for different things, different names for similar things, >> different numbers for instruction sets, architectures, and implementations.) > >> The answers you got from Richard are all correct - I am just wording >> things a little differently, to see if that helps your understand. > >> In the beginning, Arm used a 32-bit fixed-size instruction set. It was >> fast, but not very compact. Most instructions had three registers (so >> you have "Rx = Ry + Rz"), with 16 registers - that adds up to 12 bits of >> instruction just for the registers. > >> When they started getting serious in the microcontroller market, this >> extra space was a cost - it meant code was bigger than for other >> microcontrollers, and you needed a bigger and more expensive flash. So >> they invented the "Thumb" mode. Here, instructions are 16-bit only and >> so much more compact. These were a subset of the ARM instructions - >> instructions only cover two registers, and for many operations these >> could only come from 8 registers (so only needed 6 bits of the >> instruction set). The cpu decoder expanded the Thumb instructions into >> 32-bit ARM instructions before executing them. > >> Thumb gave more compact code, but slower code, and there were some >> things you simply could not do in Thumb mode. So the microcontrollers >> had to support both instruction sets, and you would switch sets in code >> (interrupts, for example, would be in ARM mode for speed). It was all a >> bit of a mess. > >> So ARM invented "Thumb-2". This was a set of 32-bit instructions that >> can be mixed along with the slightly re-named "Thumb-1" 16-bit >> instructions. Sometimes it is now all called "Thumb2", or just "Thumb" >> (since for the vast majority of ARM programmers, 16-bit only thumb was >> ancient history from before they started using the devices). 16-bit and >> 32-bit instructions are called "narrow" and "wide" forms. These new >> 32-bit additions to thumb meant you could get a mixed code that was >> compact, fast, and covered all needs (including full access to all >> registers). > >> So for the Cortex-M devices, Thumb2 is the only set needed - they don't >> support "old-style" 32-bit Arm instructions. You no longer need to >> worry about changing states or modes, you are always in "thumb2" mode. > >> Different Cortex-M processors support different subsets and extensions >> of this, so it is important that you inform your compiler of exactly >> which device you are using. Do that, and you don't really need to care >> about the details for the most part - the compiler does the work. But >> it can be interesting to know what is going on. > > > > >> There are also Cortex-A devices for applications processors - basically, >> running Linux (including Android) or, occasionally, Windows. And there >> are Cortex-R devices for safety-critical systems. But I expect you are >> talking about Cortex-M devices here.
Back to comp.arch.embedded | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
Arm registers Hul Tytus <ht@panix.com> - 2021-04-16 19:30 +0000
Re: Arm registers Richard Damon <Richard@Damon-Family.org> - 2021-04-16 16:20 -0400
Re: Arm registers Hul Tytus <ht@panix.com> - 2021-04-16 22:12 +0000
Re: Arm registers Richard Damon <Richard@Damon-Family.org> - 2021-04-16 19:41 -0400
Re: Arm registers Hul Tytus <ht@panix.com> - 2021-04-17 15:43 +0000
Re: Arm registers Theo <theom+news@chiark.greenend.org.uk> - 2021-04-17 21:45 +0100
Re: Arm registers Hul Tytus <ht@panix.com> - 2021-04-18 13:57 +0000
Re: Arm registers Theo <theom+news@chiark.greenend.org.uk> - 2021-04-18 16:31 +0100
Re: Arm registers Hul Tytus <ht@panix.com> - 2021-04-19 21:22 +0000
Re: Arm registers David Brown <david.brown@hesbynett.no> - 2021-04-17 12:43 +0200
Re: Arm registers Hul Tytus <ht@panix.com> - 2021-04-17 15:53 +0000
Re: Arm registers David Brown <david.brown@hesbynett.no> - 2021-04-17 18:50 +0200
Re: Arm registers Hul Tytus <ht@panix.com> - 2021-04-17 19:30 +0000
Re: Arm registers David Brown <david.brown@hesbynett.no> - 2021-04-18 15:02 +0200
Re: Arm registers Richard Damon <Richard@Damon-Family.org> - 2021-04-17 13:16 -0400
Re: Arm registers Hul Tytus <ht@panix.com> - 2021-04-17 19:23 +0000
Re: Arm registers Theo <theom+news@chiark.greenend.org.uk> - 2021-04-17 21:42 +0100
Re: Arm registers Tauno Voipio <tauno.voipio@notused.fi.invalid> - 2021-04-17 21:09 +0300
Re: Arm registers Hul Tytus <ht@panix.com> - 2021-04-17 19:38 +0000
Re: Arm registers Tauno Voipio <tauno.voipio@notused.fi.invalid> - 2021-04-18 11:44 +0300
Re: Arm registers Hul Tytus <ht@panix.com> - 2021-04-18 14:07 +0000
Re: Arm registers David Brown <david.brown@hesbynett.no> - 2021-04-18 15:10 +0200
Re: Arm registers antispam@math.uni.wroc.pl - 2021-04-17 21:05 +0000
Re: Arm registers Hul Tytus <ht@panix.com> - 2021-04-18 14:00 +0000
csiph-web