View Single Post
Guest | Posts: n/a | Thanked: 0 times | Joined on
#15
Originally Posted by Matan View Post
If you do want to learn ARM assembly (it is useful for a lot of things, just not for speed), you need the ARM ARM, since that is the standard text.
And here it is: The ARM Architecture Reference Manual. It's not a tutorial but a comprehensive overview of the "ideal" ARM architecture. Real ARM CPUs amend this text with their own specifications. See http://www.arm.com for details.

Learning ARM assembly on Linux is very time consuming. The OS is stepping on your fingers at every opportunity. You would make better use of your time to learn ARM assembly on a simple ARM7TDMI-based development board, such as this one (33 euros, also see prices for other boards). They cost only tens of dollars and run your program without the burden of an operating system. After you get the hang of assembly programming, you'll see better where the extra effort is beneficial. Most any user-facing software can be written in mixed Python/C/Asm these days.

EDIT: Here's a real-world scenario I'm currently working on. Maybe this will illustrate how relevant assembly code is on modern CPU architectures:
  • NXP LPC2103 ARM7TDMI-based microcontroller
  • About 60 MHz (58.9824 MHz actually)
  • 32 kB Flash memory
  • 8 kB RAM
  • Monochrome 240x64 graphical user interface
  • USB and serial port for communication with automation systems
  • Several time-sensitive peripherals to monitor and control
  • Requirement: Sub-millisecond response time to fault conditions
  • Requirement: Sub-microsecond response time to external pulses
  • About 13000 lines of code
  • ... of which about 500 lines is written in assembly code, rest is in C.

So even in a deeply embedded time-critical application such as this one, assembly code accounts for less than 4% of total lines of code. A desktop- or pocket-class machine has even less use for assembly optimization.

Last edited by jethro.itt; 2009-02-23 at 09:22.
 

The Following 4 Users Say Thank You to For This Useful Post: