Unité A6: Conversions. Unité A6: Conversions

Documents pareils
Assembleur i8086. Philippe Preux IUT Informatique du Littoral. Année universitaire 95 96

Architecture des ordinateurs

Programmation assembleur : aperçu

Structure d un programme

4. Initiation à l'assembleur

Conversion d un entier. Méthode par soustraction

Représentation d un entier en base b

Les opérations binaires

DU BINAIRE AU MICROPROCESSEUR - D ANGELIS CIRCUITS CONFIGURABLES NOTION DE PROGRAMMATION

Logiciel de base. Première année ENSIMAG

Architecture des ordinateurs TD1 - Portes logiques et premiers circuits

Département informatique de l université d Angers

Architecture des ordinateurs : Programmation des processeurs avec l'environnement «y86» (INF155)

Déprotection semi-automatique de binaire

Licence Sciences et Technologies Examen janvier 2010

IFT2880 Organisation des ordinateurs et systèmes

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Représentation des Nombres

Codage d information. Codage d information : -Définition-

SSTIC Désobfuscation automatique de binaires. Alexandre Gazet. Yoann Guillot. Et autres idyles bucoliques...

Informatique Générale

Désobfuscation automatique de binaire - The Barbarian Sublimation

V- Manipulations de nombres en binaire

MICROINFORMATIQUE NOTE D APPLICATION 1 (REV. 2011) ARITHMETIQUE EN ASSEMBLEUR ET EN C

Chapitre 1 I:\ Soyez courageux!

Définition 0,752 = 0,7 + 0,05 + 0,002 SYSTÈMES DE NUMÉRATION POSITIONNELS =

Rappels d architecture

Microprocesseur + Logiciel

Système binaire. Algèbre booléenne

Cours Informatique 1. Monsieur SADOUNI Salheddine

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.


Logiciel de Base. I. Représentation des nombres

I- Définitions des signaux.

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux.

Arithmétique binaire. Chapitre. 5.1 Notions Bit Mot

USTL - Licence ST-A 1ère année Codage de l information TP 1 :

Une version javascript sera disponible directement dans le cours prochainement.

Conception de circuits numériques et architecture des ordinateurs

Cours 1 : Introduction Ordinateurs - Langages de haut niveau - Application

Le codage informatique

Les chaînes de caractères

Architecture des ordinateurs

Jeux de caracte res et encodage (par Michel Michaud 2014)

Transmissions série et parallèle

Bases de programmation. Cours 5. Structurer les données

La mémoire. Un ordinateur. L'octet. Le bit

AVERTISSEMENT. D'autre part, toute contrefaçon, plagiat, reproduction encourt une poursuite pénale. LIENS

Atelier C TIA Portal CTIA04 : Programmation des automates S7-300 Opérations numériques

TP a Notions de base sur le découpage en sous-réseaux

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Réalisation d un OS 32 bits pour PC(x86)

Les techniques de protection du logiciel

Jeu d instructions NIOS II

Architecture des ordinateurs Introduction à l informatique

Introduction à l algorithmique et à la programmation (Info 2)

Comprendre telock 0.98 et private versions.

Les failles Format String

Résumé Génération de code Le code intermédiaire

Systèmes d Exploitation & Machines Virtuelles. Format de l enseignement. Objectif du cours

Introduction à MATLAB R

Architecture : Circuits numériques et éléments d architecture

Initiation à la programmation en Python

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

Cours d Informatique

Solution du challenge SSTIC Emilien Girault ANSSI/COSSI/DTO/BAI 06/06/13

Représentation d un nombre en machine, erreurs d arrondis

Principe de fonctionnement des périphériques des ordinateurs en vue de la programmation. Patrick Cégielski

Algorithme. Table des matières

Structure du format BMP, sa lecture, sa construction et son écriture

GUIDE Excel (version débutante) Version 2013

Architecture des ordinateurs. Loïc Cuvillon. 20 novembre 2013

Architecture de l ordinateur

Glossaire des nombres

Le Projet BINSEC. Automatiser l analyse de sécurité au niveau binaire. Airbus group, CEA, IRISA, LORIA, Uni. Joseph Fourier. p.

Initiation à la sécurité

UFR de Mathématiques et Informatique Année 2009/2010. Réseaux Locaux TP 04 : ICMP, ARP, IP

GPA770 Microélectronique appliquée Exercices série A

PARAGON Disk Wiper. Guide de l utilisateur. Paragon Technology GmbH, System Programmierung. Copyright Paragon Technology GmbH

