eclipz Posté(e) le 29 avril 2003 Posté(e) le 29 avril 2003 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
gtm Posté(e) le 29 avril 2003 Posté(e) le 29 avril 2003 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)
eclipz Posté(e) le 29 avril 2003 Auteur Posté(e) le 29 avril 2003 ok, merci beaucoup pour cette réponse, c sympa
eclipz Posté(e) le 6 mai 2003 Auteur Posté(e) le 6 mai 2003 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
Gmal Posté(e) le 7 mai 2003 Posté(e) le 7 mai 2003 Euh... Pourquoi tu veux faire de l'asm? Pour la saisie, tu ferais mieux de prendre le C et de faire que le calcul en ASM!!!!!!
eclipz Posté(e) le 7 mai 2003 Auteur Posté(e) le 7 mai 2003 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
cmoivoilà INpact Posté(e) le 8 mai 2003 Posté(e) le 8 mai 2003 arg... un 8086 arf c'est plutot dur à bidouiller cet engin... là je peux pas aider... mais je vais contacter quelqu'un qui sait ptêt... je vais voir. @+ :bonnenuit:
Gmal Posté(e) le 12 mai 2003 Posté(e) le 12 mai 2003 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...
eclipz Posté(e) le 12 mai 2003 Auteur Posté(e) le 12 mai 2003 lol ! oui c'est un moyen comme un autre ! bon en fait là j'ai bien avancé : j'ai mon resultat dans une variable de type DT, le truc c'est que j'arrive pas à afficher caractere par caractere le contenu de cette variable !
emerica Posté(e) le 20 mai 2003 Posté(e) le 20 mai 2003 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.
eclipz Posté(e) le 21 mai 2003 Auteur Posté(e) le 21 mai 2003 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
emerica Posté(e) le 22 mai 2003 Posté(e) le 22 mai 2003 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.
eclipz Posté(e) le 22 mai 2003 Auteur Posté(e) le 22 mai 2003 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 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 ?
emerica Posté(e) le 22 mai 2003 Posté(e) le 22 mai 2003 dcb80, pour toi c'est décimal codé binaire sur 80 bits ? Si je comprends bien, ta variable est sur dix bytes (DT), donc 10 bytes * 8 bits = 80 bits. C'est ca ?
eclipz Posté(e) le 22 mai 2003 Auteur Posté(e) le 22 mai 2003 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
emerica Posté(e) le 22 mai 2003 Posté(e) le 22 mai 2003 As-tu essayé avec un pointeur ? Exemple: type ptr expression Par exemple en forcant ta variable DT en une DB ?
eclipz Posté(e) le 22 mai 2003 Auteur Posté(e) le 22 mai 2003 je sais pas comment forcer une variable... quand aux pointeurs oui, j'essaie mais je dois me planter je pense...
emerica Posté(e) le 22 mai 2003 Posté(e) le 22 mai 2003 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
eclipz Posté(e) le 22 mai 2003 Auteur Posté(e) le 22 mai 2003 tout ça m'a l'air extremement intéressant et approprié à ce que je veux faire... je te remercie beaucoup pour ton aide, m'en vais essayer ça de suite ! encore merci !!
eclipz Posté(e) le 22 mai 2003 Auteur Posté(e) le 22 mai 2003 bon je voulais simplement te dire que, ça y est, j'ai fini et c'est vraiment grâce à toi ! encore merci beaucoup pour ton aide, c'est super sympa !
steevensson88 Posté(e) le 11 juillet 2016 Posté(e) le 11 juillet 2016 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
Aloyse57 Posté(e) le 12 juillet 2016 Posté(e) le 12 juillet 2016 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.
steevensson88 Posté(e) le 12 juillet 2016 Posté(e) le 12 juillet 2016 Merci bien Aloyse57, j'avoue que je comprends mieux l'exercice maintenant. le décalage bit à bit et de compter à chaque fois si le résultat du NAND est 1.Vraiment merci pour le principe. Seulement je n'assimile pas vraiment ce qu'on enttend par interruption FIRQ ou FIRQ. Merci encore.
digital-jedi Posté(e) le 12 juillet 2016 Posté(e) le 12 juillet 2016 Bonjour, FIRQ ou IRQ, normalement ça fait référence à tes cours d'école. Exemple googlé : http://perso.telecom-paristech.fr/~danger/amen_old/interruptions/index.html
Messages recommandés
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.