J'ai besoin d'aide pour 2 petit programme en asm

gctom Messages postés 9 Date d'inscription vendredi 5 décembre 2003 Statut Membre Dernière intervention 27 mars 2004 - 10 mars 2004 à 08:07
gctom Messages postés 9 Date d'inscription vendredi 5 décembre 2003 Statut Membre Dernière intervention 27 mars 2004 - 13 mars 2004 à 11:39
je vous expose mon problème : j'ai quelque difficultés avec l'assembleur malgré les livres et cours que j'ai suivi, je n'arrive pas a faire 2 petit programme :
- l'un qui permet de faire une addition et une multiplication entre 2 nombres et d'afficher le résultat
- l'autre qui permet la réalisation d'une horloge qui affiche l'heure et la date pendant une durée indéterminée. le programme doit s'accompagner d'une réalisation graphique qui permet d'afficher une image ou plusieurs.

SVP aidez-moi car je n'arrive a faire aucun de ces 2 programme.

merci

si vous avez des conseils a me donner : [mailto: gctom@caramail.com] merci

10 réponses

TangiX Messages postés 59 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 2 juin 2004
11 mars 2004 à 16:21
ca ressemble beaucoup a des exo et non a des projet perso

le forum n'est pas une source de soluce mais un lieu de rencontre et d'entraide !

montre nous ce que tu a deja fais et la ou tu bute et on t'aidera

BonDev'
%-6 TangiX %-6
0
gctom Messages postés 9 Date d'inscription vendredi 5 décembre 2003 Statut Membre Dernière intervention 27 mars 2004
12 mars 2004 à 11:54
ben voila mon début de programme (fais sous masm)
je tiens juste a préciser que je suis le méga newbie en asm et que je ne comprend quasiment rien :

----------------------------------------------------------------

cseg segment 'code'
assume cs:cseg, ds:cseg, es:cseg
org 100h

main: ;affichage du 1er message
;------------------------
mov bx,0001h
lea dx,message1
mov cx,l_message1
mov ah,40h
int 21h

;saisie du 1er nombre
;--------------------
lea dx, N1
mov ah,0ah
int 21h

;affichage du 2e message
;-----------------------
mov bx,0001h
lea dx,message2
mov cx,l_message2
mov ah,40h
int 21h


;saisie du 2e nombre
;-------------------
lea dx, N2
mov ah,0ah
int 21h

;conversion en decimal etendu des chiffres des 2 nombres
;-------------------------------------------------------
mov ax, 0000111100001111b
and word ptr N1+2,ax
and word ptr N1+4,ax
and word ptr N2+2,ax
and word ptr N2+4,ax

;affichage du menu
;-----------------
mov bx,0001h
lea dx,messagemenu
mov cx,l_messagemenu
mov ah,40h
int 21h
mov bx,0001h
lea dx,choix1
mov cx,l_choix1
mov ah,40h
int 21h
mov bx,0001h
lea dx,choix2
mov cx,l_choix2
mov ah,40h
int 21h

;saisie de la valeur :
;---------------------

lea dx,choix
mov ah,0ah
int 21h

i_f: cmp choix,1
je addition
jne multiplication

;addition de N1 et N2
;--------------------
addition:
mov al, byte ptr N1+5
add al, byte ptr N2+5
aaa
mov Res1+6,al
mov al, byte ptr N1+4
adc al, byte ptr N2+4
aaa
mov Res1+5,al
mov al, byte ptr N1+3
adc al, byte ptr N2+3
aaa
mov Res1+4,al
mov al, byte ptr N1+2
adc al, byte ptr N2+2
aaa
mov Res1+3,al
mov al, 0
adc al, 0
mov Res1+2, al
mov dl,0ah
int 21h
je convers

;conversion du resultat pour l'affichage
;---------------------------------------

convers:
mov al, 00110000b
or byte ptr Res1+6,al
or byte ptr Res1+5,al
or byte ptr Res1+4,al
or byte ptr Res1+3,al
or byte ptr Res1+2,al
mov dl,0ah
int 21h
je resultat
resultat:
;affichage du 3e message
;-----------------------
mov bx,0001h
lea dx,message3
mov cx,l_message3
mov ah,40h
int 21h

;affichage du resultat de l'addition
;-----------------------------------
lea dx, Res1+2
mov cx,5
mov ah,40h
int 21h
je fin

;affichage du 4e message
;-----------------------
mov bx,0001h
lea dx,message4
mov cx,l_message4
mov ah,40h
int 21h

;multiplication de N1 et N2
;--------------------------
multiplication:

;affichage du resultat de la multiplication
;------------------------------------------


;fin de programme
;----------------
fin:
mov ah,4ch
int 21h

