Accueil > Forum > > > > Problème de restitution d'une chaîne.
Problème de restitution d'une chaîne.
samedi 25 novembre 2006 à 20:15:37 |
Problème de restitution d'une chaîne.

Sawteeth
|
Bonsoir. Je viens de débuter l'assembleur et j'ai tenté de faire un petit programme qui lit une chaîne au clavier et l'affiche à l'écran. Le problème est que lors de la restitution de la chaîne entrée s'affiche des données qui visiblement, appartiennent à un autre programme. Voici le code (j'utilise TASM, TLINK et EXE2BIN, pour assembler et compiler.) .model tiny .386 .stack 100h .data mess1 db "Entrez la chaine et tapez entrée",10,13,'$' cha1 db 32 dup(?) .code start: mov ax,@data mov ds, ax mov es, ax mov dx, offset mess1 mov ah, 09h int 21h mov dx, offset cha1 mov ah, 0Ch ;fonction qui initialise le buffer mov al, 0Ah ;et lit la chaîne. int 21h mov dx, offset cha1 mov ah, 09h int 21h mov ax,04c00h int 21h end start Je vous remercie d'avance.
|
|
lundi 27 novembre 2006 à 08:46:41 |
Re : Problème de restitution d'une chaîne.

Nasman
|
Réponse acceptée !
Bonjour Sawteeth,
J'ai une petite idée concernant ton problème: Je pense que lors de l'affichage de ton buffer ce dernier est effectivement effectué - mais que l'affichage continue (en affichant tous les caractères qui se trouveront après ton buffer) jusqu'à ce que par hazard on rencontre la valeur 24h soit "$".
Essaie de mettre un "$" dans ton buffer lorsque tu auras terminé ta saisie. Tu peux peut être détourner la sortie vers un fichier pour visualiser tous les caractères qui sont effectivement sortis pour vérifier si ton texte correspond bien au début.
A+
|
|
lundi 27 novembre 2006 à 21:04:26 |
Re : Problème de restitution d'une chaîne.

Sawteeth
|
Réponse acceptée !
Je vous remercie, je vais tenter cette idée, (excusez moi encore, mais par contre, comment concatène-t-on un caractère ascii à la chaîne préexistante ?) @+
|
|
mardi 28 novembre 2006 à 08:44:14 |
Re : Problème de restitution d'une chaîne.

Nasman
|
Réponse acceptée !
Bonjour Sawteeth,
Je ne me souviens plus ce que fait exactement la fonction 0Ch de l'interruption DOS. Si cette dernière met les codes ascii des caractères saisis, tu n'as qu'à mettre le code 24h après ton dernier caractère saisi. Pour celà il te faut connaitre la longueur de ta chaine. Ensuite tu fais un
mov [offset cha1+bp+1],byte 24h si bp contient le nombre de caractères
Tu seras peut être amené à adapter le syntaxe pour TASM.
|
|
mardi 28 novembre 2006 à 21:13:48 |
Re : Problème de restitution d'une chaîne.

Sawteeth
|
Réponse acceptée !
Ahhh mais oui... quel imbécile. Merci beaucoup en tout cas... cette histoire me prend la tête depuis un petit moment !
|
|
samedi 2 décembre 2006 à 01:35:06 |
Re : Problème de restitution d'une chaîne.

Guilou34
|
Réponse acceptée !
La fonction 0C vide le buffer et ensuite appele la fonction définie par le contenu de AL. Ici c'est donc la fonction 0Ah c'est à dire "Buffered standard input" Cette fonction demande que premier octet contienne la taille du buffer en octets . Ce sera aussi le maximum de charactères qui seront lus. Au retour, le deuxieme octet contiendra le nombre de charactères réèllement lus. Dans le cas présent , le premier octet du buffer est indéterminé, c'est bien entendu la valeur qu'il contient qui sera utilisée par la fonction 0C pour le vider. Si par malheur elle dépasse 32, c'est le code qui sera remis à 0!
Après " mov dx, offset cha1" il faut quelque chose comme : mov di,dx mov byte ptr [di],30 ; 30=taille de chain -2
et au retour ; après l'appel de l'int21 fonction 0ch :
mov al,[di+1] ; al =nombre d'octest lus xor ah,ah add di,ax mov byte ptr [di+2],'$' ; termine la chaîne par un $
Quelques remarques: le modèle tiny n'utilise qu'un seul segment de 64 ko pour cs,ds,es et ss il est inutile de les initialiser. En appelant tlink avec l'option /t , exe2bin est inutile, le .com est généré automatiquement Un modèle tiny doit toujours réserver 256 octets pour le système, ici la directive (inutile) .stack 100h joue par chance ce rôle , il faut mieux avoir org 100h. Bonne continuation
|
|
vendredi 7 mars 2008 à 01:33:50 |
Re : Problème de restitution d'une chaîne.

