Programme assembleur

Résolu
hi!
je n'arrive pas à comprendre l'exercice suivant:
nous avons 4 nombres entiers en méroire U,V,Y et T.si la somme de 2 de ces4 nombres est egale à la somme des 2 autres on effectera cette somme à chacune des4 variables sinon on leur affectera 0.on vous demande d'ecrire le programme assembleur qui realise ce travail.
merci infinement
Configuration: Windows XP
Internet Explorer 6.0

8 réponses

  1. Salut,

    Bon je pense que ça doit marcher.

    ;Pour back me up
    
    ;data
    U: 	ds	8
    V:	ds	8
    Y:	ds	8
    T:	ds	8
    
    ;code
    start:		nop
    init:           lxi h,U
    		mvi m,15h
    		lxi h,V
    		mvi m,18h
    		lxi h,Y
    		mvi m,3h
    		lxi h,T
    		mvi m,6h
    load:		lda U
    		mov b,a	;U->B
    		lda V
    		mov c,a	;V->C
    		lda Y
    		mov d,a	;Y->D
    		lda T
    		mov e,a	;T->E
    total:		add b
    		add c
    		add d	;Total->A
    division:	ora a	;0->Carry
    		rar 	;Total/2->Total
    		jc pasegaux	;Impair
    test:		mov h,a	;Total/2->H
    		mov a,c
    		add b
    		cmp h
    		jz egaux ;Si U+V=Total/2
    		mov a,d
    		add b
    		cmp h
    		jz egaux ;Si U+Y=Total/2
    		mov a,e
    		add b
    		cmp h
    		jz egaux ;Si U+T=Total/2
    pasegaux:	mvi a,0h
    		sta U
    		sta V
    		sta Y
    		sta T
    		jmp halt
    egaux:		mov a,b
    		add h
    		mov b,a ;U+=Total/2
    		mov a,c
    		add h
    		mov c,a	;V+=Total/2
    		mov a,d
    		add h
    		mov d,a ;Y+=Total/2
    		mov a,e
    		add h	;T+total/2->A
    		sta T
    		mov a,b
    		sta U
    		mov a,c	
    		sta V
    		mov d,a
    		sta Y
    halt:		hlt
    1. merci beaucoup!
      mais je suis désolée,j'ai rien compris
      je suis seulement une etudiante de 1 ere année ,je trouve votre solution tres difficile,est-ce que vous pouvez utiliser un peu de facilité,i'll be very thankfull
      merci beaucoup:-D
    2. Bonjour,

      Je ne sais pas trop comment t'expliquer c'est de l'assembleur aussi... Je peux te détailler mon algo si tu veux.

      On additionne les 4 nombres et on stocke cela dans total.
      On divise total par 2. (Si total impair, pas la peine de continuer)
      Sinon on prend un des quatre nombres et on teste si en additionnant un des 3 autres on arrive à ce total/2.
      Si oui, alors la somme des deux autres nombres fait aussi total/2.

      Après, en complément de cette description, il y a les commentaires dans le code. Si malgrès ça tu n'arrives pas à comprendre, je te conseille de réviser les opérateurs (cf doc) et faire des exos plus faciles.

      Je suis moi-même débutant en première année d'école d'ingé, et je t'avoue que ce n'est pas évident !

      Salut
    3. @ekrahi!
      mais regardez notre prof comment il l'as expliqué:
      nous avons u,v,y et t
      si u+v=y+t
      par exemple:
      U=2,v=3,y=1et t=4
      donc 5=5
      on met la valeur 5 ds chacune de ces variables sinon on met 0
      LDA U
      ADD V
      STA Z
      LDA Y
      ADD Z
      STA W
      SI Z=W (je sais si on peut ecrire comme ça en assembleur?)
      et je sais pas apres comme je dois faire
    4. @ekraOui c'est bien ca que j'ai compris. Mon programme implémente ça normalement. Regarde les étiquettes pour décomposer l'algo.

      ADD V
      ADD Z

      n'existe pas

      SI Z=W (je sais si on peut ecrire comme ça en assembleur?)
      Il faut d'abord stocker les valeurs dans les registres dont une dans l'accu.
      Et faire
      CMP B (si registre B)
      JZ label (saut conditionel)

      Mais bon, vu les erreurs, regarde le cours d'abord !
  2. vous pouvez m'aider j'ai un exercice je sais comment je vais le resoudre
    ex:donner l'algorithme et le programme assembleur qui permet de faire la somme de deux nombres naturels 16 bits.utiliser une procédure <somme> qui: -lit les deux opérandes sur la pile sans les dépiler ni modifier le sommet de la pile.
    -calcule la somme de ces deux opérandes.
    -stocke le résultat dans le registre AX
    merci d'avance
    1. A l'aide
      j'ai besoin d'un prog en assembleur qui fait la somme de deux nbres entres au clavier
      il doit pouvoir tester si ces entrees sont des chiffres ou des lettres
      Ce que j'ai pu faire se resume a cela
      debug a100
      mov AX, 4
      mov Bx,5
      AddAX,BX
      movDX,AX
      (enter)
      (enter)
      nope
      (enter)

      Pour le compiler on fait
      t enter(4fois)
      cela ne resout pas la question du test...
      1. slt svp y' a pas une solution pour ce petit prob: un prog assembleur qui permet la lecture d' une chaine d caractérepuis l'inversion de ctte chaine en éffectuant l'opération ""miroir"" cad le dernier caractére devient le premier, et l'avant dernier le secondet ainsi de suite, puis l'affichage du résultat sur l'écran....et merci
        1. comment utiliser les registre
          toujours mon probleme est j'ai bien resolu une telle probleme mais je ne sais comment organiser les instructions
          ce sont mes seuls problemes en programmation assembleur
          et merci d'avance
          1. je voudré aoir laplication ou bien le programme assembleur A86 pr commencé mes exercices
            merci
            1. QUELLE EST LA DIFFERENCE ENTRE UN ASSEMBLEUR,COMPILATEUR,interpretateur?MERCI
              1. Bonjour

                On évite les majuscules et puis on ne met pas "répondre" lorsque l'on ne propose pas une réponse au problème initial.
                Merci