CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[ASM] Help, connaisseurs?

Epoch
Epoch
Niveau 10
24 octobre 2009 à 20:10:46

Bonsoir à tous ^^

Voilà, j'ai un souci en ASM(j'ai un TP à renvoyer avant demain soir, que j'ai presque fini d'ailleurs) :

Ecrivez un programme ex2c.asm qui fait la somme de 2 variables de type mot (précédemment déclarées) et qui sauvegarde le résultat dans une variable de type octet si cela est possible ou dans une variable de type mot si le résultat ne tient pas dans une variable de type octet. Faire des tests avec les valeurs négatives.

Donc, c'est la consigne. J'ai déjà un code dessus, cependant :

Je n'arrive pas à savoir comment faire pour qu'un Overflow(on me demande de tester avec des valeurs négatives...) soit détecté afin de soit le stocker dans un octet si ça tient, soit dans un mot si ça ne tient pas.

Merci d'avance à quiconque voudrait m'aider

Iliah
Iliah
Niveau 10
24 octobre 2009 à 21:59:50

Il n'y a pas un bit qui est levé lors d'un overflow ?

Epoch
Epoch
Niveau 10
24 octobre 2009 à 22:41:38

Théoriquement oui, mais ça le fait pas en ASM, je sais pas pourquoi, enfin...

En fait, j'aimerais savoir comment tester si une valeur peut rentrer dans une variable sans provoquer d'Overflow...

Le problème, c'est que je dois obligatoirement, dès le début, additionner des mots puis savoir si ça rentre dans un octet, ou dans un mot... Donc comparaison interdite entre un octet et un mot, et si je compare deux octets, epic fail, vu que si on ignore AH, AL rentre de toutes façons (donc le branchement est foireux)

Je suis en train de devenir fou -_-'

godrik
godrik
Niveau 30
24 octobre 2009 à 22:59:01

De quel assembleur parles tu ?

Epoch
Epoch
Niveau 10
25 octobre 2009 à 01:39:23

l'ASM 8086 (j'aurais du le préciser et j'en suis désolé.)

chris_27
chris_27
Niveau 10
25 octobre 2009 à 01:43:26

Mon avis, c'est que l'énoncé est ill-posed : Depuis quand on a des types dépendant en assembleur ?

Je m'explique :
« afin de soit le stocker dans un octet si ça tient, soit dans un mot si ça ne tient pas. » :d) ça veut dire que la routine va avoir un type de retour qui dépend directement de la valeur des entrées. À ma connaissance, ce genre de chose, c'est légal uniquement dans les logiciels de preuve formel style coq.

Cela mis à part, le plus simple c'est de faire le calcul exact, en prévoyant suffisamment de place pour stocker le résultat de l'addition quelque soit les entrées. En faisant comme ça, c'est facile de voir si une entrée tient dans une certaine taille ou si on a un overflow à coup de masque/décalage + test (dans un saut conditionnel par exemple).

Epoch
Epoch
Niveau 10
25 octobre 2009 à 02:49:05

Chris, je pense avoir essayé comme tu as dis ceci dit un détaillement de ta méthode serait réellement bienvenue ^^), mais je n'y suis pas arrivé (y'avait toujours des incohérences. Et je confirme ce que tu dis, ça n'est pas possible en ASM 8086 de comparer des mots avec des octets.)

Ceci dit, le problème, c'est que le prof peut avoir envie de tester d'autres valeurs signées, comme des positifs avec des négatifs puis des positifs entre eux puis des négatifs entre eux...

Enfin j'ai pensé à une autre méthode, que je vais essayer demain (pas fou, j'vais pas faire de l'ASM à 3h du mat O_o)

Epoch
Epoch
Niveau 10
25 octobre 2009 à 11:23:38

Bon, voici le code, à titre indicatif (si quelqu'un a la même difficulté, il pourra peut-être pointer ici grâce à Google.

Voici donc comment tester un dépassement de capacité en général :

MOV AX,0
MOV BX, d0
MOV CX, d1
MOV AX,d0
ADD AX,d1
JMP verif
; Ici, tout en sauvegardant temporairement les valeurs de d0 et d1 dans les registres,
; j'accumule les valeurs dans AX pour proceder ensuite a des verifications :

verif:

CMP AX,0
JL resultatnegatif
JMP resultatpositif
; Je verifie ici que AX est positif ou negatif.

resultatnegatif:
;Si AX est negatif
NEG AX
CMP AH,0
JE stockageoctet

resultatpositif:
;Si AX est positif
CMP AH,0
JE stockageoctet
JMP alternative

stockageoctet:
;Si je suis ici, c'est qu'on peut stocker dans un octet. C'est donc ce qui va se faire.
JMP Exceptiondesecurite
;Je controle l'exception de securite (la raison est indiquee dans le TP redige)
ExceptionControlee:
MOV d2, AL
ADD BX, CX
JS inversesigne
;Si la valeur du calcul des variables stockees auparavant est negative (SF=1), alors on inverse le signe
JMP fin
inversesigne:
NEG d2
JMP fin

Exceptiondesecurite:
CMP d2, 128
JGE alternative
JMP ExceptionControlee
;En fonction de la verification de l'exception, je prends soit l'alternative, soit je retourne
;dans le stockage de l'octet.

alternative:
MOV d3, AX
ADD BX,CX
JS inversesigne2
JMP fin
inversesigne2:
NEG d3
JMP fin
;Si je suis ici, c'est que la valeur ne peut tenir que dans un mot.

;C'est fini (et moi, je vais me prendre un cachet d'aspirine.)

Les commentaires parlent d'eux-mêmes :)

Sous forums
  • Aide à l'achat Mac
  • Macintosh
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Steam Deck
  • Hardware