eclipz Posted April 29, 2003 Share Posted April 29, 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 Link to comment Share on other sites More sharing options...
gtm Posted April 29, 2003 Share Posted April 29, 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) Link to comment Share on other sites More sharing options...
eclipz Posted April 29, 2003 Author Share Posted April 29, 2003 ok, merci beaucoup pour cette réponse, c sympa Link to comment Share on other sites More sharing options...
eclipz Posted May 6, 2003 Author Share Posted May 6, 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 Link to comment Share on other sites More sharing options...
Gmal Posted May 7, 2003 Share Posted May 7, 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!!!!!! Link to comment Share on other sites More sharing options...
eclipz Posted May 7, 2003 Author Share Posted May 7, 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 Link to comment Share on other sites More sharing options...
cmoivoilà INpact Posted May 8, 2003 Share Posted May 8, 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: Link to comment Share on other sites More sharing options...
Gmal Posted May 12, 2003 Share Posted May 12, 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... Link to comment Share on other sites More sharing options...
eclipz Posted May 12, 2003 Author Share Posted May 12, 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 ! Link to comment Share on other sites More sharing options...
emerica Posted May 20, 2003 Share Posted May 20, 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. Link to comment Share on other sites More sharing options...
eclipz Posted May 21, 2003 Author Share Posted May 21, 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 Link to comment Share on other sites More sharing options...
emerica Posted May 22, 2003 Share Posted May 22, 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. Link to comment Share on other sites More sharing options...
eclipz Posted May 22, 2003 Author Share Posted May 22, 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 ? Link to comment Share on other sites More sharing options...
emerica Posted May 22, 2003 Share Posted May 22, 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 ? Link to comment Share on other sites More sharing options...
eclipz Posted May 22, 2003 Author Share Posted May 22, 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 Link to comment Share on other sites More sharing options...
emerica Posted May 22, 2003 Share Posted May 22, 2003 As-tu essayé avec un pointeur ? Exemple: type ptr expression Par exemple en forcant ta variable DT en une DB ? Link to comment Share on other sites More sharing options...
eclipz Posted May 22, 2003 Author Share Posted May 22, 2003 je sais pas comment forcer une variable... quand aux pointeurs oui, j'essaie mais je dois me planter je pense... Link to comment Share on other sites More sharing options...
emerica Posted May 22, 2003 Share Posted May 22, 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 Link to comment Share on other sites More sharing options...
eclipz Posted May 22, 2003 Author Share Posted May 22, 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 !! Link to comment Share on other sites More sharing options...
eclipz Posted May 22, 2003 Author Share Posted May 22, 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 ! Link to comment Share on other sites More sharing options...
emerica Posted May 22, 2003 Share Posted May 22, 2003 Content de voir que ca marche Link to comment Share on other sites More sharing options...
steevensson88 Posted July 11, 2016 Share Posted July 11, 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 Link to comment Share on other sites More sharing options...
Aloyse57 Posted July 12, 2016 Share Posted July 12, 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. Link to comment Share on other sites More sharing options...
steevensson88 Posted July 12, 2016 Share Posted July 12, 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. Link to comment Share on other sites More sharing options...
digital-jedi Posted July 12, 2016 Share Posted July 12, 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 Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.