diff --git a/docs/README.md b/docs/README.md index 3520f3c..df4d4e4 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,5 +1,9 @@ #Demo +$$ +E=mc^2 +$$ +[transmission_process.md](transmission_process.md) ## embedding it directly ```mermaid diff --git a/docs/arm/ASM.md b/docs/arm/ASM.md new file mode 100644 index 0000000..b07d74a --- /dev/null +++ b/docs/arm/ASM.md @@ -0,0 +1,55 @@ +# 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` à `r12`sont libre pour un usage général +- Le registre `r13`appelé `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 `r15`appelé `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 `CPSR`et `SPSR` +Les registres `CPSR`et `SPSR`regroupent: +- 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" + ![[Pièces jointes/Pasted image 20231120103537.png]] +```armasm +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 \ No newline at end of file diff --git a/docs/arm/PLA.md b/docs/arm/PLA.md new file mode 100644 index 0000000..8a82ce8 --- /dev/null +++ b/docs/arm/PLA.md @@ -0,0 +1,162 @@ +# Tailles +- Nibble: 4 bits +- Byte: 8 bits +- Halfword: 16 bits +- Word: 32 bits +- Double Word: 64 bits + +# Bases +## Decimal +{digits} + +Exemple: +ex: 154 + +## Hexadecimal +0x_{hex_digits} +&{hex_digits} + +Exemple: +0x9A +&9A + +## Octal +0{octal_digits} +8_{octal_digits} + +Exemple: +0232 +8_232 + +## Binary +2_{binary_digits} +0b{binary_digits} + +Exemple: +2_10011010 +0b10011010 +# Directives +## EQU +- La directive *EQU* assigne une constante numérique au nom symbolique *name* +- La directive *EQU* définit une constante, appelée constante d'assemblage (assembly-time constant) + +```armasm +MAX_TEMP EQU 99 +BUFFER_SIZE EQU 20*16 + + MOV r0, #MAX_TEMP ; remplace MOV r0, #99 + MOV r1, #BUFFER_SIZE ; remplace MOV r1, #320 +``` + +## GBLx +- La directive *GBLA* déclare une variable globale arithmétique initialisée à 0 +- La directive *GBLL* déclare une variable globale logique initialisée à `{FALSE}` +- La directive *GBLS* déclare une variable globale de type chaîne de caractères initialisés comme une chaîne vide "" + +## EXPORT & GLOBAL +- La directive *EXPORT* déclare à l'éditeur des liens que le nom symbolique peut-être référencé + - Dans un autre objet + - Dans un autre fichier +- La directive *GLOBAL* est un synonyme +``` armasm + AREA Example, CODE, READONLY + EXPORT DoAdd ; Export the function name + ; DoAdd to be used by + ; external modules. +DoAdd ADD r0, r0, r1 +``` + +## EXTERN & IMPORT +- La directive *EXTERN* informe l'assembleur que le nom symbolique n'est pas défini dans le fichier courant +- Le nom symbolique *symbole* est traité comme une adresse + - Sa valeur est définie lors de l'opération d'édition des liens + - Avant l'opération d'édition des liens, sa valeur est zéro +``` armasm + AREA Example, CODE, READONLY + EXTERN __C_INITIALIZE ; If C++library linked, gets + ; the adress of __C_INITIALIZE + + LDR r0, __C_INITIALIZE ; In not linked, adress is zeroed + CMP r0, #0 ; Test if zero + BEQ noCLinked ; Branch on the result +``` + +## DCB +- La directive *DCB* + - Réserve un ou plusieurs [bytes](#Tailles) en mémoire + - définit la valeur initiale de ces positions mémoires + - Lors de l'exécution du programme (runtime), les valeurs de ces positions mémoires peuvent être changées +``` armasm +nbChar DCB 24, 32 +cString DCB "C_string", 0 +``` +>[!warning] +>Si la directive ***DCB*** est suivie par une instruction, l'usage de la directive ***[ALIGN](#ALIGN-amp-ORG)*** est indispensable + + + + + +## DCW +- La directive *DCW* + - Réserve un ou plusieurs [halfword (16bits)](#Tailles) en mémoire à une adresse paire + - Définit la valeur initiale de ces positions mémoires +``` armasm +number EQU 10 +data DCW -255, 2*number +``` +>[!warning] +>Si la directive ***DCW*** est suivie par une instruction, l'usage de la directive ***[ALIGN](#ALIGN-amp-ORG)*** est indispensable + + + +## DCD +- La directive *DCD* + - Réserve un ou plusieurs [word (32 bits)](#Tailles) en mémoire à une adresse multiple de 4 + - Définit la valeur initiale de ces positions mémoires +```armasm +data1 DCD 1, 5, 20 ; Defines 3 words containing + ; decimal values 1,5,and 20 +data2 DCD data1 + 4 ; Defines 1 word containing 4 + + ; the address of the label data1 +``` + + +## SPACE +- La directive *SPACE* réserve un bloc mémoire initialisé à zéro + - La taille du bloc mémoire est exprimée en byte +```armasm + AREA MyData, DATA, READWRITE +buffer SPACE 255 ; Define 255 bytes of zeroed store +``` +>[!warning] +>Si la directive ***SPACE*** est suivie par une instruction, l'usage de la directive ***[ALIGN](#ALIGN-amp-ORG)*** est indispensable + + + +## ALIGN & ORG +- La directive *ALIGN* aligne la position courante à un multiple de *expr*, en ajoutant si nécessaire des bytes de bourrage +```armasm +label1 DCB 1 ; PC now misaligned + ALIGN ; Ensure that Func1 addresses +Func1 ; now aligned on 4-byte boundary + MOV r5, #0x5 + ... ... ; Code + MOV pc, lr ; Code + ALIGN 8 ; Now aligned on 8-byte boundary + +rout2 ... ... ; Code +``` +- La directive *ORG* fixe la valeur absolue de la position courante + +```armasm + ORG 0x4000 ; instructions start at addr 0x4000 + MOV r5, #0x5 + ... ... ; Code + MOV pc, lr ; Code + + ORG 0x8000 ; data start at addr 0x8000 +Data1 DCD 12 +Data2 DCD 0 +``` + diff --git a/docs/arm/README.md b/docs/arm/README.md index 0f272dc..6179d21 100644 --- a/docs/arm/README.md +++ b/docs/arm/README.md @@ -1,6 +1,7 @@ # Taille des paquets de bits Nom valable uniquement pour l'architecture ARM, attention certain nom peuvent changer pour d'autres architecture + |Nom |Taille | |-----------|-------| |Nibble | 4 bits| @@ -8,3 +9,6 @@ Nom valable uniquement pour l'architecture ARM, attention certain nom peuvent ch |Halfword |16 bits| |Word |32 bits| |Double word|64 bits| + +[PLA.md](PLA.md) +[ASM.md](ASM.md) \ No newline at end of file diff --git a/docs/arm/img/Pasted image 20231116153738.png b/docs/arm/img/Pasted image 20231116153738.png new file mode 100644 index 0000000..a8e1792 Binary files /dev/null and b/docs/arm/img/Pasted image 20231116153738.png differ diff --git a/docs/arm/img/Pasted image 20231116154303.png b/docs/arm/img/Pasted image 20231116154303.png new file mode 100644 index 0000000..1a794af Binary files /dev/null and b/docs/arm/img/Pasted image 20231116154303.png differ diff --git a/docs/arm/img/Pasted image 20231116154853.png b/docs/arm/img/Pasted image 20231116154853.png new file mode 100644 index 0000000..6e08a10 Binary files /dev/null and b/docs/arm/img/Pasted image 20231116154853.png differ diff --git a/docs/arm/img/Pasted image 20231116155200.png b/docs/arm/img/Pasted image 20231116155200.png new file mode 100644 index 0000000..e797526 Binary files /dev/null and b/docs/arm/img/Pasted image 20231116155200.png differ diff --git a/docs/index.html b/docs/index.html index a8582d9..9f31d1a 100644 --- a/docs/index.html +++ b/docs/index.html @@ -11,14 +11,36 @@
+ + + + + + + + + + + + + + + +