This shows you the differences between two versions of the page.
alf:res:alfycomputer_32 [2017/05/09 18:07] alexandru.radovici |
— (current) | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== Ordinateur ALF 32 ====== | ||
- | |||
- | ===== Architecture ===== | ||
- | La langage Alfy ASM est le langage d'assemblage de l'ordinateur ALF32. Cette unité centrale de traitement (CPU) virtuelle a: | ||
- | |||
- | * Une architecture Harvard (RAM du programme et RAM de données sont séparées) | ||
- | * 32 octets des instructions | ||
- | * 64 registres de 32 octets de largeur (r0 à r63) | ||
- | * 49 Ko de RAM | ||
- | * 49 Ko de RAM de programme | ||
- | |||
- | <note>Tous les accès RAM doivent être alignés de 4 octets</note> | ||
- | |||
- | ===== Simulation ===== | ||
- | |||
- | Alfy ASM est simulé en utilisant la verion 4 de [[http://www.cs.colby.edu/djskrien/CPUSim/|CPUSim]]. Pour utiliser ce simulateur il faudra: | ||
- | - Télécharger la version 4 [[http://www.cs.colby.edu/djskrien/CPUSim/CPUSim4.0.9.zip|CPUSim]] | ||
- | - Télécharger [[https://raw.githubusercontent.com/alexandruradovici/alf-alfy-asm-language-public/master/alf_computer32.cpu|alf_computer32.cpu]] | ||
- | - Chargez-le dans le simulateur | ||
- | |||
- | Pour exécuter une simulation, vous pouvez l'exécuter en mode interactif ou non interactif. | ||
- | |||
- | {{ :alf:res:cpusim.png?600 |}} | ||
- | |||
- | Lire les instructions d'installation [[http://www.cs.colby.edu/djskrien/CPUSim/Version4InstallationInstructions.txt|installation instructions]]. | ||
- | |||
- | ==== Mode Interactif ==== | ||
- | Pour exécuter CPUSim, ouvrez un shell et écrivez | ||
- | |||
- | <code bash> | ||
- | java -classpath .:richtextfx-fat-0.6.10.jar cpusim.Main -m alf_computer32.cpu -t file.asm | ||
- | </code> | ||
- | |||
- | Cela ouvrira l'interface utilisateur (UI), charger alf_computer32.cpu et le file.asm. | ||
- | |||
- | ==== Le Mode Non-Interactif ==== | ||
- | Pour exécuter CPUSim, ouvrez un shell et écrivez | ||
- | |||
- | <code bash> | ||
- | java -classpath .:richtextfx-fat-0.6.10.jar cpusim.Main -c -m alf_computer32.cpu -t file.asm | ||
- | </code> | ||
- | |||
- | Cela va charger alf_computer32.cpu et le file.asm. | ||
- | |||
- | ===== Exécuter un programme ===== | ||
- | Après avoir chargé une machine et un programme, pour l'exécuter: | ||
- | |||
- | * Dans la barre de menu, aller à //Execute// et sélectionnez //Assemble & load//. Cela rassemblera le programme et va le charger dans la mémoire du programme | ||
- | * Dans la barre de menu, aller à //Execute// et sélectionnez //Debug//. Cela changera l'interface utilisateur en mode débogage. Vous pouvez sélectionner plusieurs options: | ||
- | * //Start Over// - redémarrer le programme | ||
- | * //Go// - exécutez le programme | ||
- | * //Step by Instr// - avance une instruction dans le programme | ||
- | * //Back one Instr// - retourner une instruction dans le programme | ||
- | |||
- | {{:alf:res:assemble.png?200|}}{{:alf:res:debug_mode.png?200|}}{{:alf:res:debug.png?200|}} | ||
- | |||
- | ===== Le Langage Alfy ASM ===== | ||
- | |||
- | ^ Instruction ^ Equivalent ^ | ||
- | | set r1 //value// (16 bits) | r1 = value | | ||
- | | mov r1 r2 | r1 = r2 | | ||
- | | load r1 r2 | r2 = MEM [r1] | | ||
- | | store r1 r2 | MEM [r1] = r2 | | ||
- | | pload r1 r2 | r2 = PMEM [r1] | | ||
- | | pstore r1 r2 | PMEM [r1] = r2 | | ||
- | | push r1 | sp = sp - 4 \\ MEM [sp] = r1 | | ||
- | | pop r1 | r1 = MEM [sp] \\ sp = sp + 4 | | ||
- | | pushsp | temp = sp \\ sp = sp - 4 \\ MEM [sp] = temp | | ||
- | | popsp | sp = MEM [sp] | | ||
- | | jmp label | goto label | | ||
- | | run label | sp = sp - 4 \\ MEM [sp] = ip \\ goto etiquete | | ||
- | | ret | sp = sp + 4 \\ ip = MEM [sp] | | ||
- | | (pseudo) label_title: | label label_title | | ||
- | | stop | stop the program | | ||
- | | add r1 r2 r3 | r1 = r2 + r3 | | ||
- | | sub r1 r2 r3 | r1 = r2 - r3 | | ||
- | | mul r1 r2 r3 | r1 = r2 * r3 | | ||
- | | div r1 r2 r3 | r1 = r2 / r3 | | ||
- | | mod r1 r2 r3 | r1 = r2 mod r3 | | ||
- | | dec r1 value (unsigned 16 bits) | r1 = r1 - value | | ||
- | | inc r1 value (unsigned 16 bits) | r1 = r1 + value | | ||
- | | test r1 r2 | t = r1 - r2 | | ||
- | | je label | if t = 0 goto label | | ||
- | | jne label | if t != 0 goto label | | ||
- | | jg label | if t > 0 goto label | | ||
- | | jge label | if t >= 0 goto label | | ||
- | | jl label | if t < 0 goto label | | ||
- | | jle label | if t <= 0 goto label | | ||
- | | and r1 r2 r3 | r1 = r2 AND r3 (bitwise, bit by bit) | | ||
- | | or r1 r2 r3 | r1 = r2 OR r3 (bitwise, bit by bit) | | ||
- | | xor r1 r2 r3 | r1 = r2 XOR r3 (bitwise, bit by bit) | | ||
- | | shl r1 r2 (left shift) | r1 = r1 << r2 | | ||
- | | shr r1 r2 (right shift) | r1 = r1 >> r2 | | ||
- | | read r1 | r1 = read character from keyboard | | ||
- | | write r1 | write character r1 to the display | | ||
- | | readnumber r1 | r1 = read number from keyboard | | ||
- | | writenumber r1 | write number r1 to the display | | ||