Que signifie réellement "ASSUME" dans TASM ?

Signaler
Messages postés
5
Date d'inscription
mercredi 13 octobre 2004
Statut
Membre
Dernière intervention
13 octobre 2004
-
cs_fiduce
Messages postés
3
Date d'inscription
mercredi 10 novembre 2004
Statut
Membre
Dernière intervention
10 novembre 2004
-
Que signifie réellement --> assume CS:code , DS:data ???

Puisque, dans le code, on écrit quand meme MOV AX, data et MOV DS, AX. Est-ce utilde d'écrire "assume" en début de programme? Je n'en comprends pas vraiment l'utilité.

2 réponses

Messages postés
1466
Date d'inscription
vendredi 2 janvier 2004
Statut
Modérateur
Dernière intervention
14 février 2014
1
salut,

c comme une déclaration et une instanciation ( orthographe a voir )

du meme genre que:
func PROTO :DWORD

func PROC p1:DWORD
ret
func ENDP

si tu connais Masm, on retrouve le mot ASSUME afin de pouvoir utiliser des structures.

MYTYPE MyStruc

lea eax,[MyStruc]

ASSUME eax:PTR MYTYPE
mov [eax].strucelem1
ASSUME eax:NOTHING

@++
Messages postés
3
Date d'inscription
mercredi 10 novembre 2004
Statut
Membre
Dernière intervention
10 novembre 2004

Pas sûr que la réponse précédente soit exacte ...
J'ai pas fait d'assembleur depuis une quinzaine d'années, mais je crois que ASSUME est davantage une "directive d'assemblage" permettant d'indiquer à l'assembleur comment calculer les déplacements (dans le cas où le segment base est implicite). En gros, ça permet de dire à l'assembleur (indépendament de la valeur réelle contenue dans CS ou DS) quelle base utiliser quand un MOV est fait (avec le segment data comme base) ou quand un saut court est fait (avec CS par défaut).
On peut d'ailleurs s'amuser à modifier la valeur de DS (sans en informer l'assembleur) ... résultat : les déplacements restent calculés en fonction de la distance au label spécifié dans la clause ASSUME ...