P. 1
Programmation Assembleur

Programmation Assembleur

|Views: 636|Likes:
Publié parnapster_studio
by Abdesslem Karim
by Abdesslem Karim

More info:

Published by: napster_studio on Feb 25, 2010
Droits d'auteur :Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as PDF, TXT or read online from Scribd
See more
See less

01/11/2013

pdf

text

original

Sections

Cours Architecture des Ordinateurs Programmation Assembleur

Jean-Claude Bajard IUT - universit´ Montpellier 2 e

Assembleur

Pentium

Pr´sentation du Pentium e
http://developer.intel.com/design/pentium4/manuals/ ...

Premi`re ann´e e e

2003

2

Assembleur
  ¡

The table below shows the dramatic increases in performance and transistor count of the IA processors over their history, as predicted by Moore’s Law, and also summarizes the evolution of other key features of the architecture.
Table 2-1. Processor Performance Over Time and Other Intel Architecture Key Features
Date of Product Introduction 1978 1982 1985 1989 1993 1995 Perform -ance in MIPs1 0.8 2.7 6.0 20 100 440 Max. CPU Frequency at Introduction 8 MHz 12.5 MHz 20 MHz 25 MHz 60 MHz 200 MHz No. of Transis -tors on the Die
¤

Pentium

Intel Processor 8086 Intel 286 Intel386™ DX Intel486™ DX Pentium® Pentium® Pro Pentium II®
£

Main CPU Register Size2 16 16 32 32 32 32

Extern. Data Bus Size2 16 16 32 32 64 64

Max. Extern. Addr. Space 1 MB 16 MB 4 GB 4 GB 4 GB 64 GB

Caches in CPU Package3 None Note 3 Note 3 8KB L1 16KB L1 16KB L1; 256KB or 512KB L2 32KB L1; 256KB or 512KB L2 32KB L1; 512KB L2

29 K 134 K 275 K 1.2 M 3.1 M 5.5 M

1997

466

266

7M

32

64

64 GB

Pentium® III
NOTES:
¥

1999

1000

500

8.2 M

32 GP 128 SIMD-FP

64

64 GB

Premi`re ann´e e e

1. Performance here is indicated by Dhrystone MIPs (Millions of Instructions per Second) because even though MIPs are no longer considered a preferred measure of CPU performance, they are the only 2003 benchmarks that span all six generations of the IA. The MIPs and frequency values given here correspond to the maximum CPU frequency available at product introduction. 2. Main CPU register size and external data bus size are given in bits. Note also that there are 8 and 16-bit
¢

3

Assembleur
Architectural Features
 

Pentium

Figure 2-1. Embedded Pentium® Processor Block Diagram

Control

1283
¨

Instruction Pointer 64-Bit Data Bus 

Prefetch Buffers Instruction Decode

Bus Unit 

Branch Verification and Target Address Control Unit
V-Pipeline Connection U-Pipeline Connection
!

MMX™ Technology Unit2

Control

Address Address Generate Generate (U Pipeline) (V Pipeline) 
 

Integer Register File
64-Bit 64 Data Bus 


ALU (U Pipeline)
32 32-Bit Addr. Bus 

ALU (V Pipeline)

Barrel Shifter
Multiply 80 32 


Data APIC5 Control
32 
  ¨

32

TLB

32

The dual processor configuration allows two embedded Pentium processors to share a single L2 cache for a low-cost symmetric multi-processor system. The two processors appear to the system as a single embedded Pentium processor. Multiprocessor operating systems properly schedule
¡

¦

