Que signifie réellement "ASSUME" dans TASM ?

hamburger_de_dinde Messages postés 5 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 13 octobre 2004 - 13 oct. 2004 à 18:32
cs_fiduce Messages postés 3 Date d'inscription mercredi 10 novembre 2004 Statut Membre Dernière intervention 10 novembre 2004 - 10 nov. 2004 à 16:46
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

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

@++
0
cs_fiduce Messages postés 3 Date d'inscription mercredi 10 novembre 2004 Statut Membre Dernière intervention 10 novembre 2004
10 nov. 2004 à 16:46
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 ...
0
Rejoignez-nous