What is this?
| Architecture | Instruction
Set |
Thumb
Instructions? |
Multiply
Instruction |
DSP
Instructions |
Comments |
| ARMv1 | 1 | no | no | no | Obsolete |
| ARMv2 | 2 | no | no | no | Obsolete |
| ARMv3 | 3 | no | no | no | |
| ARMv3M | 3 | no | yes | no | |
| ARMv4 | 4 | no | yes | no | |
| ARMv4T | 4 | yes | yes | no | This is the one in the box. |
| ARMv5 | 5 | no | yes | no | Has CLZ |
| ARMv5T | 5 | yes | yes | no | |
| ARMv5TE | 5 | yes | yes | yes |
Thumb instructions are 16 bit, and accelerated.
| Processor
Core |
ARM
ISA |
Thumb
ISA |
Comments |
| ARM7TDMI | v4T | v1 | Most of the ARM7xx processors |
| ARM9TDMI | v4T | v1 | ARM[920|922|940]T: 920T is the one in the box.
`T' means includes thumb instructions `DMI' means direct memory interface |
| StrongARM | v4 | n/a | Intel SA-110. Found in Compaq versions of IPAQ. |
| ARM9E | v5TE | v2 | |
| ARM10E | v5TE | v2 | |
| XScale | v5TE | v2 | Manufactured by Intel. HP versions of IPAQ. |
partially separate register sets different modes
link register (lr), program counter (pc) are
special, but not very special
| Exception
Type |
Processor
Mode |
Instruction
Address |
| Reset | supervisor | 0x00 |
| Undefined instruction | undefined | 0x04 |
| Software interrupt | supervisor | 0x08 |
| Prefetch abort | abort | 0x0c |
| Data abort | abort | 0x10 |
| Ordinary interrupt | IRQ | 0x18 |
| Fast interrupt | FIQ | 0x1c |
ldr pc, [pc, #0x18]; 0xe590f018 is the binary encoding
which you will normally find in addresses 0x00 to
0x1c.
0x20
to 0x3c.| Bit | Mnemonic | Meaning |
| 31 | N | Negative |
| 30 | Z | Zero |
| 29 | C | Carry |
| 28 | V | Overflow |
| 8-27 | DNM | Does not matter in v4 |
| 7 | I | Interrupts disabled |
| 6 | F | Fast interrupts disabled |
| 5 | T | Thumb execution |
| 4 | M4 | Five processor mode bits |
| 3 | M3 | |
| 2 | M2 | |
| 1 | M1 | |
| 0 | M0 |
| M[4:0] | Mode | Registers accessible |
| 10000 | User | |
| 10001 | FIQ (Fast interrupt processing) | |
| 10010 | IRQ (Interrupt processing) | |
| 10011 | Supervisor | |
| 10111 | Abort | |
| 11011 | Undefined | |
| 11111 | System |
General Comments
Step-by-step
; In calling code
bl <entry point> ; this treats the pc and lr specially
; In called code
entry point:
mov ip, sp
stmdb sp!, {fp, ip, lr} ; and usually others,
; determined by the registers the function uses
; optimizer changes this instruction
...
ldmia sp, {fp, sp, pc} ; and whatever others
; exact inverse of stmdb
Note the role of the index pointer (ip), link register (lr) and stack pointer (bl).
; In calling code
swi n ; n identifies which system call you are calling
; In kernel
kernel entry:
; Change to system mode
; Save user state on user stack
; Return to supervisor mode
ldr r4, [lr, #-4] ; gets the request type
; at this point you can get the arguments
; Where are they?
; Retrieve kernel state from kernel stack
; Do kernel work
Questions:
Hint. How does gcc pass arguments into a function?
Suggestions:
Try reading this.
Return to: