Vous êtes sur la page 1sur 4

Squelette du langage Assembleur avec Emu8086

;EMU8086 a une disposition de segments par défaut. Il faut un programme de plus de 64Ko de code
ou de données pour devoir manipuler les segments..

TITLE prog1 ; donner un nom au programme

;Directives segment permettent de nommer des segments. On met les directives pour réserver de
l'espace mémoire

Pile segment stack

dw 256 dup(0)

; base:

Pile ends

Extra SEGMENT ; On met les directives pour déclarer les variables (les chaînes de
Caractères).

Extra ENDS

Donnee segment

; ici on declare les variable

var0 db 0F3h ;var0 est un byte (octet) initialisé à F3

var1 dw 0F3h ;var1 est un word (mot=2 octets) initialisé à F3

var2 dd F7A2h ;var2 est un double word (double mot) initialisé à F7A2

var3 db ? ;var3 est un byte non initialisé: de valeur initiale quelconque

var4 dw ? ;var4 est un word (16 bits)

var5 db 5 dup (?) ;var5 est un tableau de 5 bytes non initialisés

var6 dw 10 dup (15) ;var6 est un tableau de 10 bytes initialisés à 15

Tab DB 18H, 15H, 13H ; définit un tableau de 3 cases (3 octet) qui démarre à partir de
l'adresse TAB.

; De manière générale:

; DB : 1 byte (8 bits) (Declare Byte)

; DW : 1 word (16 bits) (Declare Word)

1
; DD : 2 words (32 bits) (Declare Double)

; DF,DP : 6 bytes

; DQ : 8 bytes (64 bits)

; DT : 10 bytes

; Les constantes peuvent être écrites en:

;- décimal: 1, 2, 3, 123, 45

;- hexadécimal : 1h,2h,3h,12h,0Fh,0AD4h (noter la présence du 0 quand le

; premier chiffre du nombre en hexadécimal commence par une lettre)

;- binaire : 1b,0b,1010b,111101b

msg db "Appuyer sur une touche: ...$"

Acceuil db "ISTIC $"

Donnee ends

;Pour le 8086, l’entête du programme dit quelle valeur doit avoir CS:IP.

;Les autres segments doivent êtres initialisés par le programme

;(exemple: MOV AX,MDonnee suivi de MOV DS,AX).

LeCode segment

; ici on déclare les fonctions publiques, externe,locale, procedure...

Debut: ; Etiquette

assume CS:LeCode ,DS:Donnee, SS:Pile; La directive assume aide l’assembleur. Elle fait le

;lien entre les segments déclarés et les registres CS,DS, ES et SS.

;La directive ASSUME permet d'indiquer à l'assembleur quel est le segment de données et

;celui de codes (etc...), afin qu'il génère des adresses correctes

; initialisation des segment registers

mov ax, Donnee

mov ds, ax ; DS contient l'adresse du debut du segment de donnée

; par rapport au debut de la RAM

;mov es, ax

;mov ax, Pile

;mov ss, ax ; initialise le segment de pile

2
; mov sp, base ; copier l'adresse de la base de la pile dans SP

; add your code here

mov ah, 01h

int 21h

mov bx,var1

mov dl,bh ; 'A'

mov ah,02h

int 21h

add var0,2

mov dl,var0

mov ah,02

int 21h

neg var0

mov dl,var0

mov ah,02

int 21h

mov ax,0FAE8h

mul var0

mov dl,al

mov ah,02

int 21h

; lea dx, msg ; affiche la chaine de départ

; Chargement d’une adresse effective

mov dx, offset msg

3
mov ah,09

int 21h

mov ah, 01h

int 21h

mov bx,var1

add bl,al

mov dl,bl

mov ah,02h

int 21h

mov ah,0ch ; saisie d'une chaine de caractère

mov al,0ah

int 21h

fin: ;Etiquette

; mov ax, 4c00h ; exit to operating system.

; int 21h

; ou bien

int 20h

; ret

LeCode ends

end Debut