Programme de validation du processeur CPU_8bits

publicité
Programme de validation du processeur CPU_8bits Adresse Mem en hexa Instruction en binaire Mem en hex après exécution Mem en binaire après exécution 00 08 00 001000 -­‐ -­‐ 01 47 01 000111 -­‐ -­‐ 02 86 01111111 -­‐ -­‐ 03 Cpt_instruction = 04 01111111 -­‐ -­‐ 11 000100 Cpt_instruction = 04 01111111 -­‐ -­‐ 00 00000000 donnée -­‐ 00 00000000 06 00 00000000 donnée -­‐ 7F 01111111 07 7E 01111110 donnée -­‐ 7E 01111110 08 FE 11111110 donnée -­‐ FE 11111110 Interprétation Valeur Accu ACCU = ACCU NOR Mem[8] ACCU = ACCU + Mem[7] avant 00000000 après 00000001 avant 00000001 après 01111111 10 000110 Mem[6] = ACCU C4 11 000100 04 C4 05 En rouge : les instructions mémorisées En vert : les données mémorisées Programme PGCD sur processeur CPU_8bits Programme assembleur du PGCD (a,b) start : NOR NOR ADD ADD JCC STA ADD JCC JCC allone; b; one ; a ; neg; a; allone; end ; start; Accu = X NOR 11111111= 0 Accu = not (b) Accu = not (b) + 1= -­‐ b Accu = a - b si carry= 0 alors neg sinon carry=0 a=Accu; Accu = Accu +”11111111” d’où carry =1 sauf si a=0; si carry= 0 alors end sinon carry=0 carry=0 donc start NOR ADD STA JCC zero; one; b; start; Accu = Accu NOR 00000000= not (Accu) Accu = Accu + 1 b=Accu si carry= 0 alors start sinon carry=0 JCC end ; carry=0 donc end neg : end : (le résultat est en b) Exemple d’application du programme PGCD (a,b) pour a =40 et b=24 Premier exécution : (a =40 et b=24) Troisième exécution : (a =16 et b=8) Accu = 0 Accu = 0 Accu =NOT(24) Accu =NOT(8) Accu= NOT(24) +1 = -­‐24 Accu= NOT(8) +1 = -­‐8 Accu = 40-­‐24= 16 (carry=1) Accu = 16-­‐8= 8 (carry=1) JCC (carry=0) JCC (carry=0) a=16 a=8 Accu= 16 +FF=0 (carry=1) Accu= 8 +FF=0 (carry=1) JCC (carry=0) JCC (carry=0) JCC start JCC start Deuxième exécution : (a =16 et b=24) Quatrième exécution : (a =8 et b=8) Accu = 0 Accu = 0 Accu =NOT(24) Accu =NOT(8) Accu= NOT(24) +1 = -­‐24 Accu= NOT(8) +1 = -­‐8 Accu = 16-­‐24= -­‐8 (carry=0) Accu = 8-­‐8= 0 (carry=1) JCC neg JCC (carry=0) a=0 Accu= NOT(-­‐8) Accu= 0 +FF=FF (carry=0) Accu= NOT(-­‐8) +1 = 8 JCC end b=8 JCC end JCC start Le résultat est b=8 Adresse Mem en hexa Instruction en décimal Interprétation Mem en hex après exécution Mem en binaire après exécution 00 11 00 010001 ACCU = ACCU NOR Mem[17] -­‐ -­‐ 01 15 00 010101 ACCU = ACCU NOR Mem[21] -­‐ -­‐ 02 52 01 010010 ACCU = ACCU + Mem[18] -­‐ -­‐ 03 54 01 010100 ACCU = ACCU + Mem[20] -­‐ -­‐ 04 C9 11 001001 JCC (Mem[09]) if carry = 0 -­‐ -­‐ 05 94 10 010100 Mem[20] = ACCU -­‐ -­‐ 06 51 01 010001 ACCU = ACCU + Mem[17] -­‐ -­‐ 07 CD 11 001101 JCC (Mem[13]) if carry = 0 -­‐ -­‐ 08 C0 11 000000 JCC (Mem[00]) if carry = 0 -­‐ -­‐ 09 13 00 010011 ACCU = ACCU NOR Mem[19] -­‐ -­‐ 10 52 01 010010 ACCU = ACCU + Mem[18] -­‐ -­‐ 11 95 10 010101 Mem[21] = ACCU -­‐ -­‐ 12 C0 10 010101 JCC (Mem[00]) if carry = 0 -­‐ -­‐ 13 CD 11 001101 JCC (Mem[13]) if carry = 0 -­‐ -­‐ 14(inutile) CD 11 001101 JCC (Mem[13]) if carry = 0 -­‐ -­‐ 15(inutile) CD 11 001101 JCC (Mem[13]) if carry = 0 -­‐ -­‐ 16(inutile) CD 11 001101 JCC (Mem[13]) if carry = 0 -­‐ -­‐ 17 FF 11111111 donnée FF 11111111 18 01 00000001 donnée 01 00000001 19 00 00000000 donnée 00 00000000 20 28 00101000 donnée 00 00000000 21 18 00011000 donnée 08 11111110 En rouge : les instructions mémorisées En vert : les données mémorisées 
Téléchargement