<\body> ||>>> Nous proposons ici une spécification pour un processeur minimaliste 16 bit RISC. La machine dispose de 8 registres \S généraux \T, tous de taille 16 bits : \; <\itemize> 0. Registre ou zéro (valant tout le temps 0...) 1. Registre 2. Registre 3. Registre 4. Registre 5. Registre , écrit par certaines instructions (multiplication, division...) et utilisé préférentiellement comme registre temporaire pour certaines instructions composées 6. Registre , ou (return adresse), écrit par l'instruction 7. Registre , ou (stack pointer), utilisé par les instructions et Ces 8 registres sont tous manipulables par les instructions prenant un registre comme argument. De plus, le processeur dispose d'un registre manipulable uniquement par certaines instructions spécifiques, le registre (program counter : contient l'adresse de l'instruction courante). Les numéros de registres sont donc codés sur 3 bits. La mémoire est adressée sur 16 bits et les mots mémoire font 8 bits, il y a donc 64ko disponnibles. Le CPU est little-endian (le mot 0x1234 est codé 34 puis 12) On définit plusieurs zones de mémoire : |>||>||>>>>|Memory map> Les bits suivants sont utilisés pour la MMIO : >>>>|>||>||>>>>|Addresses MMIO> Les instructions sont codées sur 16 bits. Les tableaux suivants montrent les instructions avec les bits de poids forts à gauche et les bits de poids faibles à droite (convention contraire à celle exprimée dans le ). ||||||>|>|>|>>>|||>>>> >|||||||||>|>|>|>>|>>|>>>>> >||||||>|>|>|>>>>> ||||||||>|>|>|>>|>>>>> >||||||>|>|>>>>> Certain noms d'instuctions sont en , il s'agit de signifier qu'il s'agit d'un alias (optionnel) pour une autre instruction. |>>|>|>>|>|>|>>|||||R+R>>|>|||||R-R>>|>|||||lo\R|)>>>|>|||||hi\R|)>> si R>>|>|||||q,R|)>>>|>|||||r,R|)>> si R>>|>||||||>||||||>||||||>||||||>|||||\R|)>>>|>|||||\R|)>>>|>|||||\R|)>>>|>|||||not \R|)>>>|>|||||\R|)>>>|>||||>||>|||||\R|)>> (logical)>|>|||||\R|)>> (arith)>|>||||>||>||||>||>|||||=R?1:0|)>>>|>|||||\R?1:0|)>>>|>|||||\\R?1:0|)>>>|>|||||\R?1:0|)>>>|>|||||\\R?1:0|)>>>|>|||||\R?1:0|)>>>|>|||||>>| signé>>|||||d|)>>>| signé>>|||||PC+d>>|>||||| ; PC\PC+d>>|>||>|||R>>|>||>||| ; PC\R>>|>|||||=R> then R>>|>|||||\R> then R>>|>|||||\R> then R>>|>|||||\R> then R>>|>|||||\R> then R>>|>|||||\R> then R>>|>|||||PC+d>>| signé>>||||>||>||||>||>||||||>|||||mem+d|)>> (16 bits)>|>|||||+d|)>\R> (16 bits)>|>|||||\mem+d|)> ; R\0> (8 bits)>|>|||||+d|)>\R> (8 bits)>|>|||||mem+R|)>> (16 bits)>|>|||||+R|)>\R> (16 bits)>|>|||||\mem+R|)> ; R\0> (8 bits)>|>|||||+R|)>\R> (8 bits)>|>|||||\d>>|>|||||\d ; R\0>>| non signé)>>|||||\d>>|>|||||\d ; R\0>>|>|||>||sign_extend>>| signé)>>||||>||>||||>||>||||>|>>|>>>>|Instructions reconnues par le microproceseur> L'assembleur propose également quelques instructions \S étendues \T permettant de faciliter la programmation : |>|>|>>|>|G-2 ;mem\R >>|>>|||>, >>|>|mem ; G\G+2>>|, >>|||, 2>>|>>|R>>|, >, >>||R+d>>|>|>>|not R>>|,Z>>>|, addr>| then addr>>|>|||>|, addr>|0> then addr>>|>|||>>>>|Instructions supplémentaires (produites par l'assembleur)> \ <\initial> <\collection> <\references> <\collection> > > > > > > > > > > > > > > > > > <\auxiliary> <\collection> <\associate|table> > > > > <\associate|toc> |math-font-series||Registres> |.>>>>|> |math-font-series||Mémoire> |.>>>>|> |math-font-series||Jeu d'instruction> |.>>>>|> |Types d'instructions |.>>>>|> > |Format de base |.>>>>|> > |Format |R> |.>>>>|> > |Format |I> |.>>>>|> > |Format K |.>>>>|> > |Format |J> |.>>>>|> > |math-font-series||Tableau d'instructions> |.>>>>|>