Machines virtuelles. Brique ASC. Samuel Tardieu Samuel Tardieu (ENST) Machines virtuelles 1 / 40

Sélection du contrôleur

Algorithmique et Programmation, IMA

Documentation SecurBdF

6 - Le système de gestion de fichiers F. Boyer, UJF-Laboratoire Lig, Fabienne.Boyer@imag.fr

Architecture matérielle des systèmes informatiques

Introduction...6. Assembleur, philosophieet atouts...8. Avantages et inconvénients de l assembleur...9. Que programmer en Assembleur?.

Programmation C. Apprendre à développer des programmes simples dans le langage C

LECON 2 : PROPRIETES DE L'AFFICHAGE Version aout 2011

CM2 L architecture MIPS32

INTRODUCTION AUX SYSTEMES D EXPLOITATION. TD2 Exclusion mutuelle / Sémaphores

GlobalScape Secure FTP Server Buffer Overflow

CODAGE DES SMS. 2 Commandes «AT» 25 3 Matériels utilisés 55 4 Interfacer un téléphone GSM 73 5 Réalisations électroniques 101

TP 1 : 1 Calculs en binaire, octal et hexadécimal

Feuille TD n 1 Exercices d algorithmique éléments de correction

Langage C. Patrick Corde. 22 juin Patrick Corde ( Patrick.Corde@idris.fr ) Langage C 22 juin / 289

4. Groupement d objets

Enregistreur sans papier avec écran TFT et carte Compact Flash. B Description des interfaces 07.07/

Etudier l influence de différents paramètres sur un phénomène physique Communiquer et argumenter en utilisant un vocabulaire scientifique adapté

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Chapitre 10 Arithmétique réelle

Transcription:

Objectifs : À la fin de cette unité, vous saurez comment on peut programmer en assembleur les conversions usuelles binaire décimal et décimal binaire. Pour y parvenir, vous devrez atteindre les objectifs suivants : - décrire les principaux algorithmes de conversion entre le décimal et le binaire. Pierre Marchand, 2001 210 On effectue souvent en assembleur les conversions élémentaires de binaire à décimal et vice-versa, parce que ces fonctions sont appelées très souvent et ont donc intérêt à être performantes. La conversion entre le décimal et le binaire s'effectue habituellement comme suit : Décimal (BCD) à binaire (voir supplément au volume, section 3.3.1) : R = d + 10 R Pour la conversion binaire à décimal, trois méthodes sont fréquemment utilisées : R = b + 2 R en arithmétique BCD Divisions répétées par 10 -> séquence de restes Tables Celle qu'on choisit dépend du processeur utilisé, du jeu d'instructions dont il dispose, et du temps d'exécution de chacune. Pierre Marchand, 2001 211 1

9.1 Conversion décimal à binaire Effectuons la conversion d'une chaîne de caractères décimaux représentant un nombre positif vers un nombre binaire de 32 bits non signé. On utilise l algorithme d + 10 x R. Exemple sur 16 bits : Nombre à convertir en BCD 1 2 3 4 10 R = 0000 01 + 000A x 0000 = 0001 02 + 000A x 0001 = 000C 03 + 000A x 000C = 007B 04 + 000A x 007B = 04D2 Pierre Marchand, 2001 212 9.1 Conversion décimal à binaire dec2long proc decstring:lpstr mov esi, decstring xor eax, eax ; résultat = 0 While: movzx ebx, byte ptr[esi] ; while (*decstring++) inc esi test bl, bl ; terminé si nul je fin sub bl, '0' ; conversion ASCII-binaire imul eax, 10 ; résultat *= 10 add eax, ebx ; résultat += digit jmp While fin: ret ; résultat dans eax dec2long endp Pierre Marchand, 2001 213 2

1 e méthode : divisions par 10 Exemple sur 16 bits : ABCD / 000A = 112E reste 01 112E / 000A = 01B7 reste 08 01B7 / 000A = 002B reste 09 002B / 000A = 0004 reste 03 0004 / 000A = 0000 reste 04 Résultat : 04 03 09 08 01 en BCD, 34 33 39 38 31 en ASCII, ou 43981 10 Pierre Marchand, 2001 214 1 e méthode : divisions par 10 Stratégie : comme le résultat est la séquence des restes, mais inversée, nous écrirons ces restes vers la gauche à partir du 11e octet dans une variable Temp de 12 octets initialisée à 0. Nous aurons ainsi automatiquement notre caractère de fin de chaîne. Ainsi, dans l exemple précédent, on aurait : Temp : 00 00 00 00 00 00 34 33 39 38 31 00 Pointeur à la fin des divisions Pointeur initial Il nous restera à incrémenter le pointeur final et à faire un strcopy vers la destination. Pierre Marchand, 2001 215 3

