Formati e Modalità di Indirizzamento delle Istruzioni ARM7: Chiarimenti
Set di Istruzioni ARM7TDMI: Formati vs. Modalità di Indirizzamento
L'elenco fornito (Elaborazione Dati, Moltiplica, ecc.) descrive categorie/formati di istruzione, non modalità di indirizzamento. L'ARM7TDMI (ARMv4T) supporta multiple modalità di indirizzamento all'interno di tali formati.
Modalità di Indirizzamento ARM7 (per Load/Store ed Elaborazione Dati)
1. Modalità di Indirizzamento Load/Store (LDR/STR)
| Modalità | Esempio Sintassi | Descrizione |
|---|---|---|
| Offset Immediato | LDR R0, [R1, #4] | Registro base + immediato senza segno 12-bit (0–4095) |
| Offset Registro | LDR R0, [R1, R2] | Base + registro (shift opzionale: LSL/LSR/ASR/ROR #n) |
| Offset Registro Scalato | LDR R0, [R1, R2, LSL #2] | Base + (registro × 1/2/4/8) |
| Pre-Indicizzato (Writeback) | LDR R0, [R1, #4]! | Aggiorna base: R1 ← R1 + offset, poi carica |
| Post-Indicizzato | LDR R0, [R1], #4 | Carica da base, poi aggiorna base: R1 ← R1 + offset |
| Relativo al PC (Literal Pool) | LDR R0, =0x12345678 | L'assemblatore posiziona la costante in literal pool; carico relativo al PC |
2. Indirizzamento Operand2 Elaborazione Dati (Shift)
Usato in ADD, SUB, AND, ORR, EOR, MOV, CMP, ...
| Tipo Shift | Sintassi | Esempio |
|---|---|---|
| Immediato (8-bit rotato) | #imm | MOV R0, #0xFF |
| Registro (nessuno shift) | Rm | ADD R0, R1, R2 |
| Shift Logico a Sinistra | Rm, LSL #n / Rs | ADD R0, R1, R2, LSL #2 |
| Shift Logico a Destra | Rm, LSR #n / Rs | MOV R0, R1, LSR R2 |
| Shift Aritmetico a Destra | Rm, ASR #n / Rs | CMP R0, R1, ASR #3 |
| Rotate a Destra | Rm, ROR #n / Rs | ORR R0, R1, R2, ROR #4 |
| Rotate a Destra Esteso | Rm, RRX | MOV R0, R1, RRX (rotate 1-bit attraverso Carry) |
Categorie di Formato Istruzione (Quello che Hai Elencato)
Le tue 6 categorie sono corrette per gruppi di formato istruzione:
- Elaborazione Dati (operazioni ALU: ADD, SUB, AND, EOR, MOV, CMP...)
- Moltiplica (MUL, MLA, UMULL, SMULL, UMLAL, SMLAL)
- Swap (SWP, SWPB) — accesso memoria atomico
- Load/Store (LDR, STR, LDM, STM, LDRH, STRH, LDRSB, LDRSH)
- Branch (B, BL, BX, BLX)
- Coprocessore / Sistema (CDP, LDC, STC, MCR, MRC, MSR, MRS, SWI/SVC)
Nota: "S.M.L.A" probabilmente si riferisce a Signed Multiply Long Accumulate (SMLAL) o estensioni DSP simili (ARMv5TE). ARM7TDMI non ha SMLA; quello è ARM9E/ARM10E/ARM11.
Indirizzamento Stato Thumb (16-bit)
- Subset: Offset immediato (5-bit), Offset registro (nessuno shift), Relativo SP, Relativo PC.
- Nessun pre/post-indicizzato writeback in Thumb (eccetto LDM/STM).