★ CODING ★ AMSLIVE ★ AMSLIVE n°02 - ASSEMBLEUR : A DAA DAA SUR MON BCD ★ |
AMSLIVE n°02 - Asm | Coding Amslive |
N'ayant pas reçu d'acides critiques sur mon article basique, je lance dans la continuité en évoquant le codage BCD et la méconnue instruction DAA.BINARY CODED DECIMAL En Français, Décimal Codé Binaire. Soit un nombre, on considère son expression décimale. Puis chaque chiffre est codé en binaire. Ainsi le nombre 125 sera codé 0001 0010 0101. Veuillez remarquer que cela correspond à &125 en hexa ! je rappelle le jonc qu'il y a équivalence entre quartet et chiffre hexa. AVANTAGES ? Lors d'une transmission, la réception des quartets 1010, 1011, 1100, 1101, 1110, 1111, témoignera d'une erreur ou d'un signal spécial. C'est pas le Pérou, mais bon, pardonnons à ces hommes qui ne savent pas ce qu'ils font. Il suffit d'ORer &30 pour obtenir le code ASCII correspondant au chiffre. COMMENT CODER ? Comme exercice pratique, écrivons une routine qui code une valeur x dans un registre 8 bits, l'accumulateur du Z80 par exemple. Si x (compris entre 0 et 99) s'écrit &PQ en hexa et &BC en BCD, on a : x= 16*P + Q = 10*B + C On a B = INT (x/10), puisque B représente le nombre de dizaines. Mais en arrangeant cette expression, on trouve : x+6*B= 16*B + C = &BC Je sens que certains ne suivent plus, alors x = 78 = &4E En BCD, on doit obtenir &78 = 120. Or, 120-78 = 42 =6* 7 Le seul problème reste la division par 10. Essayons 13/128 comme approximation de 1/10. On a ( x + x/2 + x/2/2/2 ) / 16 = x/10 (où la division est entière) vrai pour x pair entre 0 et 99. Comme il y a le même nombre de dizaines dans un nombre impair et le nombre qui le précède, il suffit de mettre le bit 0 de x à 0 pour rendre la formule toujours valable. Il faudra tenir compte de la perte du LSQ (quartet de poids faible) due à la division par 16 lors du raccourci utilisé pour la multiplication par 6. Si vous trouvez ça tarabiscoté, n'oubliez pas qu'on ne fait pas de ski nautique sans mettre de slip de bain (04h13). LD B,A ; Entrée : A contient la valeur à coder |
|
Page précédente : AMSLIVE n°01 - Z80 |
|