Vous êtes sur la page 1sur 3

La Directive ASSUME est utilisé pour spécifier tel registre de segment est utilisé par tel segment.

Exemple :

Soit deux segment data1 et data2 qui contient deux étiquetes respectivement A et B.
data1 segment
A db "ABCD"
data1 ends

data2 segment
B db "EFGH"
data2 ends

La question comment on peut adresser en mémoire A=[0000h] et B=[0000h] ?

Réponse : pour adresser A et B en mémoire on aurra besoin deux numéros de segments pour cela on
va utiliser deux registres de segments DS pour data1 et ES pour data2 pour faire ça on va utiliser la
directive assume.
ASSUME DS:data1,ES:data2
Donc ça signfier que pour adresser A et B on utilise respectivement les adresses logiques suivantes :
DS:[0000h] et ES:[0000h]

Exemple :

Soit le programme prog.asm suivant:


data1 segment
A db "ABCD"
data1 ends

data2 segment
B db "EFGH"
data2 ends

stack segment stack


dw 128 dup(0)
stack ends

code segment
ASSUME DS:data1,ES:data2,CS:code
start:
mov ax, data1
mov ds, ax
mov ax, data2
mov es, ax
mov al,A
mov bl,B
mov ax, 4c00h ; exit to operating system.
int 21h
code ends
end start ; set entry point and stop the assembler.
Après génération de l’exécutable comme il indique figure suivant on aura dans le registre AL la valeur
de l’adresse DS:[0000h] et dans registre BL la valeur de l’adresse ES :[0000h] elle est claire avant
l’instruction mov BL,[0000] on a ES : qui signifier que l’adresse dans l’instruction suivant sera calculé
par rapport ES.

Le même exemple on pourra l’utiliser en MASM


Pour générer le fichier PROG.LST qui contient le programme avec le programme en Hexa
C:\ > masm PROG.ASM ,,l;
Pour générer l’exécutable qui contient le code qui sera chargé directement en mémoire
C:\ > link PROG;
Qui on pourra l’ouvrir avec emu8086 comme suit :

Vous aimerez peut-être aussi