begin process at 2012 05 25 11:49:43
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive Assembleur

 > 

Archives

 > 

Newbii

 > 

pb int 21h ah=0ah


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

pb int 21h ah=0ah

samedi 24 juillet 2004 à 12:09:20 | pb int 21h ah=0ah

mat74

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 .

voila le code :



; les macros

lire_chaine macro chaine?
push ax dx
mov ah, 0Ch mov al, 0Ah mov dx, chaine?
int 21h
pop dx ax
endm

Cout macro text?
local texte

data segment use16

texte db text?,'$'

data ends

code segment use16

push ax dx

mov ah, 09h
mov dx, offset texte
int 21h

pop dx ax

code ends

endm




.386


code segment use16

assume cs:code, ds:data, ss:pile


debut:

mov ax, data
mov ds, ax

lire_chaine <offset message>

Cout <10,13,offset message,10,13>

mov ah, 4ch
int 21h

code ends


data segment use16

message db 255,?,254 dup(?),?

data ends


pile segment stack

remplissage db 256 DUP (?)

pile ends



end debut





merci d'avance
@+
mercredi 28 juillet 2004 à 11:15:26 | Re : pb int 21h ah=0ah

patatalo

Membre Club Administrateur CodeS-SourceS

salut,

Cout <10,13,offset message,10,13> ne peut pas fonctionner car ta macro ne prends pas en charge le passage de paramètre par pointeur.

Cout <10,13,"là, c'est bon",10,13> serait ok

@++
mercredi 28 juillet 2004 à 13:50:16 | Re : pb int 21h ah=0ah

mat74

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 ?
samedi 31 juillet 2004 à 13:20:37 | Re : pb int 21h ah=0ah

patatalo

Membre Club Administrateur CodeS-SourceS

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.

@++


Cette discussion est classée dans : code, chaine, mov, ax, dx


Répondre à ce message

Sujets en rapport avec ce message

rs232 [ par TRAX44 ] salut,tout premièrement je sais qu'il ya des exemples sur le site!mais mon problème est autre je tiens à comprendre pourquoi mon code ne fonctionne pa Modifer le vecteur d'interruptions [ par vecchio56 ] Bonjour J'essaie de refaire la source http://www.cppfrance.com/code.aspx?ID=33558 en assembleur (ca consiste à modifier la routine de l'interruption 0 Graphique [ par RM50Man ] Bonjour a tous!!!!Je veux tracer une ligne mais ca ne marche pas, je passe les parametre par la pile,et ensuite ds la fonction principale, je remplis problème : nombres aléatoires random [ par dmontavon ] Je cherche à générer un nombre aléatoire avec le code :Random:   mov dx,128             & A l'aide... svp [ par monitor100 ] Bonjour a tous,Je suis completement null en assembler, et il faut que je fasse afficher le résultat de la factoriel de 4 soit 24.est ce que quelqu'un Boot et heure [ par henri12 ] je fais un essai de changement de l heure avec l interruption 21h sous le boot l heure n est pas changerpourquoi.286C   ;Code de bootsecteur permettan interruption [ par aboulkhir ] salut j essaye de gerer le clavier en interruption en asselmbleur voila mon programme je travaille sous debug en invite de commande de windowsclimo Entrée d'une chaine de cractères [ par w4kfu ] J'é Addition ASM [ par GibsonUSA ] Bonjour a tous, je débute en ASM 16bits et je bloque pour faire une addition de deux chiffres saisis par l'utilisateur. Voila ce que j'ai fais. A l' Executer 2 action en meme temps [ par HirOinEvOl ] Bonjour, je souhaite exécuter les deux codes suivant mais simultanément pour qu'ils puissent tournés en parrallèles. Je n'ai trouvé aucun moyen de l


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,328 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales