[Turbo Assembleur] Récup données

Statut
N'est pas ouverte pour d'autres réponses.

Angy

Elite
Bonjour!

J'ai un petit problème, comme je suis assez novice en turbo assembleur. J'essaie de récupérer un nombre que j'ai entré au clavier pour pouvoir faire une soustraction dessus. Mais je n'arrive pas à récupérer les chiffres exacts que j'ai encodé :[]

J'ai besoin de soustraire de 30 chacun des chiffres (vu qu'ils sont en ascii) pour les avoir décimal, mais sachant que je n'arrive pas à récuperer, je suis un peu mal en point :-D

Quelqu'un saurait un peu m'éclairer?

Merci bien :p

Code:
.386

Donnees SEGMENT PARA PUBLIC USE16
	Question db 'Bonjour,quel est votre nom? ','$'
	Question1 db 'De quel nombre voulez vous connaitre la parite? ','$'
	Repet db 'Bonjour, ','$'
	Nom db 18 dup(20)	
        Maj db 1 dup(20)
	Nb db 2 dup(0)
	nbcar db 2 dup(0)
	parite db ' est un nombre ','$'
	
Donnees ENDS

Code SEGMENT PARA PUBLIC USE16
	ASSUME DS: Donnees,CS:Code
debut:
	mov AX,Donnees
	MOV DS,AX
	
	MOV DX,offset question
	call affiche ; affiche la demande de nom
	call passeligne
	mov dx,offset Nom
	call encode ; encodage du nom
	call passeligne	 ; passage a la ligne suivante
	mov dx,offset repet
	call affiche ; affiche bonjour,
	mov dx, offset nom[2]
	call affiche ; affiche le nom
	call passeligne
	mov dx, offset question1
	call affiche ; affiche la demande du nombre
	call passeligne
	mov dx, offset nb
	call encode ; encodage du nombre	
		
	call passeligne ;passage a la ligne suivante

	call calculparite

	mov dx, offset nb
	call affiche ; affichage du nombre
	mov dx, offset parite	
	call affiche ; affiche est un nombre
	
	mov ah,4cH
	int 21h
	
	affiche proc near
	push ax
	mov ah,09h
	int 21h
	pop ax
	ret
	endp		
	
	encode proc near
	push bx
	mov bx,dx
	mov [bx],ah
	mov ah,0Ah
	int 21H
	mov ah,[bx+1]
	pop bx
	ret
	endp
	
	passeligne proc near
	push ax
	push dx
	mov dl,0dh
	mov ah,02h
	int 21h
	mov dl,0ah
	mov ah,02h
	int 21h
	pop dx
	pop ax
	ret
	endp
		
	calculparite proc near
	push ax
	push dx
	push bx
	mov bl,02
	mov ax, offset nb
	div bl
	pop bx
	pop ax
	pop dx
	ret
	endp
	
		
Code ENDS
Pile SEGMENT PARA stack USE16 'stack'
	db 256 dup (?)
Pile ENDS
end debut
 

Froggy

fake geek
tu parviens à récupérer le nom mais pas les chiffres ? o_O


bon j'ai bine relu le truc, donc 2 choses :

1. faut éclaircir cette histoire de nombre qui ne rentre pas mais bien le nom.

2. a ta place, je mettrais mon passageligne après avoir calculé la parité, comme ça tu t'assure de pas changer la valeur du registre ou se trouver ton nombre après l'encodage et tu le réutilise tout de suite ;)
 
1er
OP
Angy

Angy

Elite
Ben en faite, mon problème c'est que avec le nom, je mets bien

mov dx, offset nom[2] pour le récuperer.

mais pour le nombre, si j'encore un nombre, ensuite que je fais

mov dx, offset nb
ou
mov dx, offset nb[2]