Premi`re ann´e e e

2003

NOTES: 1. The Code and Data caches are each 8 Kbytes in size on the embedded Pentium® processor (at 100/133/166 MHz). 2. The MMX Technology Unit is present only on the embedded Pentium processor with MMX™ technology. 3. The internal instruction bus is 256 bits wide on the embedded Pentium processor. 4. Dual processing is not present on the embedded Pentium processor with Voltage Reduction Technology or the low-power embedded Pentium processor with MMX technology. 5. The APIC is not present on the embedded Pentium proces sor with Voltage Reduction Technology.
£ ¤ ¥ 

Data Cache 16 Kbytes1 

!

©

©

32-Bit Address Bus 
©

Page Unit  

DP Logic4
§

Branch Prefetch Target Buffer Address  

¢

TLB Code Cache 16 Kbytes1

Control ROM

Floating Point Unit

Control Register File Add Divide 80

32 32

A6105-01

4


Assembleur
  ¢ ¡

Memory pointers
Pentium

Although all of these registers are available for general storage of operands, results, and pointers, caution should be used when referencing the ESP register. The ESP register holds the stack pointer and as a general rule should not be used for any other purpose.
General-Purpose Registers

31

0 EAX EBX ECX EDX ESI EDI EBP ESP

Segment Registers 0 15 CS DS SS ES FS GS 31 31 Status and Control Registers 0 EFLAGS 0 EIP

Figure 3-3. Application Programming Registers

¥

Premi`re ann´e e e

Many instructions assign specific registers to hold operands. For example, string instructions use the contents of the ECX, ESI, and EDI registers as operands. When using a segmented 2003 memory model, some instructions assume that pointers in certain registers are relative to
£ ¤

5

Programmation Assembleur format ATT- GNU
http://www.gnu.org/manual/ ...

Assembleur

Format d’une instruction assembleur (gnu ATT)

Pentium

´tiquette: e

mn´monique e

op´randes e

#commentaires

• ´tiquette: adresse effective de l’instruction, utile pour les branchements e • mn´monique nom g´n´rique donn´ ` une instruction : ADD, JUMP... e e e ea • op´randes arguments de l’instruction : 0, 1 ou 2 e • #commentaires non pris en compte au moment de l’assemblage

Premi`re ann´e e e

2003

7

Assembleur

Type des op´randes e

Pentium

op´rande 1 : source e registre imm´diat e m´moire e registre imm´diat e

op´rande 2 : destination e registre registre registre m´moire e m´moire e

Premi`re ann´e e e

2003

8

register set found in the 8086 and Intel 286 processors and can be referenced with the names AX, BX, CX, DX, BP, SP, SI, and DI. Each of the lower two bytes of the EAX, EBX, ECX, and Assembleur Pentium EDX registers can be referenced by the names AH, BH, CH, and DH (high bytes) and AL, BL, CL, and DL (low bytes).
¨ § ¤ © ¡

31

0

16-bit AX BX CX DX

BH CH DH BP SI DI SP

BL CL DL

Figure 3-4. Alternate General-Purpose Register Names

3.6.2.

Segment Registers

The segment registers (CS, DS, SS, ES, FS, and GS) hold 16-bit segment selectors. A segment selector is a special pointer that identifies a segment in memory. To access a particular segment
2003 9

Premi`re ann´e e e 

AH

AL 

General-Purpose Registers 8 7 16 15 

32-bit EAX EBX ECX EDX EBP ESI EDI ESP

Assembleur

Les modes d’adressages de la m´moire e

Pentium

• absolu => 0x8049514 • registre indirecte : ∗ base => (%eax) ∗ base + d´placement=> 4(%eax) e ∗ base + index * pas + d´placement => dep(base,index,scale) e =>4(%eax,%ebx,2)

Premi`re ann´e e e

2003

10

Base EAX EBX ECX EDX ESP EBP ESI EDI

Index EAX EBX ECX EDX EBP ESI EDI

Scale 1 2

Displacement None

+

*

+

8-bit 16-bit 32-bit

3 4

Offset = Base + (Index ∗ Scale) + Displacement

Figure 5-6. Offset (or Effective Address) Computation

The uses of general-purpose registers as base or index components are restricted in the following manner:
¡ ¡ ¨

• The ESP register cannot be used as an index register. Premi`re ann´e 2003 e 11 • e When the ESP or EBP register is used as the base, the SS segment is the default segment.
©

In all other cases, the DS segment is the default segment.

¦

Assembleur
§

The offset which results from adding these components is called an effective address. Pentium of Each Les modes d’adressages these components can have either a positive or negative (2s complement) value, with the exception of the scaling factor. Figure 5-6 shows all the possible ways that these components can be combined to create an effective address in the selected segment.

