Vous êtes sur la page 1sur 63

PROGRAMMATION EN

LANGAGE D'ASSEMBLAGE

Clément AMISI, M.Eng


Sous la supervision du
Prof.Dr.Ir. Kasengedia Motumbe Pierre
• Présence en classe 10%
• Devoir 10%
• Interrogation 20%
• Projet en groupe 30%
• Examen final 30%
NB
- Il est vivement recommandé de lire les notes de cours avant chaque séances. De même, le
travail en groupe est vivement recommandé.
- Certaines parties de la présentation resteront en anglais mais les explications seront données
en français. L’anglais reste incournable dans le domaine informatique. Certains termes traduits en
fraçais perdent parfois leurs vrai sens d’origine. Les bons livres sont aussi en anglais!

Copyright© Clement Amisi Organisation de calculateurs Slide 2/63


Assistants:
• KAFINGA David, BSc.
• MAYOMBO Jacques, BSc.
• MBAMBA Emmanuel, BSc.

Copyright© Clement Amisi Organisation de calculateurs Slide 3/63


• Préliminaire
• Assambleur, Machine, et Langage de haut niveau
• Outils de programmation en langage d'assemblage
• Vue du programmeur d'un système informatique
• Processeur Intel 8086
• Séances Labos
• Projets

Copyright© Clement Amisi Organisation de calculateurs Slide 4/63


• Obejectifs: élargir l’intérêt et les connaissances des étudiants
sur…
o Organisation de base du système informatique
o Architecture du processeur Intel IA-32
o Comment écrire des programmes en langage assembleur
o Comment les langages de haut niveau se traduisent en langage d'assemblage
o Interaction entre les programmes en langage assembleur, les bibliothèques, le
système d'exploitation et le matériel
o Fonctionnement des interruptions, des appels système et des gestionnaires

• Prérequis
o L'étudiant doit être capable de programmer en toute confiance dans au moins
un langage de programmation de haut niveau, tel que Java, C++ ou C.

Copyright© Clement Amisi Organisation de calculateurs Slide 5/80


Copyright© Clement Amisi Organisation de calculateurs Slide 6/63
• Préliminaires
• Assambleur, Machine, et Langage de haut niveau
• Outils de programmation en langage d'assemblage
• Vue du programmeur d'un système informatique
• Processeur Intel 8086
• Séances Labos
• Projets

Copyright© Clement Amisi Organisation de calculateurs Slide 7/63


• Qu'est-ce que le langage d'assemblage?
• Pourquoi apprendre le langage d'assemblage?
• Qu'est-ce que le langage machine?
• Quel est le lien entre l'assemblage et le langage machine?
• Qu'est-ce qu'un assembleur?
• Comment l'assemblage est-il lié au langage de haut niveau?
• Le langage d'assemblage est-il portable?

Copyright© Clement Amisi Organisation de calculateurs Slide 8/63


Applications

High-level languages
Machine-independent Machine-level languages
Machine-specific Assembly language Low-level languages

Machine languages

Microprogram control

Hardware

Copyright© Clement Amisi Organisation de calculateurs Slide 9/63


• Langage Machine
o Natif d'un processeur: exécuté directement par le matériel
o Les instructions se composent de code binaire: 1s et 0s
• Langage d'assemblage
o Un langage de programmation qui utilise des noms symboliques pour représenter des
opérations, des registres et des emplacements de mémoire.
o Langage légèrement supérieur
o La lisibilité des instructions est meilleure que le langage machine
o Correspondance individuelle avec des instructions en langage machine
• Les assembleurs traduisent l'assemblage en code machine
• Les compilateurs traduisent des programmes de haut niveau en code
machine
o Soit directement, soit
o Indirectement via un assembleur

Copyright© Clement Amisi Organisation de calculateurs Slide 10/63


Copyright© Clement Amisi Organisation de calculateurs Slide 11/63
• Chaque commande d'un programme est appelée une instruction
(elle indique à l'ordinateur ce qu'il doit faire).
• Les ordinateurs ne traitent que des données binaires, les
instructions doivent donc être au format binaire (0 et 1).
• L'ensemble de toutes les instructions (sous forme binaire)
constitue le langage machine de l'ordinateur. Ceci est également
appelé jeu d'instructions.

