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.