¥


§

Scale factor—A value of 2, 4, or 8 that is multiplied by the index value.

¤

Assembleur

Types des instructions

Pentium

• Transfert : mouvement de donn´es, MOV e • • Arithm´tique et logique : ADD, AND... e Contrˆle : o ∗ saut conditionnel ∗ appel de proc´dure e • Interruption : en g´n´ral : int num´ro de 0 ` 255 e e e a

Premi`re ann´e e e

2003

12

All Intel Architecture instruction encodings are subsets of the general instruction format shown in Figure 2-1. Instructions consist of optional instruction prefixes (in any order), one or two Assembleurprimary opcode bytes, an addressing-form specifier (if required) consisting of the ModR/M byte and sometimes the SIB (Scale-Index-Base) instruction machine and an immediate Format d’une byte, a displacement (if required), data field (if required).
¡ ¢ £ ¤

Pentium

Instruction Prefixes Up to four prefixes of 1-byte each (optional) 7

Opcode 1 or 2 byte opcode

ModR/M 1 byte (if required)

SIB 1 byte (if required)

Displacement Address displacement of 1, 2, or 4 bytes or none 3 2 Index Base
¥

Immediate Immediate data of 1, 2, or 4 bytes or none
¥

65 Mod

32 R/M

0

7

6 5

0

Reg/ Opcode

Scale

Figure 2-1. Intel Architecture Instruction Format

2.2. INSTRUCTION PREFIXES • longueur d’une instruction de un ` 16 octets a
The instruction prefixes are divided into four groups, each with a set of allowable prefix codes:

Lock and repeat prefixes. — F0H—LOCK prefix. — F2H—REPNE/REPNZ prefix (used only with string instructions).

Premi`re ann´e e e

2003 — F3H—REP prefix (used only with string instructions).

13

— F3H—REPE/REPZ prefix (used only with string instructions).

Assembleur

Structure d’un programme : les segments

Pentium