Copyright© Clement Amisi Organisation de calculateurs Slide 12/63


• Les instructions en langage machine sont généralement
composées de plusieurs champs. Chaque champ spécifie des
informations différentes pour l'ordinateur. Les deux principaux
domaines sont:
• Opcode champ qui représente le code d'opération et spécifie
l'opération particulière à effectuer.
o Chaque opération a son opcode unique..
• Operands champs qui spécifient où obtenir les opérandes
source et destination pour l'opération spécifiée par l'opcode.
o La source / destination des opérandes peut être une constante, la
mémoire ou l'un des registres à usage général.

Copyright© Clement Amisi Organisation de calculateurs Slide 13/63


Copyright© Clement Amisi Organisation de calculateurs Slide 14/63
English: D is assigned the sum of A times B plus 10.

High-Level Language: D = A * B + 10
Une déclaration dans une langue de haut niveau est généralement traduite
en plusieurs instructions au niveau de la machine

Intel Assembly Language: Intel Machine Language:


mov eax, A A1 00404000
mul B F7 25 00404004
add eax, 10 83 C0 0A
mov D, eax A3 00404008

Copyright© Clement Amisi Organisation de calculateurs Slide 15/63


• La traduction de programmes écrits en langages de haut niveau
en programmes en langage machine n'est pas un mappage un
à un
• Une instruction écrite en langage de haut niveau (généralement
appelée instruction) sera traduite en une ou plusieurs
instructions en langage machine

Copyright© Clement Amisi Organisation de calculateurs Slide 16/63


• Le développement du programme est plus rapide
o Instructions de haut niveau: moins d'instructions à coder
• La maintenance du programme est plus facile
o Pour les mêmes raisons ci-dessus
• Les programmes sont portables
o Contiennent peu de détails dépendant de la machine
o Peut être utilisé avec peu ou pas de modifications sur différentes
machines
o Le compilateur se traduit dans le langage machine cible
o Cependant, les programmes en langage d'assemblage ne sont pas
portables

Copyright© Clement Amisi Organisation de calculateurs Slide 17/63


• Accessibilité au matériel du système
o Le langage d'assemblage est utile pour implémenter le logiciel système
o Également utile pour les petites applications système embarquées
• Efficacité spatiale et temporelle
o Comprendre les sources d'inefficacité des programmes
o Performances du programme de réglage
o Écrire du code compact
• L'écriture de programmes d'assemblage donne au programmeur la
compréhension approfondie nécessaire du jeu d'instructions et de la
façon d'en concevoir un.
• Pour pouvoir écrire des compilateurs pour les Langages de haut
niveau, nous devons maîtriser le langage machine. La
programmation d'assemblage offre cette expérience

Copyright© Clement Amisi Organisation de calculateurs Slide 18/63


• Quelques types d'applications représentatifs :
Type of Application High-Level Languages Assembly Language
Business application software, written for Formal structures make it easy to Minimal formal structure, so one must be
single platform, medium to large size. organize and maintain large sections of imposed by programmers who have
code. varying levels of experience. This leads to
difficulties maintaining existing code.

Hardware device driver. Language may not provide for direct Hardware access is straightforward and
hardware access. Even if it does, simple. Easy to maintain when programs
awkward coding techniques must often be are short and well documented.
used, resulting in maintenance difficulties.

Business application written for multiple Usually very portable. The source code Must be recorded separately for each
platforms(different operating systems). can be recompiled on each target platform, often using an assembler with a
operating system with minimal changes. different syntax. Difficult to maintain.

Embedded system and computer games Produces too much executable code, and Ideal, because the executable code is
requiring direct hardware access. may not run efficiently. small and runs quickly.

Copyright© Clement Amisi Organisation de calculateurs Slide 19/63


• Préliminaire
• Assambleur, Machine, et langage de haut niveau
• Outils de programmation en langage d'assemblage
• Vue du programmeur d'un système informatique
• Processeur Intel 8086
• Séances Labos
• Projets

Copyright© Clement Amisi Organisation de calculateurs Slide 20/63