rannik
|
Salut !
J'ai écrit un code dans ce style, car je débute aussi et j'en suis au même point. Sauf que mon code a un résultat étrange en fonction du nombre de caractère entrée. De plus je ne comprends pas pourquoi c'est impossible de donner à cx une référence plutot qu'une valeur (noob quand tu nous tiens ^^)
.386 fiche segment use16 assume cs:fiche, ds:fiche, ss:fiche org 100h debut: mov ah, 0ch mov al, 0ah mov dx, offset nom int 21h
mov di, 2d mov cx, 10d boucle: mov ah, 02h mov dl, ds:[nom+di] ; on pointe à priori sur le 3e octet (+1 a chaque tour) int 21h add di, 1d loop boucle ret
nom db 11, ?, 10 dup(?), ? fiche ends end debut
Tout est sympa quand on entre 10 caractère mais apres ...
|
|
vendredi 7 mars 2008 à 12:16:12 |
Re : Problème de restitution d'une chaîne.

Guilou34
|
Salut Pour être plus clair, à l'appel de l'int 21h, fonction 0ch, dx doit pointer sur ce qu'on peut appeler une structure, quelque chose comme ceci :
mov dx offset nombre ... ... avec: nombre db 11 ; Le lecture du clavier se terminera après un Enter ou après 11 caractères octets_lus db ? ; nombres de caractères réellement lus ( ici entres 0 et 11) message db 11 dup (?) ; les caractères seront rangés ici
L'instruction "loop boucle" est équivalente à ceci: dec cx ; cx=cx-1 jnz boucle ; saute à boucle si cx >0
If faut donc que cx contienne la taille du message, comme ceci: mov cl,octets_lus xor ch,ch ; = mov ch,0 boucle: ... Il y a quelques maladresses dans ton code, mais l'essentiel est bien sur qu'il fasse ce que tu lui demandes. Amicalement
|
|
vendredi 14 mars 2008 à 04:12:53 |
Re : Problème de restitution d'une chaîne.

rannik
|
Salut,
tout d'abord merci d'avoir répondu ...
Ces maladresses j'en suis très conscient : ) j'ai que 2 soirs de découverte du ASM à mon actif et j'ai un peu plus de temps pour m'y reconsacrer maintenant.
Apres avoir lut un vieux tuto sur l'architecture x86, le mode réel, le fonctionnement des registres et du DOS, je me suis simplement posé comme problème tout bête si facil en langage de haut niveau :
comment faire pour afficher une chaîne lue au clavier ? : ) Car de toute évidence découvrir ça en asm à bas niveau n'est pas simple (je connais que ruby et php).
J'ai donc cherché une documentation sur les interruptions du DOS, où je n'ai trouvé, bien évidement, aucun exemple exhaustif (en français) à me mettre sous la dent concernant le fonctionnement de 0ch.
j'ai finis par bidouiller ce code malin qui ne l'est pas ... ^^
Donc pour en revenir à nos moutons ... pourquoi déclarer de cette façon =>> message db 11 dup (?) Je croyais qu'il fallait prévoir dans la déclaration d'une part le nombre d'octets attendu + 1 (le caractere de fin de ligne), ensuite un octet pour le nombre de caractère réellement lus, puis ensuite le tableau du nombre d'octet attendu + fin de ligne. Ce qui donnerait précisement : nom db 11, ?, 10 dup(?), ? J'ai trouvé un exemple de cette déclaration dans un ptit tuto sur un site et je me rends compte que ton explication n'a rien à voir avec ce que j'ai lu ... Je ne connais guère pour l'instant le format de la fonction 0ch, mais j'imaginais qu'elle stockait automatique le nombre d'octets lu sur le 2e octet du buffer, valeur que je voulais répérer pour la passer à cx.
|
|
vendredi 14 mars 2008 à 14:10:30 |
Re : Problème de restitution d'une chaîne.