• A l’origine un programme comportait au moins trois segments associ´s ` des registres e a (16 bits): ∗ code : CS EIP => .text ∗ donn´es : DS => .data e ∗ pile : SS ESP=> .bss • La gestion de la m´moire est fortement li´e au syst`me d’exploitation. Elle peut e e e ˆtre de deux types : segment´e (8086 avec msdos) ou pagin´e (linux), l’utilisation e e e des regitres ”segment” pour l’adressage physique d´pend de cette gestion (voir doc e Pentium http://developer.intel.com/design/pentium4/manuals/).

Premi`re ann´e e e

2003

14

Assembleur

Structure d’un programme :

Pentium

.data bonjour: .string "hello world!\n" taille: .long . - bonjour .text .globl main main: ## appel syst`me de write () e movl $4, %eax # write () system call movl $1,%ebx # %ebx = 1, fd = stdout leal bonjour, %ecx # %ecx ---> bojour movl taille, %edx # %edx = count int $0x80 # execute write () system call

Premi`re ann´e e e

2003

15

Assembleur

## appel syst`me de exit () e xorl %eax, %eax # %eax = 0 incl %eax # %eax = 1 system call _exit () xorl %ebx, %ebx # %ebx = 0 normal program return code int $0x80 # execute system call _exit ()

Pentium

Premi`re ann´e e e

2003

16

Assembleur

Structure d’un programme : les donn´es e

Pentium

• directives :

.byte .word .long .quad .ascii .string binaire octal d´cimal e hexad´cimal e d´cimal r´el e e ASCII

octet : 8 bits mot : 16 bits double mot : 32 bits 64 bits caract`re ou chaˆ e ıne chaˆ de caract`res termin´e par 0 ıne e e 001110 012345670 1234567890 0x123456789ABCDEF 0f 120.121e-15 ”...”

• valeurs :

Premi`re ann´e e e

2003

17

Programmation Assembleur Les instructions
... ...

Assembleur

Instructions de tranfert : mov

Pentium

mov?

Source,

Destination

• Destination et Source : registres, variables, adresses • Source : imm´diat e

movw movl

$36, %ebx,

%eax %eax

36 → eax ebx

........?.......

....36......... .........12.........

.........12.........

→ eax

Premi`re ann´e e e

2003

19

Assembleur

Instructions de tranfert : mov

Pentium

movl movw movb movw movl

(0x8014), %eax (%ebx), %ax $5, (%ebx) $2, (%ebx) 5(%ebx,%esi,1), %eax

0x8014 0c020381 → eax 8103020c ( ebx 00000012 ) 1201 → eax ????0112 ebx 00000012 → 0x12 05?? ebx 00000012 → 0x12 0200

( ebx 00000012 esi 00000003 ) 20 0510e1a2 ) → eax a2e11005

Premi`re ann´e e e

2003

20

Assembleur

Instructions de tranfert : XCHG, LEA

Pentium

xchg

Source,

Destination

´change le contenu de Destination et de Source e lea M´moire , e Registre

Chargement d’une adresse effective .data table toto .fill .long 9 0x1a 2 5; neuf 5 sur des mots de 2 octets ; adresse donnee + 18

lea toto , %eax eax 00000012 Alors que movl toto, %eax, eax 0000001a

Premi`re ann´e e e

2003

21

Assembleur

Instructions de tranfert : propre au pentium

Pentium

movsx

Destination,

Source

avec MOV la source et la destination sont de mˆme type e ici, la source peut ˆtre d’un type plus petit e SX, signe extension, le signe de la source est conserv´ e movsx %al,%ebx al a3 → ebx ffffffa3 movzx Source Destination, al a3 → ebx 000000a3

ZX, zero extension, movzx %al ,ebx

Premi`re ann´e e e

2003

22

Programmation Assembleur Instructions arithm´tiques e
http://www.gnu.org/manual/ ...

Assembleur

L’addition

Pentium

add

Source,

Destination

• Destination + Source → Destination • Source : imm´diat, registre, m´moire e e • Destination : registre, m´moire e • op´randes : nombres sign´s ou non sign´s e e e • flag : OF, SF, ZF, AF, CF, et PF

Premi`re ann´e e e

2003

24

Assembleur

L’addition (exemple)

Pentium

addl

%eax,

%ebx

eax 00001113 +ebx 000000a9 →ebx 000011bc OF 0 SF 0 ZF 0 0 0 AF 0 0 0 PF 0 1 1 CF 0

eflags

eax 00001113 +ebx f f f f f f f f →ebx 00001112 OF 0 SF 0 ZF 0 0 0 AF 1 0 0 PF 1 1 1 CF 1

eflags

eax f f f f 1113 +ebx a00000a9 →ebx 9f f f 11bc
Premi`re ann´e e e 2003 25

Assembleur

Pentium

OF 0

SF 1

ZF 0

0 0

AF 0

0 0

PF 0

1 1

CF 1

eax f f f f 1113 +ebx f f f f f f f f →ebx f f f f 1112 OF 0 SF 1 ZF 0 0 0 AF 1 0 0 PF 1 1 1 CF 1

eax a0000013 +ebx 800000a9 →ebx 200000bc OF 1 SF 0 ZF 0 0 0 AF 0 0 0 PF 0 1 1 CF 1

Premi`re ann´e e e

2003

26

Assembleur

La soustraction

Pentium

sub

Source,

Destination

• Destination − Source → Destination • Source : imm´diat, registre, m´moire e e • Destination : registre, m´moire e • op´randes : nombres sign´s ou non sign´s e e e • flag : OF, SF, ZF, AF, CF, et PF

Premi`re ann´e e e

2003

27

Assembleur

Incr´menter - D´cr´menter e e e

Pentium

inc dec

Destination Destination

• inc :Destination + 1 → Destination • dec : Destination − 1 → Destination • Destination : registre, m´moire e • flag : OF, SF, ZF, AF et PF, par contre CF n’est pas modifi´ e

Premi`re ann´e e e

2003

28

Assembleur

La multiplication

Pentium

mul Operand Size Byte Word Doubleword Source 1 AL AX EAX Source 2 r/m8 r/m16 r/m32

Source 2 Destination AX DX:AX EDX:EAX

• Source 1 ∗ Source 2 → Destination • Source 2 : registre, m´moire e • Source 1 : registre AL, AX, EAX • Destination : registre AX, DX:AX, EDX:EAX
Premi`re ann´e e e 2003 29

Assembleur

• op´randes : non sign´s e e • flag : OF et CF flags sont mis ` 0 si la partie haute du r´sultat est nulle, a e sinon ils sont mis ` 1. a SF, ZF, AF, et PF ne sont pas d´finis. e

Pentium

Premi`re ann´e e e

2003

30

Assembleur

La multiplication sign´e e

Pentium

imul

Source 2

Source 2 (reg or mem) ∗ AL, AX, or EAX register → AX, DX:AX, or EDX:EAX. CF et OF = 0 si le r´sultat tient dans la partie basse, sinon CF et OF = 1. e • imul Source Destination

Destination (register) ∗ Source (register or memory or imm´diat) → Destination e • imul Source 1 Source 2 Destination

Source 1 (register or memory) ∗ Source 2 (imm´diat) → Destination (register) e • Immediate value is sign-extended to the length of the destination operand format.
Premi`re ann´e e e 2003 31

Assembleur

La division

Pentium

div Operand Size Word/byte Doublew/word Quadw/doublew Dividende AX DX:AX EDX:EAX Diviseur r/m8 r/m16 r/m32

Diviseur Quotient AL AX EAX Reste AH DX EDX Max Quotient 255 65, 535 232 − 1

• Dividende = Diviser ∗ Quotient + Reste

Premi`re ann´e e e

2003

32

Assembleur

La division (suite)

Pentium

• Dividende : AX, DX:AX, EDX:EAX • Diviseur: regitre ou m´moire e • Quotient : AL, AX ou EAX • Rest : AH, DX ou EDX • The CF, OF, SF, ZF, AF, and PF flags are undefined. • Si Quotient trop gros pour AL, AX ou EAX, alors interruption

Premi`re ann´e e e

2003

33

Assembleur

La division sign´e e

Pentium

idiv Operand Size Word/byte Doublew/word Quadw/doublew Dividende AX DX:AX EDX:EAX Diviseur r/m8 r/m16 r/m32

Diviseur Quotient AL AX EAX Reste AH DX EDX Quotient Range −128 to +127 −215 to 215 − 1 −231 to 231 − 1

• Dividende = Diviseur ∗ Quotient + Reste

Premi`re ann´e e e

2003

34

Assembleur

La division sign´e (suite) e

Pentium

• Dividende, Diviseur, Quotient , Reste : comme DIV • The CF, OF, SF, ZF, AF, and PF flags are undefined. • The sign of the remainder is always the same as the sign of the dividend. • absolute value of remainder < absolute value of divisor.

Premi`re ann´e e e

2003

35

Assembleur

Extension de signe

Pentium

• cbw : extension sign´e de AL → AX e • cwde : extension sign´e de AX → EAX e • cwd : extension sign´e de AX → DX:AX e • cdq : extension sign´e de EAX → EDX/EAX e • CF, OF, SF, ZF, AF, and PF flags are undefined.

Premi`re ann´e e e

2003

36

Assembleur

Autres op´rateurs e

Pentium

adc

Source ,

Destination

Destination + Source + CF → Destination • sbb Source, Destination

Destination − (Source + CF ) → Destination • Source : imm´diat, registre, m´moire e e • Destination : registre, m´moire e • flag : OF, SF, ZF, AF, CF, et PF

Premi`re ann´e e e

2003

37

Assembleur

Op´rateurs Logiques e

Pentium

and

Source,

Destination

Destination AN D Source → Destination • or Source, Destination

Destination OR Source → Destination • xor Source, Destination

Destination XOR Source → Destination

Premi`re ann´e e e

2003

38

Assembleur

Op´rateurs Logiques (suite) e

Pentium

• The OF and CF flags are cleared; • the SF, ZF, and PF flags are set according to the result. • The state of the AF flag is undefined. • NOT Source : compl´ment ` un e a

Premi`re ann´e e e

2003

39

Assembleur

D´calages e

Pentium

shl sal

Source, Source,

Destination Destination

CF X ← Destination ← 0 ⇒ CF D ← estination0 • shr sar Source, Source, Destination Destination

SHR 0 → DestinatioN → CF X SAR DestinatioN → CF X

⇒ 0Destinatio → CF N

⇒ DDestinatio → CF N

• Source : CL ou imm´diat, au plus 31 Destination, : registre ou m´moire e e
Premi`re ann´e e e 2003 40

Assembleur

Rotations
rol ror rcl rcr Source, Source, Source, Source, Destination Destination Destination Destination

Pentium

• ROL : CF X ← Destination • ROR DestinatioN → CF X

⇒ CF D ← estinationD ⇒ NDestinatio → CF N ⇒ CF D ← estinationX ⇒ XDestinatio → CF N

• RCL : CF X ← Destination • RCR DestinatioN → CF X

• Source : CL ou imm´diat, au plus 31 Destination, : registre ou m´moire e e
Premi`re ann´e e e 2003 41

Les branchements Programmation Assembleur
Jean-Claude Bajard IUT - universit´ Montpellier 2 e

Assembleur

Instructions de pr´paration e

Pentium

CMP • Destination, : registre, m´moire e

Source,

Destination

• Source : registre, m´moire , imm´diat e e • effectue Destination - Source : sans affecter Destination • flag : OF, SF, ZF, AF, CF, et PF

Premi`re ann´e e e

2003

43

Assembleur

Instructions de pr´paration e

Pentium

TEST • Destination, : registre, m´moire e

Source,

Destination

• Source : registre, m´moire , imm´diat e e • effectue Destination AND Source : sans affecter Destination • flag : OF=0, SF, ZF, AF, CF=0, et PF

Premi`re ann´e e e

2003

44

Assembleur

Les Sauts

Pentium

Deux cat´gories e • Saut inconditionnel JMP • Saut conditionnel Jcc cc repr´sente la condition e Adresse Adresse

Premi`re ann´e e e

2003

45

Assembleur

Les Sauts (suite)

Pentium

• Adresse d´placement relatif ` EIP e a • Adresse g´n´ralement une ´tiquette dans le code e e e • Jcc ne supporte pas les sauts lointains Exemple: si nous ne pouvons pas faire le saut suivant JZ FARLABEL; alors on le remplace par JNZ BEYOND; JMP FARLABEL; BEYOND:

Premi`re ann´e e e

2003

46

Assembleur

Les conditions

Pentium

Instruction Mnemonic Unsigned Conditional Jumps JA/JNBE JAE/JNB JB/JNAE JBE/JNA JC JE/JZ JNC JNE/JNZ JNP/JPO JP/JPE JCXZ JECXZ
Premi`re ann´e e e 2003

Condition (Flag States) (CF and ZF)=0 CF=0 CF=1 (CF or ZF)=1 CF=1 ZF=1 CF=0 ZF=0 PF=0 PF=1 CX=0 ECX=0

Description Avant/non apr`s ou egal e Avant ou ´gal/non apr`s e e Apr`s/non avant ou egal e Apr`s ou ´gal/non avant e e retenue egal/nul pas de retenue Non ´gal/non nul e Non pair/parit´ impaire e Pair/parit´ paire e Registre CX est zero Registre ECX est zero
47

Assembleur

Les conditions (suite)

Pentium

Instruction Mnemonic Signed Conditional Jumps JG/JNLE JGE/JNL JL/JNGE JLE/JNG JNO JNS JO JS

Condition (Flag States) ((SF xor OF) or ZF) =0 (SF xor OF)=0 (SF xor OF)=1 ((SF xor OF) or ZF)=1 OF=0 SF=0 OF=1 SF=1

Description Plus grand/no plus petit ou ´gal e Plus grand ou ´gal/non plus petit e Plus petit/non plus grand ou ´gal e Plus petit ou ´gal/non plus grand e Non overflow Non signe (non-negatif) Overflow Signe (negatif)

Premi`re ann´e e e

2003

48

Assembleur

Si ??? Alors ... Sinon ...

Pentium

Exemple ... suite 1 ... Si

Traduction

A<B Alors suite 2 ... Sinon suite 3 ... Sinon: Finsi: Alors:

... suite 4 ...

... suite 1 ... MOV CMP JNL suite 2 ... JMP suite 3 ... ... suite 4 ...

$A,%EAX $B,%EAX Sinon

Finsi

Premi`re ann´e e e

2003

49

Assembleur

Faire...Tant que ???

Pentium

Exemple ... suite 1 ... Faire ... suite 2 ... A≥B

Traduction

Faire:

Tant que ... suite 3 ...

Finftq:

... suite 1 ... ... suite 2 ... MOV CMP JGE ... suite 3 ...

$A,%EAX $B,%EAX Faire

Premi`re ann´e e e

2003

50

Assembleur

Tant que ??? Faire ...

Pentium

Exemple ... suite 1 ... Tant que

Traduction

Tantque: A≥B ... suite 2 ... Faire

... suite 3 ...

Fintq :

... suite 1 ... MOV CMP JNGE ... suite 2 ... JMP ... suite 3 ...

$A,%EAX $B,%EAX Fintq

Tantque

Premi`re ann´e e e

2003

51

Assembleur

Pour i = n ` m Faire ... a

Pentium

Exemple ... suite 1 ... Pour Faire

Traduction

i = n ` m (pas =t) a ... suite 2 ...

Pour:

... suite 3 ... Finpour :

... suite 1 ... MOV CMP JG ... suite 2 ... ADD JMP ... suite 3 ...

$n,%ECX $m,%ECX Finpour

$t,%ECX Pour

Premi`re ann´e e e

2003

52

Assembleur

Instruction LOOP

Pentium

LOOP

Adresse (8bits: -128 ` 127) a

• ECX est utilis´ comme compteur e

• ECX est d´cr´ment´, e e e

• puis Si ECX = 0 alors saut vers Adresse ,

• Sinon passage ` la suite a

Premi`re ann´e e e

2003

53

Assembleur

Pentium

Exemple ... suite 1 ... Pour Faire

Traduction

i=n`1 a ... suite 2 ...

Pour:

... suite 3 ...

Finpour :

... suite 1 ... MOV ... suite 2 ... LOOP ... suite 3 ...

$n,%ECX

Pour

Premi`re ann´e e e

2003

54

Assembleur

Pentium

Gestion de la PILE Appel de fonction

Premi`re ann´e e e

2003

55

Assembleur

Principe d’utilisation de la Pile

Pentium

• Place m´moire r´serv´e pour lors de l’ex´cution d’un programme (sous linux par d´faut e e e e e 2M o) : pour les variables locales, pour les sauvegardes d’environnement • ESP pointe ` l’initialisation sur le premier octet hors de la pile a • ESP pointe toujours sur le sommet de la zone occup´e e • EBP pour pointer les variables stock´es dans la pile e

Premi`re ann´e e e

2003

56

Assembleur

Exemple

Pentium

• R´servation de quatre octets dans la pile e • movl subl movw movw %esp,%ebp $4,%esp $4,-4(%ebp) $12,-2(%ebp) ⇒ ESP → ESP → 04 00 12 00

Premi`re ann´e e e

2003

57

Assembleur

Op´rations sur la pile e

Pentium

PUSH

Source

• PUSH d´cr´mente ESP de 2 ou de 4 suivant le type de Source e e • Puis met la valeur de Source ` l’adresse [ESP] a • mov push $0x23,%eax %eax ⇒ eax 00 00 00 23 esp ← esp - 4 mov %eax,(%esp) ⇒ esp → esp → 23 00 00 00

Premi`re ann´e e e

2003

58

Assembleur

Op´rations sur la pile (suite) e

Pentium

POP

Source

• POP met la valeur point´e ` l’adresse [ESP] dans Source e a • Puis incr´mente ESP de 2 ou de 4 suivant le type de Source e • pop %eax ⇒ mov (%esp),%eax eax 00 00 00 esp ← esp + 4 23 ⇒ ESP → ESP → 23 00 00 00

Premi`re ann´e e e

2003

59

Assembleur

Pentium

Appel de fonctions

Premi`re ann´e e e

2003

60

Assembleur

Appel d’une fonction

Pentium

CALL

nomfonction

• CALL : sauvegarde de l’adresse de l’instruction suivant le CALL dans la pile traduction : push jmp %eip nomfonction

Premi`re ann´e e e

2003

61

Assembleur

D´claration d’une fonction e

Pentium

nomfonction: ... suite ... ret instructions

• ret assure le retour en d´pilant l’addresse de l’instruction suivant l’appel e RET • traduction : pop add %eip $val, %esp ;(si arguments) $val

Premi`re ann´e e e

2003

62

Assembleur

Retour s´curis´ e e

Pentium

• Pour ˆtre certain de d´pil´ l’adresse de l’instruction suivant le call e e e • En d´but de fonction : e push mov leave ret %ebp %esp,%ebp

• En fin de fonction :

• traduction de LEAVE : mov pop %ebp, %esp %ebp

Premi`re ann´e e e

2003

63

Assembleur

Sauvegarde de l’environnement

Pentium

• Avant l’appel empiler le contenu de tous les registres risquant d’ˆtre modifi´s dans la e e proc´dure e

PUSHAD

;empile : EAX, ECX, EDX, EBX, original ESP, EBP, ESI, and EDI

• Avant le retour d´piler pour restituer le contenu de tous les registres empil´s lors de e e l’appel POPAD Pop EDI, ESI, EBP, EBX, EDX, ECX, and EAX POPAD ; d´pile : EDI, ESI, EBP, EBX, EDX, ECX, and EAX e

Premi`re ann´e e e

2003

64

Assembleur

linux ELF

Pentium

Directives : • .globl d´claration pour l’´dition de lien e e • .type nomfonction,@function d´claration du type e Remarque: • le corps du programme (main:) peut lui aussi ˆtre d´clar´ comme fonction. C’est e e e mˆme conseill´. e e

Premi`re ann´e e e

2003

65

Assembleur

linux ELF

Pentium

Utilitaire: • readelf pour lire les diff´rentes informations li´es au format ELF: par exemple readelf e e -s a.out pour lire la table des symboles. Construction de l’ex´cutable: e • avec gcc gcc toto.s -o toto • avec as et ld as toto.s -o toto.o ld -e main toto.o -o toto

Premi`re ann´e e e

2003

66

Assembleur

r´sum´ e e

Pentium

.globl .type main: push mov ... pushad call popad ... leave ret

main main,@function %ebp %esp,%ebp

.globl .type nomfonction: push mov ... leave ret

nomfonction nomfonction,@function %ebp %esp,%ebp

nomfonction

Premi`re ann´e e e

2003

67

Assembleur

Passage des arguments

Pentium

Principe d’utilisation de la pile lors de l’appel: • empiler push ... push push les arguments dans l’ordre inverse: argN,...,arg2,arg1 argN arg2 arg1

• faire l’appel call nomfonction • au retour r´tablir le pointeur de pile e ret taillearg

Premi`re ann´e e e

2003

68

Assembleur

Passage des arguments: suite

Pentium

Principe d’utilisation de la pile dans la fonction: • sauvegarde du pointeur de pile: push %ebp mov %esp,%ebp • reservation de l’espace n´cessaire pour les variables locales: e sub $val,%esp • localisation par rapport au registre %ebp: +8(%ebp) pointe sur arg1 (%ebp) pointe %esp d’origine -4(%ebp) pointe sur varloc1 • leave replace le pointeur de pile sur l’appel (%eip suivant)
Premi`re ann´e e e 2003 69

Assembleur

Variables Locales

Pentium

• R´servation d’espace dans la pile pour les variables locales : e esp → var 2 var 1 esp → ebp eip (call) arg 2 arg 1 ⇒ sub $8,%esp ⇒ ebp → ebp eip (call) arg 2 arg 1

Premi`re ann´e e e

2003

70

You're Reading a Free Preview

Télécharger
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->