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

Signaler
Messages postés
9
Date d'inscription
vendredi 5 décembre 2003
Statut
Membre
Dernière intervention
27 mars 2004
-
Messages postés
9
Date d'inscription
vendredi 5 décembre 2003
Statut
Membre
Dernière intervention
27 mars 2004
-
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

Messages postés
59
Date d'inscription
dimanche 15 décembre 2002
Statut
Membre
Dernière intervention
2 juin 2004

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
Messages postés
9
Date d'inscription
vendredi 5 décembre 2003
Statut
Membre
Dernière intervention
27 mars 2004

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
Messages postés
1466
Date d'inscription
vendredi 2 janvier 2004
Statut
Modérateur
Dernière intervention
14 février 2014
1
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.

@++
Messages postés
9
Date d'inscription
vendredi 5 décembre 2003
Statut
Membre
Dernière intervention
27 mars 2004

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
Messages postés
1466
Date d'inscription
vendredi 2 janvier 2004
Statut
Modérateur
Dernière intervention
14 février 2014
1
re

c bon car tu utilise le handle de sortie standard.
autant pour moi ;-)
Messages postés
1466
Date d'inscription
vendredi 2 janvier 2004
Statut
Modérateur
Dernière intervention
14 février 2014
1
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
Messages postés
1466
Date d'inscription
vendredi 2 janvier 2004
Statut
Modérateur
Dernière intervention
14 février 2014
1
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.

@++
Messages postés
9
Date d'inscription
vendredi 5 décembre 2003
Statut
Membre
Dernière intervention
27 mars 2004

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é.
Messages postés
1466
Date d'inscription
vendredi 2 janvier 2004
Statut
Modérateur
Dernière intervention
14 février 2014
1
salut,

5000 + 5000 te donne 00000 en resultat non ?

@++
Messages postés
9
Date d'inscription
vendredi 5 décembre 2003
Statut
Membre
Dernière intervention
27 mars 2004

5000 + 5000 me donne 10000 et si je ne met pas la ligne mov al,0 cela me donne autre chose