Corrigé de l'examen intra d'automne 2014.

1) C    7 bits    (2**7 = 128)

2) H    Incrémenter le compteur ordinal

1. Extraire le contenu de la cellule de mémoire dont l'adresse se trouve dans le compteur
ordinal.
2. Décoder l'instruction obtenue en 1, c'est-à-dire en extraire le code d'opération et les
caractéristiques des opérandes.
3. Augmenter le contenu du compteur ordinal de 1 ou de 3.
4. Exécuter les opérations indiquées par l'instruction.

3)    D    NEGr
        E    CPr
        F    ADDA
        H    ASLA

4)     B    Marque la fin du code assembleur
        C    Réserve aucun octet
        E    Sépare le code source du programme de celui du système d'exploitation

5)     A   Le code machine généré fait 9 octets
        G   Ce programme contient 3 instructions et 2 directives

            0000 310007 DECI x,d
     0003 390007 DECO x,d
     0006 00     STOP
     0007 0000 x: .BLOCK 2
     0009         .END

6) G   toto

Le caractère lu est affiché s'il est différent de "_".
Cependant si le caractère lu est "_", alors
    si  le caractère lu suivant est une minuscule, il est transformé en majuscule et affiché,
    sinon le caractère "_" est affiché.

7) K    toTo

8) B et D        TO_TO___T_O__     (réponses identiques)

9)  C    10101(2)
     D    21(10)
     H    25(8)

(soit 21 en décimal)

10)   C     LDA     0x1AAB,i
                SUBA   0x9346,i
        D     LDA      0x789B,i
                NEGA
        E      LDA      0x641F,i
                ADDA   0x2346,i

11)   A    LDA 0x0FFF,i
               ADDA 0xF001,i
        C    LDA 0x0000,i
        E
    LDA 10,i
              CPA 10,i

12) R    37   DECO t,i     (adresse de "t" en décimal, soit x0025)

13) T    39    DECO t,d    (contenu de "t" en décimal, soit x0027)

14) S    38    DECO t,n    (contenu en décimal référé par le pointeur "t": x0027, soit x0026)

15) Q    36   DECO t,x     (contenu en décimal à l'adresse ("t" + registre index(X))--> (x0025 + 4) --> x0029, soit x0024 hex)

16) C     0     DECO -3,x 

 LDX t,d            x0027 --> registre X
 DECO -3,x       -3 +registre X(x0027) -> x0024, affiche en décimal les octets 0024 et 0025 soit 0000

17) L   CPX   10,i
            BRGE ecrire
(saisie terminée quand un nombre est >= 10)

18) H   
          ASLX          ; indice dans le tableau tab, chaque élément occupe 2 octets 
       LDA tab,x     ; compteur d'occurences
       ADDA 1,i      ; une occurence de plus pour cet indice
       STA tab,x

19) G
            CPX 20,i
            BRGE fin    ; (fin du tableau tab)

20) K    .BLOCK 20   ; (10 éléments de 2 octets)

lire:    DECI    n,d         ; indice dans le tableau tab
         LDX     n,d         
         CPX     0,i         ; arrete la saisie si indice < 0 ou >= 10
         BRLT    ecrire      
         CPX     10,i        ; <-- TROU 1
         BRGE    ecrire      
;                            ; <-- TROU 2
         ASLX                ; indice dans le tableau tab, chaque élément occupe 2 octets
         LDA     tab,x       ; compteur d'occurences
         ADDA    1,i         ; une occurence de plus pour cet indice
         STA     tab,x       
         BR      lire        
;
ecrire:  LDX     0,i         ; positionnement au début du tableau
loop:    CPX     20,i        ; <-- TROU 3     limite supérieure (10 éléments)    
         BRGE    fin         ; (fin du tableau tab)
         DECO    tab,x       ; affichage du nombre d'occurences pour l'indice courant
         CHARO   ' ',i       
         ADDX    2,i         ; indice suivant
         BR      loop        
fin:     STOP                
;
n:       .BLOCK  2           ; valeur lue
tab:     .BLOCK  20          ; ; <-- TROU 4   #2d10a  (10 éléments de 2 octets)
         .END                  

Exemple d'exécution de ce programme qui affiche le nombre d'occurences des 10 premiers entiers:

Input: 
1
2
1
9
99
Output:
0 2 1 0 0 0 0 0 0 1 

Soit 2 fois le nombre 1, 1 fois le nombre 2 et 1 fois le nombre 9.