Files
Yggdrasil/docs/infotro/SEm/ASM.md
T
2024-01-28 12:55:21 +01:00

3.8 KiB
Raw Blame History

Intro

Mode de fonctionnement

A l'initialisation du processeur, le mode "system" est activé

Processor mode Notation Description
User _usr The normal program execution mode
FIQ _fiq Designed to support a high-speed transfer or channel process
IRQ _irq Used for general–purpose interrupt handling
Supervisor _svc A protected mode for the operating system
Abort _abt Used to implement virtual memory and/or memory coprocessor
Undefined _und Used to support software emulation of hardware coprocessor
System _sys Used to run privileged operating system tasks

Les registres du processeur ARM

!Pièces jointes/Pasted image 20230928150906.png

Rôle des registres

  • Les registres r0 à r12sont libre pour un usage général
  • Le registre r13appelé SP(Stack Pointer) sert comme pointeur de pile propre à chaque mode
  • Le registre r14 appelé LR(Link Register) mémorise l'adresse de retour lors d'un appel de fonction
  • Le registre r15appelé PC(Program Counter) pointe sur la prochaine instruction à exécuter
  • CPSR(Current Program Status Register) est le registre d'états courant du processeur
  • SPSR (Saved Program Status Register) est le registre de sauvegarde de l'ancien registre d'états

Registres CPSRet SPSR

Les registres CPSRet SPSRregroupent:

  • Les fanions concernant la plus récente opération réalisée par l'ALU
  • Les bits d'acceptation ou de refus d'interruptions électriques
  • Le mode du processeur codé sur 5 bits
  • Le bit d'activation du jeu d'instructions Thumb !Pièces jointes/Pasted image 20231120100133.png

Les fanions

A chaque opération mathématique ou logique, l'ALU peut positionner des fanions

  • N Negative - Nombre négatif. C'est le bit de signe du nombre en complément à 2
  • Z Zero - Nombre = 0. Utilisé généralement avec des compteurs pour effectuer des boucles
  • C Carry - Retenue ou dépassement de capacité lors d'opérations sur des nombres logiques
  • V oVerflow - Dépassement de capacité lors d'opérations arithmétiques en complément à 2

Warning

Toute les instructions n'affectent pas tous les fanions

Exécution conditionnelle

Chaque instruction du processeur ARM peut-être exécutée sous condition

  • Pour rendre une instruction conditionnelle, il suffit d'ajouter deux lettres à sa mnémonique
  • L'opcode de chaque instruction comprend un champ "condition"
packetdiag {
colwidth = 32;
node_height = 15;
28-31: Cond;
}
CMP     r0, r1      ; Update flags based on r0 - r1
ADDGT   r0, r0, #4  ; If r0 greater than r1 THEN r0 = r0 + 4
					; ELSE ADDGT is skipped
ADDLT   r1, r1, #4  ; IF r0 less than r1 THEN r1 = r1 + 4
					; ELSE ADDLT is skipped

!Pièces jointes/Pasted image 20230928151308.png

Instructions de branchement

Instruction B

B{cond} label

Le champ offset autorise un saut de \pm 32 Mbytes (2^{24}<<2) /2

Carry

Pour déterminer si une opération active le flag de carry, interprétez les deux arguments comme des entiers non signés.

Addition (inclus CMN)

Le flag Cest set à 1 si l'addition produit un carry sinon le flag et set à 0.

Soit l'addition x+y avec x et y interprété comme entier non signé. Si x+y est trop grand pour être représenté comme un entier de 32 bit, C est set à 1. Si x+y peut être représenté comme un entier de 32 bit, C est set à 0.

Soustraction (inclus CMP)

Le flag C est set à 0 si la soustraction produit un borrow (p ex. si le résultat en non signé underflow). Sinon le flag est set à 1.

Soit la soustraction x-y avec x et y interprété comme entiers non signé. Si x<y, le résultat devrait être négatif, C est set à 0. Si x\geq y, C est set à 1. $$\begin{align} x < y &\to C=0 \ x \geq y &\to C=1 \end{align}$$