Aller au contenu

Des gens qui connaissent l'assembleur 8086 ?


eclipz

Messages recommandés

Salut

Bon suis nul en assembleur, je comprends strictement rien !

Qqu'un aurait dans ses vieux documents un prog en assembleur qui permet de calculer le carré d'un nombre (sans utiliser le copro) ? Je sais, c'est spécial comme demande mais bon...

Merci,

vince

Lien vers le commentaire
Partager sur d’autres sites

le carré d'un entier ?

Ca fait longtemps que j'en n'ai plus fait, mais c'est quelque chose du genre:


mov ax, nombre

mul ax          ; calcule ax*ax

et le résultat est dans dx:ax je crois (partie haute dans dx, partie basse dans ax)

Lien vers le commentaire
Partager sur d’autres sites

arf... en fait j'arrive pas à mettre en oeuvre tout ça... la saisie merdouille à fond... quelqu'un pourrait me dire précisément comment faire saisir le nombre puis le mettre au carré ?

par avance merci pour les âmes généreuses :fumer:

Lien vers le commentaire
Partager sur d’autres sites

lol!

si ça n'en tenait qu'à moi, je ferai saisie et calcul en c, si je veux faire ça en asm c'est parce que suis etudiant et que c'est un élément d'un TP !

maintenant c'est un cosinus que j'essaie de calculer avec le copro ! lol

Lien vers le commentaire
Partager sur d’autres sites

Moi j'ai la soluce quelque part la haut dans mon crane...

C'est sous linux, avec gcc...

Tu le fais minimal en C, tu compile avec GCC avec l'option qui va bien (trou), et tu ré édites l'ASM tu nettoies, tu compile tn asm et c'est bon...

Lien vers le commentaire
Partager sur d’autres sites

  • 2 semaines après...

Oula je m'y essaie, rien de garanti :-)


mov ah, 8      ;int dos, lire char

int 21h           ;appel dos

imul al           ;al * al

mov dl, al  ;dl contient le char a afficher

mov ah, 2        ;int dos affiche char

int 21h             ;appel dos

attention ne marche que pour des nombres de 16bits.

Lien vers le commentaire
Partager sur d’autres sites

Oula je m'y essaie, rien de garanti :-)


mov ah, 8      ;int dos, lire char

int 21h           ;appel dos

imul al           ;al * al

mov dl, al  ;dl contient le char a afficher

mov ah, 2        ;int dos affiche char

int 21h             ;appel dos

attention ne marche que pour des nombres de 16bits.

lol ! si ça marche pas c'est pas grave, c'est déjà super sympa de m'aider ! je vais essayer dés que possible ! en tous cas merci beaucoup !

Vince

Lien vers le commentaire
Partager sur d’autres sites

En fait, après tests, faut faire gaffe que l'assembleur prends en compte le code ASCII, donc ca donne plutot ca :


bcl:	

 mov ah, 8      ;int dos, lire char 

 int 21h           ;appel dos

 sub al, 48  ;conversion code ascii-> valeur

 imul al  	;al * al  

 add al, 48  ;valeur->code ascii

 mov dl, al    

 mov ah, 2

 int 21h

jmp bcl

Et encore une autre précision, ca ne marchera que pour un nombre de 0 à 9, car on utilise la fonction 'lire caractère' du DOS, et non pas 'lire une chaine de caractères', qui est gérée autrement.

Lien vers le commentaire
Partager sur d’autres sites

oui bon déjà c'est vrai que j'avais oublié de déduire les fameux 48 !

maintenant il me reste un problème : mon format de variable est dt et son contenu est en dcb80... bref, faut donc que j'arrive à avoir octet par octet le contenu de ma variable et à extraire chaque demi-octet pour l'afficher... et ça j'y arrive po :non:

bref pour évoluer ma variable j'ai fait ça :


mov si, offset resultat+9

mov cx,10

boucle :

 mov cl,[si]

 ...

 inc si

loop boucle

mais même ça je suis pas certain de mon coup ! est-ce que dans ce cas cl contient bien le SIème octet de resultat ?

Lien vers le commentaire
Partager sur d’autres sites

c'est tout à fait ça... sauf qu'en fait, en principe, j'ai que les 5 derniers octets qui sont utilisés et chaque octet comprend 2 chiffres (un dans la partie haute, l'autre dans la partie basse de l'octet)... bref, le truc que j'arrive pas à faire, c'est à me positionner au debut du premier des 5 derniers octets pour afficher les 10 chiffres qui sont stockés dans ma variable

Lien vers le commentaire
Partager sur d’autres sites

J'ai quelques exemples avec les pointeurs, mais je ne les ai jamais utilisés :


var1 dw 1234h

var2 db 1

var3 db 2



mov bh, byte ptr var1   ; bh <- 34h

mov al, byte ptr var1 + 1   ; al <- 12h

mov ax, word ptr var2   ; ax <- var2 + var3

mov byte ptr [bx], 0   ; 1 byte mémoire (ea = bx) mis à 0

Lien vers le commentaire
Partager sur d’autres sites

  • 13 ans après...

Bonjour, besoin d'aide pour résoudre ce problème. J'ai bien des difficultés.

Ecrire un programme  en assembleur 6809 compte le nombre de bits à 1 dans un octet se trouvant à l’adresse $1000 lorsque le microprocesseur reçoit une demande d’interruption FIRQ. L’interruption IRQ étant masquée.

a) Donner l’organigramme

b) Donner le programme

Lien vers le commentaire
Partager sur d’autres sites

Vous devez comparer (AND) votre octet avec une valeur initialisée à 1 sur laquelle vous appliquerez un Shift Left huit fois de suite. Si le résultat du AND et différent de 0, alors vous incrémentez un compteur de bits.

Exemple : un octet 11101001

 

BCL1

  11101001

+00000001

 ========

=00000001 -> Inc un registre DX par exemple

 

BCL2

  11101001

+00000010

 ========

=00000000 -> Zéro, on ne fait rien

 

BCL3

  11101001

+00000100

 ========

=00000000 -> Zéro, on ne fait rien

 

BCL4

  11101001

+00001000

 ========

=00001000 -> Inc DX

 

etc

 

Je ne détaille pas, c'est votre boulot.

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...