• Des outils logiciels sont nécessaires pour l'édition, l'assemblage, la
liaison et le débogage des programmes en langage assembleur
• Un assembleur est un programme qui convertit les programmes de
code source écrits en langage assembleur en fichiers objets en
langage machine
• Des assembleurs populaires ont émergé au fil des ans pour la famille
de processeurs Intel. Ceux-ci inclus …
o TASM (Turbo Assembler from Borland)
o NASM (Netwide Assembler for both Windows and Linux), and
o GNU assembler distributed by the free software foundation
o MASM(Microsoft Macro Assembler)
Copyright© Clement Amisi Organisation de calculateurs Slide 21/63
• You need a linker program to produce executable files
• It combines your program's object file created by the assembler
with other object files and link libraries, and produces a single
executable program
• LINK32.EXE is the linker program provided with the MASM
distribution for linking 32-bit programs
• We will also use a link library for input and output
• We will used DOSBOX for coding
• Works in Win32 console mode under MS-Windows

Copyright© Clement Amisi Organisation de calculateurs Slide 22/63


Source Object
File Assembler File

Source Object Executable


File Assembler File Linker
File

Source Object Link


File Assembler File Libraries

A project may consist of multiple source files


Assembler translates each source file separately into an object file
Linker links all object files together with link libraries
Copyright© Clement Amisi Organisation de calculateurs Slide 23/63
• Permet de tracer l'exécution d'un programme
• Vous permet de visualiser le code, la mémoire, les registres,
etc.
• Exemple: débogueur emu8086

Copyright© Clement Amisi Organisation de calculateurs Slide 24/63


• Vous permet de créer des fichiers source en langage assembleur
• Certains éditeurs fournissent des fonctionnalités de coloration syntaxique
et peuvent être personnalisés en tant qu'environnement de
programmation

Copyright© Clement Amisi Organisation de calculateurs Slide 25/63


• Préliminaires
• Assambleur, Machine, et Langage de haut niveau
• Outils de programmation en langage d'assemblage
• Vue du programmeur d'un système informatique
• Processeur Intel 8086
• Séances Labos
• Projets

Copyright© Clement Amisi Organisation de calculateurs Slide 26/63


Augmentation du Programmes d'application
niveau d'abstraction Langage de haut niveau Niveau 5

Langage d'assemblage Niveau 4

Système d’exploitation
Niveau 3

Architecture Jeu d’instructions


Niveau 2

Microarchitecture Niveau 1
Chaque niveau cache les
Circuit logique Niveau 0 détails du niveau inférieur

Copyright© Clement Amisi Organisation de calculateurs Slide 27/63


• Programmes d’application(Niveau 5)
o Écrit dans des langages de programmation de haut niveau
o Tels que Java, C ++, Pascal, Visual Basic. . .
o Les programmes se compilent au niveau du langage assembleur (niveau 4)
• Langage d'assemblage (niveau 4)
o Les mnémoniques d'instruction sont utilisés
o Fait une correspondance individuelle avec le langage machine
o Appelle les fonctions écrites au niveau du système d'exploitation (niveau 3)
o Les programmes sont traduits en langage machine (niveau 2)
• Système d'exploitation (niveau 3)
o Fournit des services aux programmes de niveau 4 et 5
o Traduit pour s'exécuter au niveau des instructions de la machine (niveau 2)

Copyright© Clement Amisi Organisation de calculateurs Slide 28/63


• Architecture Jeu d’instruction (Niveau 2)
o Spécifie le fonctionnement d'un processeur
o Les instructions de la machine, les registres et la mémoire sont exposés
o Le langage machine est exécuté par le niveau 1 (microarchitecture)
• Microarchitecture (Niveau 1)
o Contrôle l'exécution des instructions machine (niveau 2)
o Implémenté par logique numérique (niveau 0)
• Logique numérique (Level 0)
o Met en œuvre la microarchitecture
o Utilise des portes logiques numériques
o Les portes logiques sont implémentées à l'aide de transistors
Copyright© Clement Amisi Organisation de calculateurs Slide 29/63
• Collection de l'ensemble d'instructions de montage / machine
de la machine
• Ressources de la machine pouvant être gérées avec ces
instructions
o Mémoire
o Registres accessibles aux programmeurs.
• Fournit une interface matériel / logiciel

Copyright© Clement Amisi Organisation de calculateurs Slide 30/63