1 e méthode : divisions par 10 temp db 12 dup(0) ; espace pour restes = 12 zéros bin2string proc n:dword, String:LPSTR mov eax, n ; nombre à convertir lea esi, temp add esi, 10 ; pointer sur fin de temp mov ecx,10 ; 10 pour la division divis: mov edx, 0 ; eax = quotient précédent div ecx ; diviser par 10 add dl, 0 ; convertir reste en ASCII mov [esi], dl ; stocker dans temp dec esi ; écrire le suivant à gauche Pierre Marchand, 2001 216 1 e méthode : divisions par 10 test eax, eax jne divis ; tant que quotient!= 0 ; copier temp dans destination inc esi ; pointer sur dernier reste mov edi, String ; adresse destination copy: lodsb ; reste suivant stosb test al, al ; tant que reste 0 jne ret bin2string endp copy Pierre Marchand, 2001 217 4

2 e méthode : R = b + 2 * R Exemple sur 8 bits : 1 0 1 1 1 1 0 1 Addition BCD Sur 2 octets R = 00 00 1 + 00 00 + 00 00 = 00 01 0 + 00 01 + 00 01 = 00 02 1 + 00 02 + 00 02 = 00 05 1 + 00 05 + 00 05 = 00 11 1 + 00 11 + 00 11 = 00 23 1 + 00 23 + 00 23 = 00 47 0 + 00 47 + 00 47 = 00 94 1 + 00 94 + 00 94 = 01 89 Pierre Marchand, 2001 218 2 e méthode : R = b + 2 * R Exemple sur 8 bits : Il faut ensuite décompacter les octets pour les convertir en ASCII. 01 89 -> 00 01 08 09 -> 30 31 38 39 00 Pour décompacter, on met un octet du résultat dans al et dans ah : ax = 89 89 On fait ensuite le AND de ax avec 0xF00F : and ax,0xf00f ax = 80 09 Puis on décale ah de 4 bits vers la droite : shr ah, 4 ax = 08 09 Finalement, on ajoute 0x30 à chacun : add eax,0x3030 ax = 38 39 Pierre Marchand, 2001 219 5

