Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.arch.embedded > #30466

Re: Arm registers

From Hul Tytus <ht@panix.com>
Newsgroups comp.arch.embedded
Subject Re: Arm registers
Date 2021-04-17 15:53 +0000
Organization PANIX Public Access Internet and UNIX, NYC
Message-ID <s5f09r$5rs$2@reader1.panix.com> (permalink)
References <s5cok2$cfj$1@reader1.panix.com> <s5ee5e$9u8$1@dont-email.me>

Show all headers | View raw


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?

Hul

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


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