Copyright© Clement Amisi Organisation de calculateurs Slide 31/63
• Préliminaires
• Assambleur, Machine, et Langage de haut niveau
• Outils de programmation en langage d'assemblage
• Vue du programmeur d'un système informatique
• Processeur Intel 8086
• Séances Labos
• Projets

Copyright© Clement Amisi Organisation de calculateurs Slide 32/63


• Pourquoi? CPU
o Optimisation du temps de traitement
o Compréhension de l'interaction matérielle et logicielle

Hard disk RAM Cache Registers

• C’est quoi un régistre?


o Zone / emplacement de stockage le plus rapide
o Facilement accessibles par le processeur car ils sont intégrés au processeur.
• Quelle est l'origine des registres? Record or collection of information
o Intel 4004 in 1971, Federico Faggin, Marcian E. (Ted) Hoff et Stan Mazor
Copyright© Clement Amisi Organisation de calculateurs Slide 33/63
CPU
There are 14 types of register
1. Accumulator ← Input/output, Operations, a, ax, eax, rax General
2. Base ← Holds address of data b, bx, ebx, rbx Purpose
3. Counter ← Counts, used in loop cx, ecx, rcx Registers
4. Data ← Holds data for output d, dx, edx, rdx X = Extended to 16 bits
5. Code Segment ← Holds address of code segment E = extended to 32 bits
R = Rich Register to 64 bits
6. Data Segment ← Holds address of data segment Segment
7. Stack Segment ← Holds address of stack segment ADD dl, bl
ADD 3, bl Registers
8. Extra Segment ← Holds address of data segment ADD dl, 3
Index
9. Source Index ← Points the source operand Carry
Registers
10. Destination Index ← Points the destination operand 1
1 Special
11. Instruction Pointer ← Holds the next instruction 1
12. Stack Pointer ← Points current top of stack
Purpose
0 Registers
13. Flag Registers ← Points current status of the program
14. Base Pointer ← Base of the top of stack

Copyright© Clement Amisi Organisation de calculateurs Slide 34/63


• Addressing Modes Registers Addressing: Both operands are registers Opcode
o Ways/Models to access data (Operational Code) 2+2
Immediate Addressing: One Operand I constant term Opcode Reg1, Reg2
Memory Addressing: Access static data directly Operands
Opcode Reg1, Reg2
• Data Transfer Instruction 1 = Input a character with echo
2 = Output/Print a single character ‘a’
Add DL, A
Mov DL, 2 DL, ‘A’ Opcode Reg, Value of Opcode Value, Reg
8 = Input a character without echo Add, 2 ADD 2, DL
Mov Ah, 2 Service Routine 9 = Print collection of characters ‘abcd’ Opcode Reg, [Address]
• Interrupt 4ch = Exit
String Add DI, [address]
• Stop current program and allow microprocessor to access hardware to take input or give output
INT 21 = Interrupt for Text Handling
Example 1: Output Example 2: Output
INT 20H = Interrupt for video/Graphics Handling
Mov ah, 2 Mov ah, 1
• ASCII Code INT 21H INT 21H
(American Standard Code for Information Interchange) A = 65 B = 66 Z = 90
By: American Standards Association (ASA) A = 91 b = 92 Z = 122
Published in 1963 0 = 48 1 = 49 9 = 57
Next Line Feed = 10
Carriage Return = 13
Copyright© Clement Amisi Organisation de calculateurs Slide 35/63
; Program to print single character on screen RAM
dosseg ← DOS segment Manages the arrangement of segments in a program
.model small
data
← Model Directive Specifies the total mount of memory the program would take.
.stack 100h ← Stack Segment Directive Specifies the storage for stack
code
.data ← Data Segment Directive
;variable are defined here stack
.code ← Code Segment Directive
Mov dl ‘A’ Mov dl, 2
Main proc Tiny Code + Data <= 64 KB
Mov dl, AX Mov dh, al Small Code <= 64KB, Data <= 64KB
Mov ‘B’, ‘A’ Medium Code = Any size, Data <= 64 KB
Mov dl, ‘A’ Compact Code <= 64KB, data = any size
Mov 2, 3
Mov ah, 2 Large Code = any size, Data = any size
Mov dl, AX Huge Code = size, Data = any size
INT 21h ;here we write our program, executable instructions
Mov ah, 4CH Ah Al Syntax Rules
INT 21h  Space after Opcode
 One operand must be general purpose register