Guilou34
|
Salut Ce qui t'a échappé c'est qu'à l'appel de l'int 21 j'ai écrit: "mov dx, offset nombre" et pas "mov dx,offset message" donc dx pointe bien sur une structure
Je trouve tes essais bien sympathiques mais je crois qu'il te faut d'abord un bon tuto.
|
|
Cette discussion est classée dans : int, mov, ax, chaîne, 21h
Répondre à ce message
Sujets en rapport avec ce message
loader problème de code [ par TRAX44 ]
salut tout le monde !!g essayer de faire un loader (petit prog qui charge un autre prog) mais c un desartre je comprend pas très bien ce qui ne marche
tp assembleur i3 pour la FST [ par babbiverus ]
main proc mov ax,@Datamov ds, axmov si,offset tabmov cx, 16mov bx,0saisie: mov dx,offset commande;afficher "saisir un nombre"mov ah,9int 21hmov ah, 1
Mini OS !! debut [ par Hardouz ]
salut a tous ! je debut en ASM je vx bosser un px en ASM je connais l'architechture ect !!! j'ai fais un pti programme mais il ya un probléme 1/ lors
assembleur/ patronyme [ par maxverypainful ]
Bonjour, je suis nouveau en tant qu'étudiant en informatique de gestion et j'ai une question concernant un code que nous devons créer.Il a pour but de
Lecture de DTA [ par mouadestla ]
Bonsoir , je débute en assembleur , j'esseye de coder en 16 bits un petit programme qui fait appele à l'interuptions 21h : 4Eh du DOS qui cherche un f
Mon fichier Mp3 [ par li2k ]
Salut!J'aimerai créer en assembleur un programme qui lance la lecture d'un fichier mp3 (Juste pour faire mon réveil personnalisé sur ordi)Mais bon le
probleme d'affichage d'une soustraction [ par calimerros ]
[u]Bonjour à tous et à toutes.[/u] Voici un programme que je réalise et je bloque au niveau de l'affichage d'une soustraction (SUB). Pour moi mon pr
Affichage décroissant et alphabétique de 2 listes(Nom_Prénom et Note) [ par m_didi9 ]
[code=autre]Data SEGMENT Mess1 DB 10,13, 'Entrez la liste des Noms :' DB 10, 13, '$' Mess2 DB 'Entrez la liste des Notes :' DB 10, 13, '$' Mess3
un code en assembleur [ par tatouna ]
salut à tous, je suis débutante en asm donc j'ai un problème et je souhaite que vous m'aidiez j'ai une chaine de caractère (une date) et je veut la p
erreur compilation [ par greg4 ]
je voudrai compiler--------------------------------------.model tiny.dataHelloMessage db 13,10,'Hello World !',13,10,'$'.codeorg 100hstart: mov ax,@d
Livres en rapport
|
Derniers Blogs
TECHDAYS PARIS 2010 : LES SERVICES D'APPLICATIONS DANS SHAREPOINT 2010TECHDAYS PARIS 2010 : LES SERVICES D'APPLICATIONS DANS SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Xavier Moreels et Julien Bakmezdjian Ce sujet est lié au partage des applications comme services dans SharePoint 2010, ceci représente la possibilité de créer sa propre application qui sera utilisable comme ceux en standard : Search...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2010 : LA GED ET SHAREPOINT 2010TECHDAYS PARIS 2010 : LA GED ET SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Etienne Lacour Cette session a commencé par un rappel de la gestion de contenu et surtout une résumé des points ayant été amélioré avec 2010. Accompagné d'un point sur le cycle de vie des documents. Un rappel du fonctionnement de S...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2010 : SHAREPOINT 2010 ET LES RéSEAUX SOCIAUXTECHDAYS PARIS 2010 : SHAREPOINT 2010 ET LES RéSEAUX SOCIAUX par ROMELARD Fabrice
Animé par: Olivier Lepeltier et Karim Manar Cette session commence par la présentation du concept de réseau social, mais surtout de la particularité de du réseau social dans une entreprise. La vision du réseau social est donc une extension du MyS...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2010 : SHAREPOINT 2010 - DESCRIPTION ET NOUVEAUTéSTECHDAYS PARIS 2010 : SHAREPOINT 2010 - DESCRIPTION ET NOUVEAUTéS par ROMELARD Fabrice
Animé par: Karim Manar et Laurent Beaudouin Cette session a pour but de revenir sur ce qu'est SharePoint globalement, mais aussi de voir les évolutions liées avec l'avènement de la version 2010. A partir de la marguerite de...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2010 : PLEINIèRE LUNDITECHDAYS PARIS 2010 : PLEINIèRE LUNDI par ROMELARD Fabrice
Comme chaque année, c'est le grand rassemblement autour des technologies Microsoft qui se déroule donc à Paris au Palais des Congrès. Cette année est riche pour Microsoft en terme de livraison produit, paris l...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Forum
PICCPICC par imeneniso
Cliquez pour lire la suite par imeneniso
Logiciels
DB-MAIN (9.1.0)DB-MAIN (9.1.0)DB-MAIN is a data-modeling and data-architecture tool. It is designed to help developers and anal... Cliquez pour télécharger DB-MAIN Xilisoft DPG Convertisseur (5.1.37.0120)XILISOFT DPG CONVERTISSEUR (5.1.37.0120)Xilisoft DPG Convertisseur offre aux fans de Nintendo DS une bonne solution leur permettant de dé... Cliquez pour télécharger Xilisoft DPG Convertisseur GraphicsGale (2.01.01)GRAPHICSGALE (2.01.01)GraphicsGale est un logiciel de PixelArt avec de nombreuse fonctionnalités permettant de réalisé ... Cliquez pour télécharger GraphicsGale Architecte 3D (Platinum 2010)ARCHITECTE 3D (PLATINUM 2010)Architecte 3D Platinium vous permet de concevoir facilement les plans votre future maison, de l'é... Cliquez pour télécharger Architecte 3D TeamViewer 5 (TeamViewer 5)TEAMVIEWER 5 (TEAMVIEWER 5)Dépanner un ami,expliquer une manipulation devient un jeu d'enfant.
Prise en main d'un autre ord... Cliquez pour télécharger TeamViewer 5
|