cs_mat74
Messages postés241Date d'inscriptiondimanche 10 août 2003StatutMembreDernière intervention16 juin 2010
-
24 juil. 2004 à 12:09
cs_patatalo
Messages postés1466Date d'inscriptionvendredi 2 janvier 2004StatutModérateurDernière intervention14 février 2014
-
31 juil. 2004 à 13:20
salut a ts ,
voila j'ai fais un programme qui est censé lire une chaine entré par l'utilisateur et ensuite la reafficher . Il me demande bien d'entré une chaine mais il ne la reaffiche pas ensuite . Je ne comprend pas . J'utilise l'interruption 0ch puis 0ah pr demander la chaine , et ensuite j'affiche la chaine tel quel avec l'interruption 09h . j'utilise 2 macro un pr lire et 1 pr afficher la chaine .
le prog doit donner un exe .
j'utilise tasm comme compilateur .
cs_mat74
Messages postés241Date d'inscriptiondimanche 10 août 2003StatutMembreDernière intervention16 juin 2010 28 juil. 2004 à 13:50
je viens d'essayer sa
mov ah, 09h
mov dx, offset message
int 21h
a la place d'appeller mon macro mais j'ai plusieurs question
-> comment faire pr que mon macro puisse gerer les pointeur sur chaine ?
-> comment faire pr rajouter $ ou autre chose comme des saut de ligne a la fin de la chaine av de l'afficher car sa marche seulement si je rentre $ moi ds la saisie ?
-> puis ia 1 peti pb , si je tape abc$ ds la saisie il me re-ecrit un espace , puis le caractere ascii num 4 ( un espece de carre de travers ) , puis abc . je crois en fait que il me re-ecrit le caractere num 4 car c'est le nb d'element ds la chaine mais comment l'eviter ? et puis pr l'espace ?
cs_patatalo
Messages postés1466Date d'inscriptionvendredi 2 janvier 2004StatutModérateurDernière intervention14 février 20142 31 juil. 2004 à 13:20
re,
message db 255,?,254 dup(?),?
le caractere avec le carré dont tu me parle doit etre le 255 et l'espace doit etre le ? qui doit etre = 0 donc affiche un blanc
la gestion des pointeurs dans ta macro va t'obliger a definir le parametre ( chaine ou pointeur ?)
le + simple pourrait etre de faire 2 macros car en Masm je sais comment avoir des informations sur les parametres mais je ne sais pas si c'est possible avec TASM que je ne connais pas.
donc 2 macros: outtxt et outptr
la premiere prendra en param la chaine:
outtxt "mon texte$"
et la deuxième prendra en param le pointeur sur la chaine:
Txt db "mon texte$"
outptr <offset Txt>
je te laisse le soin de la programmation de cette 2eme Macro car je pense que tu peux trouver beaucoup d'exemples pour t'aider sur le net et peut etre meme sur ce forum.
le petit soucis si tu veux ajouter des caracteres dans ta chaine est que tu va devoir programmer le traitement de cet ajout:
tu copie ta chaine dans un buffer, des que tu rencontre le caractere '$' dans la chaine source ( ou autre caractere, c toi qui décide, ca pourrait etre 0 car c toi qui prog l'ajout, c pas DOS ), tu ajoute 13,10 (CRLF) puis tu finis par ajouter dans ton buffer le caractère de terminaison '$', pour finir, tu envoi l'adresse de ton buffer dans ta macro outptr et le tour est joué.
MakeDOSStr MACRO pStr
LOCAL _buff
LOCAL @1,@END
.DATA
_buff db 255 dup(?)
.CODE
push si di
mov si,pStr
lea di,[_buff]
@1:
cmp [si],0 ; pour cet exemple, ma chaine finit par 0
mov al,[si]
lea si,[si+1] ; ne modifie pas les flags
je @END
mov [di],al
lea di,[di+1]
jmp @1
@END:
mov byte ptr [di],13 ; ajoute CRLF
mov byte ptr [di+1],10
mov byte ptr [di+2],'$' ; ajoute DOS terminal
OutDOSStr <offset _buff>
pop di si
ENDM
cette exemple n'est pas bien car pas de gestion de taille buffer. Linus serait vert.