Main enp
 Operands must be of same size
End Main Dh Dl  Comma between operands
 Comment must start with a semi colon

Copyright© Clement Amisi Organisation de calculateurs Slide 36/63


• What is DOSBox and why are we installing it?
o Emulator
o In July 22, 2002
• Why DoBox? Why not MASM Emulator?
Why not Emu8086? Why not Visual Studio with
Irvine Library?
o Free Software
o Light, Simple and easy to use.
o Run on every environment-Windows, mac, Linux and Android
o Can learn debugging DOSbox Commands:
o Can grip on syntax • Edit Filename.asm
• Download link? • MASM Filename;
o https://www.dosbox.com/download.php?main=1 • LINK Filename.obj
• Filename.exe
Copyright© Clement Amisi Organisation de calculateurs Slide 37/63
• Préliminaires
• Assambleur, Machine, et Langage de haut niveau
• Outils de programmation en langage d'assemblage
• Vue du programmeur d'un système informatique
• Processeur Intel 8086
• Séances Labos
• Projets

Copyright© Clement Amisi Organisation de calculateurs Slide 38/63


Copyright© Clement Amisi Organisation de calculateurs Slide 39/63
• Where to initialize variables in program? dosseg
• Variables are defined in .data directive of program structure .model small
Initializer Directive .stack 100h
• How to initialize variables?
Directive .data
• VariableName dataSize Value
Var1 db 4 AL, BL, CL, DL…
Sub, Add, DIV, MUL .code data
Var1 db ? Mov
main proc
Var1 db ‘1’ $:Terminator,
POP, PUSH code
Var1 db ‘A’ end point of string
main endp
var1 db ‘123$’
$ must be used in end of string Don't use reserved
end main
var1 db ‘hello World$’ Keywords as
VariableName
D8 Define Byte 1 byte, 8bits
• Initializer Directive DB Define Word 2 bytes, 16 bits
DD Define Double word 4 bytes, 32 bits
DQ Define QuadWord 8 bytes, 64 bits
DI Define TenBytes 10 bytes, 80 bits

Copyright© Clement Amisi Organisation de calculateurs Slide 40/63


It moves the memory
location of @DATA into the
AX register ()16 bit register).

Moves data address to ds so


that data segment gets
initialized as heap memory to
access variables fast

Offset
Holds the beginning address
of variable as 16 bits

LEA
Load Effective Address

It is an indirect instruction
used as a pointer in which
first variable points the
address of second variable

Copyright© Clement Amisi Organisation de calculateurs Slide 41/63


• Please write a program to print two different strings on two
different lines

Copyright© Clement Amisi Organisation de calculateurs Slide 42/63


• Series of instructions that is General purpose registers,
repeated until a terminating Main purpose is to be used for a loop
condition is reached.
Mov dx, ‘a’ LabelName: Counter Register Cx = 10
Mov CX, 10 Cx = 9
Mov ah, 2 Cx = 8
Int 21h Mov dx, ‘a’
Mov ah, 2 Works on
Int 21h Decrement
By 1
Mov:
Loop LabelName Cx = 0
Label Rules:
Test: 1. A label can be placed at the beginning of statement, because the
Label Syntax Test1: Label is assigned the current value of line.
2. Label name must not be a reserved word e.g. MOV, Add, DB and DW
T1 3. Colon: must be used with label while initializing but not while calling
1Test:

Copyright© Clement Amisi Organisation de calculateurs Slide 43/63


Copyright© Clement Amisi Organisation de calculateurs Slide 44/63
• Write a program to print capital letters from A to Z using Loop

Copyright© Clement Amisi Organisation de calculateurs Slide 45/63


• Why do we study flag register basically?
• Theoretically?
1. What controls the operations of CPU? Mov dl, 12
2. What handles the status of operations? Mov dx, 10

• In programming?
1. Conditional Jump Mov dx, ‘a’
Mov ax, 2
2. Which number is lesser, greater, or equal Int 21h

Copyright© Clement Amisi Organisation de calculateurs Slide 46/63