2 e méthode : R = b + 2 * R Comme un nombre de 32 bits peut aller jusqu à 4 294 967 296 qui a 10 chiffres, il nous faudra faire nos additions BCD sur 5 octets (un octet contient 2 chiffres en BCD compacté. Pierre Marchand, 2001 220 2 e méthode : R = b + 2 * R temp db 5 dup(0) bin2decstring proc n:dword, decstring:lpstr mov ebx, n mov edx, 32 ; 32 bits à traiter lea edi, temp decal: rcl ebx, 1 ; mettre le msb dans CF mov esi, 4 mov ecx, 5 Pierre Marchand, 2001 221 6

2 e méthode : R = b + 2 * R abcd: mov al, byte ptr [edi+esi ; addition bcd sur 5 octets adc al, al ; b + 2 * R daa mov dec dec ; ajustement BCD byte ptr [edi+esi], al ; résultat dans temp esi ecx jne abcd ; fin abcd dec edx jne decal ; fin décal mov ecx, 5 mov esi, str Pierre Marchand, 2001 222 2 e méthode : R = b + 2 * R copy: mov al, [edi] ; copier dans destination et ; convertir le BCD compacté mov ah, al ; en BCD non compacté and ax, 0xF00F ; masquer lsb et msb shr ah, 4 ; décaler msb en place add ax, 0x3030 ; convertir en ASCII xchg ah, al ; little endian mov word ptr [esi], ax ; stocker deux car inc edi ; incrémenter source add esi, 2 ; incrémenter destination dec ecx jne copy mov byte ptr[edi], 0 ; car de fin de chaîne ret Pierre Marchand, 2001 223 7

3 e méthode : à l aide d'une table Soit n le nombre à convertir. Le résultat r est un nombre de 10 chiffres ASCII qu on initialise à 0 : r = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 Tant que n >= 1000000000, n = n - 1000000000, r[0] = r[0] + 1 Tant que n >= 100000000, n = n - 10000000, r[1] = r[1] + 1 Tant que n >= 10000000, n = n - 10000000, r[2] = r[2] + 1 Tant que n >= 1000000, n = n - 1000000, r[3] = r[3] + 1 Tant que n >= 100000, n = n - 100000, r[4] = r[4] + 1 Tant que n >= 10000, n = n - 10000, r[5] = r[5] + 1 Tant que n >= 1000, n = n - 1000, r[6] = r[6] + 1 Tant que n >= 100, n = n - 100, r[7] = r[7] + 1 Tant que n >= 10, n = n - 10, r[8] = r[8] + 1 r[9] = n Pierre Marchand, 2001 224 3 e méthode : à l aide d'une table Table dd 1000000000, 100000000, 10000000, 1000000, 100000, dd 10000, 1000, 100, 10, 1 bin2decstring proc n:dword, decstring:lpstr mov eax, n lea esi, Table xor ebx, ebx mov edi, decstring mov ecx, 10 ; 10 nombres dans Table digit: mov byte ptr [edi+ebx], 0 ; résultat = 0 mov edx, dword ptr [esi+ebx*4] ; Table[i] comp: cmp eax, edx ; peut-on soustraire? jb suiv Pierre Marchand, 2001 225 8

3 e méthode : à l aide d'une table sub eax. edx ; soustraire Table[i] add byte ptr [edi+ebx], 1 ; incrémenter résultat jmp comp ; tant que eax > Table[i] suiv: inc ebx ; élément suivant loop digit mov byte ptr [edi+ebx], 0 ; car de fin de chaîne ret bin2decstring endp Pierre Marchand, 2001 226 Certains raffinements pourraient s'avérer souhaitables dans les programmes présentés dans cette section. Notamment : Conversion décimal-binaire Traitement des nombres négatifs Traitement des espaces au début Conversion binaire-décimal Traitement des nombres négatifs Éliminer les zéros initiaux, par exemple, retourner 3 au lieu de 000000003 Pierre Marchand, 2001 227 9

9.3 Conversion binaire à chaîne hexadécimale Pour effectuer cette conversion, on effectue une rotation de eax de 4 bits vers la gauche pour mettre les 4 bits les plus significatifs à droite. 12 34 56 78 23 45 67 81 On copie al dans bl. On masque ensuite les 4 bits de poids fort de bl avec : and bl, 0x0F. 81 01 On ajoute 0x30 à bl pour le convertir en ASCII : add bl, 0x30 01 31 On écrit bl dans le résultat et on incrémente le pointeur. On effectue cette opération 8 fois. Pierre Marchand, 2001 228 9.3 Conversion binaire à chaîne hexadécimale Long2HexString proc num:dword, HexString:LPSTR mov edi, HexString mov eax, num mov ecx, 8 ; 8 car. pour représenter un long lp: rol eax, 4 ; 4 bits suivants mov bl, al and bl, 0x0F ; masquer les 4 bits de droite add bl, 0 ; convertir en ASCII cmp bl, 9 jbe ok ; si c est un chiffre 0-9 add bl, 7 ; si c est une lettre A-F Pierre Marchand, 2001 229 10

9.3 Conversion binaire à chaîne hexadécimale ok: mov [edi],bl ; placer dans la chaîne inc edi dec ecx jnz lp mov byte ptr [edi], 0 ; caractère de fin de chaîne ret long2hexstring endp Pierre Marchand, 2001 230 9.3 Conversion binaire à chaîne hexadécimale Une autre façon d effectuer cette conversion utilise une table de 16 entrées contenant les codes ASCII des chiffres et des lettres correspondant aux nombres hexadécimaux 0 à F. On place le nombre à convertir dans edx. On effectue comme dans la façon précédente une rotation vers la gauche de edx, et on copie dl dans al. On masque les 4 bits de poids fort. Ensuite on se sert de al comme indice dans la table de 16 codes ASCII. L instruction XLAT remplace al par le contenu de [ebx + al]. Par exemple, 0x0B donnera le code 0x42 = B. On écrit ensuite al dans le résultat et on incrémente le pointeur. Pierre Marchand, 2001 231 11

9.3 Conversion binaire à chaîne hexadécimale table db '0123456789ABCDEF' Long2HexString proc num:dword, HexString:LPSTR mov edi, HexString lea ebx, table ; table de traduction dans ebx mov ecx, 8 ; toujours 8 car. mov edx, num ; nombre à convertir lp: rol edx, 4 ; digit suivant mov al, dl and al, 0x0F ; garder 4 bits seulement xlat ; traduire mov [edi], al ; écrire dans destination Pierre Marchand, 2001 232 9.3 Conversion binaire à chaîne hexadécimale inc edi dec ecx jne lp move byte ptr [edi], 0 ; caractère de fin de chaîne ret Long2HexString endp Pierre Marchand, 2001 233 12