;-------------------------------------------
; declaration des messages
;-------------------------------------------
messagemenu db "faites votre choix :", 0dh, 0ah
l_messagemenu equ $-messagemenu

choix1 db "1-addition (par d‚faut):", 0dh, 0ah
l_choix1 equ $-choix1

choix2 db "2-multiplication", 0dh, 0ah
l_choix2 equ $-choix2

message1 db "Saisir le 1er nombres (Maximum 4 chiffres):", 0dh, 0ah
l_message1 equ $-message1

message2 db 0dh, 0ah, "Saisir le 2e nombres (Maximum 4 chiffres):", 0dh, 0ah
l_message2 equ $-message2

message3 db 0dh, 0ah, "Le resultat de l'addition est:", 0dh, 0ah
l_message3 equ $-message3

message4 db 0dh, 0ah, "Le resultat de la multiplication est:", 0dh, 0ah
l_message4 equ $-message4

;-------------------------------------------
; declaration des variables
;-------------------------------------------

N1 db 5,?,5 dup(?)
N2 db 5,?,5 dup(?)
Res1 db 6,?,6 dup(?)
choix db 2,1,?

cseg ends

end main

---------------------------------

voila si vous pouvez m'aider ca serait génial parce que la je galère bcp trop. merci
0
cs_patatalo Messages postés 1466 Date d'inscription vendredi 2 janvier 2004 Statut Modérateur Dernière intervention 14 février 2014 2
12 mars 2004 à 15:58
salut,

la fonction 40h de l'interruption 21h du DOS sert a ecrire dans un fichier.
pour sortie a l'ecran, essaie plutot la fonction 09h
!!! le caractere de terminaison doit etre '$' je crois.

@++
0
gctom Messages postés 9 Date d'inscription vendredi 5 décembre 2003 Statut Membre Dernière intervention 27 mars 2004
12 mars 2004 à 16:03
alors en fait faut ke je change la facon d'écrire mes message c ca?

ca donnera un truc du style la ou pas :

messagemenu db "faites votre choix : $", 0dh, 0ah

avec :

mov ah,09h
int 21h
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_patatalo Messages postés 1466 Date d'inscription vendredi 2 janvier 2004 Statut Modérateur Dernière intervention 14 février 2014 2
12 mars 2004 à 16:19
re

c bon car tu utilise le handle de sortie standard.
autant pour moi ;-)
0
cs_patatalo Messages postés 1466 Date d'inscription vendredi 2 janvier 2004 Statut Modérateur Dernière intervention 14 février 2014 2
12 mars 2004 à 16:36
re,

ici, pas de définition de la fonction utilisée (ah non défini):

mov al, 0 ; pourquoi faire ?
adc al, 0 ; " "
mov Res1+2, al ; tu met 0 dans ton Res1+2 ?
mov dl,0ah
int 21h
je convers
0
cs_patatalo Messages postés 1466 Date d'inscription vendredi 2 janvier 2004 Statut Modérateur Dernière intervention 14 février 2014 2
12 mars 2004 à 16:44
re,

convers:
mov al, 00110000b
or byte ptr Res1+6,al
or byte ptr Res1+5,al
or byte ptr Res1+4,al
or byte ptr Res1+3,al
or byte ptr Res1+2,al
mov dl,0ah <- mov ah,0ah ira mieux ici
int 21h
je resultat
resultat:

relit ton code car il y a des petites erreurs d'inattention sinon, tu est presque au bout du premier exo.

@++
0
gctom Messages postés 9 Date d'inscription vendredi 5 décembre 2003 Statut Membre Dernière intervention 27 mars 2004
12 mars 2004 à 21:29
ben j'espère que j'ai bientot fini paske c pas évuident l'assembleur.

je galère a mort (j'ai eu a peu près une dizaine d'heure de cours et puis quelques heure de programmation)
mais j'ai trouvé ca relativement insuffisant. surtout pour réaliser une horloge !

et pour le mov al,0

ben avec un amis on a trouvé qu'en mettant ca, le résultat était de la bonne forme. enfin pour le moment on est très content de ca. par exemple en faisant 1211 + 4545 on obtient 05756 alors ke sans on obtient autre chose a la place du zéro.

mais je ne sais pas si cela est du a la partie ke l'on a rajouté.
0
cs_patatalo Messages postés 1466 Date d'inscription vendredi 2 janvier 2004 Statut Modérateur Dernière intervention 14 février 2014 2
13 mars 2004 à 09:41
salut,

5000 + 5000 te donne 00000 en resultat non ?

@++
0
gctom Messages postés 9 Date d'inscription vendredi 5 décembre 2003 Statut Membre Dernière intervention 27 mars 2004
13 mars 2004 à 11:39
5000 + 5000 me donne 10000 et si je ne met pas la ligne mov al,0 cela me donne autre chose
0
Rejoignez-nous