CF

• Is register that contains the current state of processor


• Useful bits = 9
• Carry Flag (CF) Last carry out
1111111
1: When there is last carry out 1111111 255
0: When there is not last carry out 0000011 3
0000010

Copyright© Clement Amisi Organisation de calculateurs Slide 47/63


PF CF

1: When there is even number of bits


0: When there is not even number of bits 1111111
255
1111111
PF 0000011
0000010
3

Copyright© Clement Amisi Organisation de calculateurs Slide 48/63


AF PF CF

1: When 3rd bit carry exits


0: When 3rd bit carry doesn't exit Every 3rd bit carry

1111111
1111111 255
0000011 3
0000010

Copyright© Clement Amisi Organisation de calculateurs Slide 49/63


ZF AF PF CF

00000001 1
1:When result is zero 00000001 1
0: When result is not zero 00000000 0

Copyright© Clement Amisi Organisation de calculateurs Slide 50/63


SF ZF AF PF CF

1:When result is negative 00000011 3


0: When result is positive 00000111 7
00000100 -4
SF

Copyright© Clement Amisi Organisation de calculateurs Slide 51/63


TF SF ZF AF PF CF

• System use it when debugging is required;


1: When single step mode (debugging) is needed
0: When single step mode (debugging) is not needed

Copyright© Clement Amisi Organisation de calculateurs Slide 52/63


IF TF SF ZF AF PF CF

1: When Interrupt is called


0: When interrupt is not called

Int 21h

Copyright© Clement Amisi Organisation de calculateurs Slide 53/63


DF IF TF SF ZF AF PF CF

‘hello$’
DF
1: Strings automatically decrements the address
0: Strings doe not automatically decrement the address

Copyright© Clement Amisi Organisation de calculateurs Slide 54/63


OF DF IF TF SF ZF AF PF CF

1 if signed overflow occurred, otherwise it is 0.


1111 1111 1111 1111
+ 0000 0000 0000 0001
1 0000 0000 0000 0000

Copyright© Clement Amisi Organisation de calculateurs Slide 55/63


• The DEBUG program provides an environment in which a
program may be tested.
• The user can step through a program, and display and change
the registers and memory.
• It also possible to enter assembly code directly, which DEBUG
converts to machine code and stores in memory.
• We use DEBUG to demonstrate the way instruction affect the
flags.

Copyright© Clement Amisi Organisation de calculateurs Slide 56/63


• Write a program to check Flags

Copyright© Clement Amisi Organisation de calculateurs Slide 57/63


• Jump
• Unconditional jump
• Conditional jump
• Compare

Copyright© Clement Amisi Organisation de calculateurs Slide 58/63


• Is a instruction to control the program flow
• Unconditional Jump Jump to Label without any condition
Syntax JMP label

L1:
Mov dl, ‘a’
Mov ah, 2
Int 21h

Jmp L1

Copyright© Clement Amisi Organisation de calculateurs Slide 59/63


 Conditional Jump Jump to label when condition occur
Syntax Opcode Label

Copyright© Clement Amisi Organisation de calculateurs Slide 60/63


JE, JZ Jump if equal, jump if zero
JNE, JNZ Jump if not equal, jump if not zero
JL, JB Jump if less, jump if below
JLE, JBE Jump if less or equal, jump if below or equal
JG, JA Jump if greater, jump if above
JGE, JAE Jump if register or equal, jump if above of equal

JC, JP, JA, JZ, JS, JT, JI, JD, JO

Copyright© Clement Amisi Organisation de calculateurs Slide 61/63


• Program to print the input number is equal or not to given
number in program

Copyright© Clement Amisi Organisation de calculateurs Slide 62/63


• Les défenses sont prévues pour ce 14 Mai 2021, de 8h à 16h
au B-16.
• Le rapport physique doit être déposé au bureau par le chef du
group ainsi que le rapport soft + diapos sont à envoyer par le
chef du groupe au plutard le 10 Mai avant minuit à l’adresse
suivante : hwcsmathinfopkm@gmail.com
• Aucun travail ne sera reçu après le 14 Mai. Qu'on se le dise!

Copyright© Clement Amisi Organisation de calculateurs Slide 63/63

Vous aimerez peut-être aussi