Solutions
Solution 1 : Avec AND et la valeur immédiate zéro.
AND R0, R0, 0
Noté aussi AND R0, R0, #0
Pour R0 : 0101 000 000 1 00000 x5020
Pour R1 : 0101 001 001 1 00000 x5260
. . .
Pour R4 : 0101 100 100 1 00000 x5920
. . .
Pour R7 : 0101 111 111 1 00000 x5FE0
Solution 2 : Les seules valeurs immédiates dont on dispose sont sur 5
bits signées, donc dans l’intervalle [−16,15]. Mais on peut aussi multiplier
un registre par deux avec ADD...
Noter que 2007 = 2048 −32 −8−1 = 111 1101 01112On peut aussi faire
les divisions par 2 successives.
Assembleur binaire hexa
AND R0, R0, 0 0101 000 000 1 00000 x5020
ADD R0, R0, 7 0001 000 000 1 00111 x1027
ADD R0, R0, R0 0001 000 000 000 000 x1000
ADD R0, R0, R0 0001 000 000 000 000 x1000
ADD R0, R0, R0 0001 000 000 000 000 x1000
ADD R0, R0, R0 0001 000 000 000 000 x1000
ADD R0, R0, 13 0001 000 000 1 01101 x102D
ADD R0, R0, R0 0001 000 000 000 000 x1000
ADD R0, R0, R0 0001 000 000 000 000 x1000
ADD R0, R0, R0 0001 000 000 000 000 x1000
ADD R0, R0, R0 0001 000 000 000 000 x1000
ADD R0, R0, 5 0001 000 000 1 00110 x1026
Solution 3 : Si on le fait naïvement, comme plus haut, il faut 1+5∗3+1 =
17 lignes. On peut gagner une ligne si on utilise “l’extension signée” pour le
bit de poids fort.
L’autre technique, vue en cours, consiste à mettre les constantes dans
un segment de données, qui se trouve en mémoire à la suite du programme.
On peut ensuite utiliser l’instruction de chargement LD (load), dont le mode
d’adressage est relatif au PC (PCoffset9).
Solution 4 : BR *** 000000000
BR 000 ********* qui ne peut pas s’écrire en assembleur en fait, mais peut
s’écrire en binaire (parce que BR est interprété comme BRnzp ...)
3