Nous avons vu dans le tut5 que l'on pouvait utiliser les bases binaires, héxa ou décimal dans les programmes.
Mais il y a encore du travail pour maîtriser tout cela.
Les conversions :
binaire --- décimal
1101 = 1*2^0+0*2^1+1*2^2+1*2^3 = 1+0+4+8 : 1101b=13d
On prend le nombre chiffre par chiffre, on multiplie chaque chiffre par 2^n avec n la position du chiffre dans le nombre, on additionne.
décimal --- binaire
5--5/2=2+1--2/2=1+0 : 5d =101b, on rajoute ensuite 1 si le reste final =0 ou 0 si le reste final=1.
On divise le nombre par deux avec un reste, on reprend ensuite le résultat (entier) jusqu'à arriver à un reste =0 ou =1
hexa --- décimal
4CF = 15*1+12*16+4*256 :4CFh=1231d
On prend le nombre chiffre par chiffre, on multiplie chaque chiffre par 16^n avec n la position du chiffre dans le nombre, on additionne.
décimal --- hexa
320 -- 320/16=20+0 --20/16=1+4 : 320d=140h
On divise le nombre par deux avec un reste, on prend ensuite le résultat (entier) jusqu'à ce qu'il soit égal à 0 ou à 1, c'est alors le dernier chiffre du nombre.
hex ---binaire
63 -- 3=3d=0011b, 6=6d=0110b : 63h=1100011b
On prend le nombre chiffre par chiffre en décimal on convertit en binaire sur 4 chiffre et on rassemble les nombres obtenues.
binaire --- héxa
00010111 --- 0001b=1d=1h, 0111b=7d=7h : 00010111b=17h
La même méthode que pour hex --- binaire mais inversement.
Vous n'avez pas la calculatrice windows sous la main. Je vous ai concocté des programmes basic qui effectue les conversions (car ça ne demande pas beaucoup de puissance et je suis trop feignant pour les faire en asm)
Les opérateurs bit à bit :
Si vous connaissez d'autre langage informatique vous devez déjà savoir utiliser les opérateurs and, or, xor, not
Ces opérateurs s'utilisent avec la base binaire.
exemples :
and 0 1 or 0 1 xor 0 1 not 0 1
0 0 0 0 0 1 0 0 1 1 0
1 0 1 1 1 0 1 1 0
xor, si vous ne le comprenez pas est un ou exclusif.
Applications :
1) l'opérateur or est utilisé pour changer le contraste.
exemple : ld a,44d - or 0C0h
44d
00101100
or 0C0h 11000000
11101100 = 236d
2) au lieu d'utiliser cp 0 dans un programme, utilisez or a c'est plus rapide
3) and met à jour le flag (Z, NZ) si le nombre qui suit l'opérateur est égale à a
exemple :
ld a,%010
ld a;%010
ld a,%010011
and %010
and %111
and %011
jp z,lbl1
jp z,lbl1
jp z,lbl1
Seul dans le deuxième exemple le saut ne sera pas effectué.
4) au lieu d'utilisez ld a,0, il faut utiliser xor a
les opérateurs de décalage :
les opérateurs de décalage sont sla, sra, rlc et rrc, il agissent au niveau binaire. Sla et Rlc correspondent à un décalage vers la gauche, Sra à un décalage vers la droite.
exemple :
00000001b = 1
sla
00000010b = 2
sla
00000100b = 4
sra
00000010b = 2
Nous pouvons donc en conclure que sla équivaut à une multiplication par 2 et sra à une div par 2. Attention toutefois aux pertes de bit.
exemple : sra 0001b = 0
Application : Ces opérateurs sont très rapides en tout cas beaucoup plus qu'une multiplication ou une division normale donc utilisez les dans vos programmes pour gagner en vitesse et en place.
différences sla -rlc et sra -rrc :
10101
10101
sla
rlc
01010
01011
sla
rlc
10100
10110
Avec un opérateurs comme rlc, le dernier chiffre du nombre est mis en premier chiffre, tous le autres chifres ont été décalés vers la gauche et inversement pour rrc.
Vous voulez encore plus d'optimisation, voyez-ici