Il me met quelque chose qui a rien avoir avec le nombre encoder :-(
 

Ahava

Revenant
T'es sur que c'est 30 ? J'ai souvenir que 0 -> 48 donc à faire -48 pour avoir la vraie valeur :gne:


Je peux totalement me tromper et j'ai fait juste de l'ASM, pas du Turbo ASM (je savais meme pas que ça existait)... :oops:



edit : je crois que c'est ça, le code de 0 est bien en ASCII 48, suffit de regarder là :

 

Froggy

fake geek
oué en effet ... c'est 48 :-D

le v'la ton pb :D
 
1er
OP
Angy

Angy

Elite
Ah ouais... merci c'était ça haha :-D

Merci beaucoup :oops: :oops:


Sinon autre problème: Pour calculer la parité, je sais que je dois diviser par 2 le nombre obtenu, s'il y a un reste c'est un pair sinon un impair.

Et donc, je dois faire "div bl" et ça divisera ax par bl (ici je mets bl à 2) mais quand je fais la division, il me dit Divide by zero/overflow error.

(ps: j'ai dans ax: 0202 pour 22, ca vient de la l'erreur?)

Code:
calculparite proc near
	push ax
	push dx
	push bx
	mov bl,02
	div bl
	pop bx
	pop ax
	pop dx
	ret
	endp
 

Ahava

Revenant
t'es pas censé diviser AX par BX, ou AL par BL ?


Regarde bien ce qui est divisé par quoi, c'est pas évident, avec les 3 possibilités existantes.. ( soit AL , soit AX soit EAX )...


Jparie que c'est ça, t'a un zéro qui traine qque part et boum divided by zero =]
 

Froggy

fake geek
Ahava a dit:
t'es pas censé diviser AX par BX, ou AL par BL ?
en effet ... j'coirs bien que peut importe la plate forme, cette règle la elle bouge pas donc ... =]

(ptin comment on voit trop qu'on est dans la même école et que c'est la seule a faire de l'ASM :cool:)
 
1er
OP
Angy

Angy

Elite
Ah d'accord :-D

Sinon, si mon chiffre est 22, il met 0202 dans AX après la soustraction.

Il considère 0202 comme 202 ou comme 22?
 

Froggy

fake geek
Angy a dit:
Ah d'accord :-D

Sinon, si mon chiffre est 22, il met 0202 dans AX après la soustraction.

Il considère 0202 comme 202 ou comme 22?
bah ca dépend de ce à quoi tu regardes.

si ax : 0202 ou 202, ça équivaut à la même chose

si al : 02 ou 2

si ah : 02 ou 2

=] 'tention que ce soit bien en hexa que tu parles hein ;) parce que 202(16) != 202(10) aussi :)
 
1er
OP
Angy

Angy

Elite
Merci beaucoup! :-D
 

Ahava

Revenant
[horssujet]

Vous êtes tous les deux à l'ESI ? :p

[/horssujet]
 
1er
OP
Angy

Angy

Elite
Non, pas moi :oops:
 

Froggy

fake geek
Ahava a dit:
[horssujet]

Vous êtes tous les deux à l'ESI ? :p

[/horssujet]
non non c'est de toi et moi que je parlais :mrgreen: ('fin il me semble non ? :cool:)
 

Ahava

Revenant
Oui ! bien qu'on se soit jamais parlé en vrai à l'école, si ? :oops:

Tfacon reste 2 jours de cours pour moi, dont today exam :-(
 

Froggy

fake geek
Ahava a dit:
Oui ! bien qu'on se soit jamais parlé en vrai à l'école, si ? :oops:

Tfacon reste 2 jours de cours pour moi, dont today exam :-(
non je pense pas qu'on se soit jamais vu à l'école ... mais c'est normal ça fais un bout de temps que je n'ai plus été (doit d'ailleurs aller chercher l'horaire des exams... :-D) vu que je double ma première et que les cours du premier semestre en première sont pas vraiment ... "difficile" :D

j'préfère me préparé déjà pour le second semestre (projets et autres) chez moi plutot que d'aller à des cours que j'ai déjà réussi sans avoir 12 l'année passée ... :roll:
 
1er
OP
Angy

Angy

Elite
J'ai un autre problème...

Pour autre chose, j'essaie de mettre mes sous routines dans un autre fichier, et grâce au link, de lier mon programme principal au fichier de sous routines. Mais je vois vraiment pas comment on fait pour les rendre externe et tout :-(
 

Froggy

fake geek
en asm de base me semble que tu dois mettre GLOBAL devant les routines et ensuite indiquer dans le souce qui les appelles qu'elles sont externe en mettant EXTERN nomdelaroutine... Maintenant c'est p-e autre chose en turbo ... :/
 
1er
OP
Angy

Angy

Elite
Arf! je mettais EXTRN dans celui de routine moi :[]

Pour Global, tu sais me donner un exemple ou le mettre exactement?
 

Froggy

fake geek
rien dis ... voir post plus loin ... saleté de bouton éditer :[]
 
Statut
N'est pas ouverte pour d'autres réponses.
Haut