les 4: gegevensmanipulatie-instructies en machinemodellen

Post on 11-Jan-2016

31 Views

Category:

Documents

1 Downloads

Preview:

Click to see full reader

DESCRIPTION

Les 4: Gegevensmanipulatie-instructies en machinemodellen. “Everything that can be invented has been invented.” — Charles H. Duell, Commissioner, U.S. Office of Patents, 1899. BUS. Von Neumann-machine Fysiek zicht. BUS. adres. adres. CVE. Controle. controle. cache. data. data. klok. - PowerPoint PPT Presentation

TRANSCRIPT

ca4-1

Les 4: Gegevensmanipulatie-

instructies en machinemodellen

“Everything that can be invented has been invented.” — Charles H. Duell, Commissioner, U.S. Office of Patents, 1899

ca4-2

Von Neumann-machineFysiek zicht

Invoer/Uitvoer

Geheugen:bau-cellen

RAM

adres

controle

data

BUS

controlecontrole

klokklok

registersregistersALU

Invoer/Uitvoer

ControleControle

klokklok

registersregisters

Geheugen

CVEadres

controle

dataALU

BUS

cachecache

ca4-3

Overzicht

• Aritmetische instructies

• Logische instructies

• Vlottende-komma-instructies

• MMX-instructies

• SSE/SSE2-4-instructies

• Varia

• Machinemodellen

ca4-4

Operatorgedeelte

R

O1

O2

controle

c-bits-bito-bitz-bit

S

ca4-5

s

Toestandsbits bij 32-bit optelling R = 01 + 02

O1: 00111000101001010101010100001100

O2: 01001110001010010101010101100110

R: 10000110110011101010101001110010

c z-bit = 1 indien resultaat = 0

ca4-6

overflowOverflow

-4

-3

-2

-1

0

1

2

3

100

101

110

111

000

001

010

011

010 2

+011 3

101 5

110 -2

+101 -3

1011 -5

110 -2

+111 -1

1101 -3

010 2

+001 1

011 3

o-bit = carry(31) xor carry(30)

ca4-7

Getallencirkel000

001

010

011

100

101

110

1110

1

2

3

-4

-3

-2

-1

optellenaftre

kken

ca4-8

Saturatierekenen

Overflow kan ook opgevangen worden door de waarden te plafonneren op de extremen

-4

-3

-2

-1

0

1

2

3

100

101

110

111

000

001

010

011

010 2

010 2

100 -4+

011 3 (max)

110 -2

101 -3

1011 3

+

100 -4 (min)

ca4-9

Saturatierekenen

overflow modulo

saturatie

ca4-10

Resoluties hoofdbewerkingen

• Som: n bit + n bit (n+1) bit

• Verschil: n bit - n bit (n+1) bit

• Product: n bit * n bit (2n) bit

• Deling: n bit / n bit n bit

ca4-11

Optelling

add doel, bron 00B0030080000000003300200003300A….

0004080C10

32

00920000

00004000

eax

ebx

0092400000924010

add eax, ebx

add eax, 10h

add eax, [4]

socz

0000

80924010

1

Alle waarden zijn hexadecimaal!Alle waarden zijn hexadecimaal!

Instructie:add

ca4-12

Aftrekking

sub doel, bron 00B0030080000000003300200003300A….

0004080C10

32

00920000

00004000

eax

ebx

0091C0000091BFF0

sub eax, ebx

sub eax, 10h

sub eax, [4]

socz

0000

8091BFF0

111

Alle waarden zijn hexadecimaal!Alle waarden zijn hexadecimaal!

Instructie:sub

ca4-13

Integer hoofdbewerkingenadd d,s adc d,ssub d,s sbb d,smul simul sdiv sidiv sneg d inc ddec d

d = d + sd = d + s + cd = d - sd = d - s - cvermenigvuldiging (unsigned)vermenigvuldiging (signed) deling (unsigned)deling (signed)d = -dd = d + 1d = d - 1

ca4-14

mov eax,[10h]mov ebx,[14h]add eax,[18h]adc ebx,[1ch]mov [20h],eaxmov [24h],ebx

64-bit optelling10h 14h 18h 1ch 20h 24h 28h

ebx [14h] eax [10h]

[1ch]

[20h][24h]

[18h]+

ca4-15

mul & div

edx:eax = bron * eax (bin)mul bronmul bron

eax = edx:eax / bron (bin)

edx = edx:eax % bron

div brondiv bron

edx:eax = bron * eax (2c)imul bronimul bron

deeltal = quotiënt * deler + rest en rest * deeltal ≥ 0.

Instructie:mul

Instructie:div

ca4-16

imul: 3 varianten

edx:eax = bron * eaximul bronimul bron

d = d * bron imul d,bronimul d,bron

d = bron1 * bron2imul d,bron1,bron2imul d,bron1,bron2

ca4-17

Product in helften

b.v. Alpha (64 bit)

reg[c]:=(reg[a]*reg[b])<63:0>

reg[c]:=(reg[a]*reg[b])<127:64>

mulq a,b,c mulq a,b,c

umulh a,b,c umulh a,b,c

<n1:n2> bits n1 tot n2 (neerwaarts genummerd)

ca4-18

Deling

Indien deling door een constante, kan dit ook door vermenigvuldiging, b.v. deling door 15

X/15 =X*(1/15)

1/15 = 0.0001000100010001…2= 0.111116

50/15 = 003216 * 0.111116 = 0003.555216

45/15 = 002D16 * 0.111116 = 0002.FFFD16

45/15 = 002D16 * 0.111216 = 0003.002A16

ca4-19

Vergelijkingen

cmp d,s

test d,s

d-s vlaggen

d ‘and’ s vlaggen

cmp: vergelijken van waarden: >, =, <

test: testen van bits: aan, uit

cmp: vergelijken van waarden: >, =, <

test: testen van bits: aan, uit

Instructie:cmd Instructie:test

ca4-20

000 0001 1010 2011 3100 4101 5110 6111 7

010 2

-011 3

111 ?

011 3

-010 2

001 1

c

Natuurlijke getallen (binair)

a nbe (c or z) == 0 aboveae nb c == 0 above or equalb nae c == 1 belowbe na (c or z) == 1 below or equal

a nbe (c or z) == 0 aboveae nb c == 0 above or equalb nae c == 1 belowbe na (c or z) == 1 below or equal binair

ca4-21

100 -4

101 -3

110 -2

111 -1

000 0

001 1

010 2

011 3

010 2

-011 3

111 -1

101 -3

-010 2

011 ?

011 3

-010 2

001 1

010 2

-101 -3

101 ?

o == 1

o == 0

s == 1 s == 0

Gehele getallen (2-complement)

g nle ((s xor o) or z) == 0 greater ge nl (s xor o) == 0 greater or equal l nge (s xor o) == 1 lessle ng ((s xor o) or z) == 1 less or equal

g nle ((s xor o) or z) == 0 greater ge nl (s xor o) == 0 greater or equal l nge (s xor o) == 1 lessle ng ((s xor o) or z) == 1 less or equal 2-comp

ca4-22

Conditiecodesz z == 1 zeroc c == 1 carryo o == 1 overflowp p == 1 paritys s == 1 sign

nz z == 0 no zeronc c == 0 no carryno o == 0 no overflownp p == 0 no parityns s == 0 no sign

g nle ((s xor o) or z) == 0 greater ge nl (s xor o) == 0 greater or equal l nge (s xor o) == 1 lessle ng ((s xor o) or z) == 1 less or equal

e z == 1 equalne z == 0 not equala nbe (c or z) == 0 aboveae nb c == 0 above or equalb nae c == 1 belowbe na (c or z) == 1 below or equal

z z == 1 zeroc c == 1 carryo o == 1 overflowp p == 1 paritys s == 1 sign

nz z == 0 no zeronc c == 0 no carryno o == 0 no overflownp p == 0 no parityns s == 0 no sign

g nle ((s xor o) or z) == 0 greater ge nl (s xor o) == 0 greater or equal l nge (s xor o) == 1 lessle ng ((s xor o) or z) == 1 less or equal

e z == 1 equalne z == 0 not equala nbe (c or z) == 0 aboveae nb c == 0 above or equalb nae c == 1 belowbe na (c or z) == 1 below or equal binair

2-comp

01000010000010101000

0101

00110001101110011111110111001110

01000101

0111001100100110

ca4-23

Overzicht

• Aritmetische instructies• Logische instructies• Vlottende-komma-instructies• MMX-instructies• SSE/SSE2-4-instructies• Varia• Machinemodellen

ca4-24

Logische Operaties

and d,s or d,s xor d,s not d

d = d ‘and’ sd = d ‘or’ sd = d ‘xor’ sd = ‘not’ d

ca4-25

Verschuivingenshl d,n

shr d,n

sal d,n

sar d,n

shld d,s,n

shrd d,s,n

rol d,n

ror d,n

rcl d,n

rcr d,n

shl d,n

shr d,n

sal d,n

sar d,n

shld d,s,n

shrd d,s,n

rol d,n

ror d,n

rcl d,n

rcr d,n

d = d << n

d = d >> n

aritmetisch d = d << n

aritmetisch d = d >> n

d = (d:s << n)<63:32>

d = (s:d >> n)<31:0>

bitrotatie naar links

bitrotatie naar rechts

uitgebreide bitrotatie naar links

uitgebreide bitrotatie naar rechts

ca4-26

Schuifoperaties

110100010010101010101010011

101000100101010101010100110C=1

C=0 001001010101010101001100000

Schuif 1 positie naar links

Schuif 5 posities naar links

Instructie: schuifoperatie

ca4-27

Schuifoperaties

C 0SHL

CSAR

C0SHR

C 0SAL

ca4-28

Schuifoperaties

DCSHLD

S

S

C

SHRD

D

ca4-29

Rotatieoperaties

CROL

CROR

CRCL

CRCR

Instructie: rotatieoperatie

ca4-30

Schuifoperaties: logisch

00011 3

00110 6

01100 12

links 1 x 2

links 1 x 2

00110 6

00011 3

rechts 1 2

rechts 1 2

links n x 2n rechts n 2n

ca4-31

Schuifoperaties: aritmetisch

11101 -3

11010 -6

10100 -12

links 1 x 2

links 1 x 2

11010 -6

11101 -3

rechts 1 2

rechts 1 2

11110 -2

11111 -1

rechts 1 2

rechts 1 2

ca4-32

Oefening

001011000011 101011

sal 2

sar 2

001100

000011

101100

111011

101100

111011

shl 2

shr 2

001011000011 101011

001100

000011

101100

001011

101100

001011

ca4-33

Voorbeeld

mov eax, [10]

mov ebx, eax

shl ebx, 3

shl eax, 5

add eax, ebx

add eax, 10

mov [14], eax

; reg[eax] := ‘i’*8+’i’*32+10

; reg[eax] := ‘i’*8+’i’*32

; reg[eax] := ‘i’*32

; reg[ebx] := ‘i’*8

; reg[ebx] := ‘i’

; reg[eax] := mem32[i]

j := i*40+10

; mem32[j] := reg[eax]

ca4-34

Product door verschuivingen

x 3x 4x 5x 6x 7x 8x 9x 10 x 11x 12

0110100010101100111

010000100101010 0101101100

10111001011101010011000

1011110110 1010110100

x2+x1x4x4+x1x4+x2

x8-x1x8x8+x1x8+x2x8+x2+x1x8+x4

x4-x1

x8-x2

x16-x4-x1x16-x4

ca4-35

Verschuivingen

x 57 = x64 - x8 + x1

x 113 = x128 - x16 + x1

Soms combinatie van de twee:

ca4-36

Bit test instructies

bt d, o

bts d, o

btr d, o

btc d, o

bt d, o

bts d, o

btr d, o

btc d, o

c = d<o:o>

c = d<o:o>; d<o:o> = 1

c = d<o:o>; d<o:o> = 0

c = d<o:o>; d<o:o> = d<o:o>

Instructie: bitoperaties

ca4-37

Bit scan instructies

bsf d, s

bsr d, s

bsf d, s

bsr d, s

d = minst significante 1-bit

d = meest significante 1-bit

d = index van bit, neerwaarts genummerd

Indien allemaal 0: d = onbepaald, z=1

ca4-38

Set byte on condition

set<cc> dset<cc> d d = conditiecode

setge al

seto ah

setge al

seto ah

reg[al] = ge ? 1 : 0

reg[ah] = o ? 1 : 0

setno al

dec al

setno al

dec al reg[al] = o ? 0ffh : 00h

ca4-39

Overzicht

• Aritmetische instructies

• Logische instructies

• Vlottende-komma-instructies

• MMX-instructies

• SSE/SSE2-4-instructies

• Varia

• Machinemodellen

ca4-40

Vlottende-komma-registerverzameling

063647978

s exp mantisse

stst(1)st(2)st(3)

st(7)st(6)st(5)st(4)

Registers: vlottende-komma

ca4-41

Datatypes

• FP Enkelvoudige precisie (32 bit)

• FP Dubbele precisie (64 bit)

• FP Dubbele extended precisie (80 bit)

• Integer woord (16 bit)

• Integer dubbelwoord (32 bit)

• Integer quadwoord (64 bit)

• BCD 18 nibbles + tekenbyte (80 bit)

ca4-42

Zuivere stapeladresseringfadd st(1) = st+st(1); pop

Registeradressering

fadd st(i) st = st+st(i)

fadd st(i),st st(i) = st+st(i)

fadd st,st(i) st = st(i)+st

faddp st(i),st st(i) = st+st(i); pop

Geheugenadressering fadd <ae> st = st+mem[ae]

Adresseermodes

ca4-43

Vlottende-kommabewerkingen

fadd

fsub

fdiv

fprem

fmul

fabs

fchs

fcomi

fadd

fsub

fdiv

fprem

fmul

fabs

fchs

fcomi

FP optelling

verschil

deling

rest na deling

vermenigvuldiging

absolute waarde st = abs(st)

negatie st = - st

FP compare and set eflags

ca4-44

Wiskundige functies

fsqrtfsinfcosfptanfpatanfyl2xfyl2xp1f2xm1

fsqrtfsinfcosfptanfpatanfyl2xfyl2xp1f2xm1

vierkantswortelsinuscosinustangensarcus tangenslogaritme st(1) = st(1)*log2(st); poplogaritme st(1) = st(1)*log2(st+1); popexponent st = 2st-1

ca4-45

Load-store operaties

fbldfbstpfildfistfldfst

fbldfbstpfildfistfldfst

Load/push BCD-getal (ld=load)

Store BCD and pop

Load/push integer 16/32/64 bit

Store integer 16/32/64 bit

Load/push floating point value 32/64/80 bit

Store floating point value 32/64/80 bit

ca4-46

Load constant

fld1fldl2tfldl2efldpifldlg2fldln2fldz

fld1fldl2tfldl2efldpifldlg2fldln2fldz

push 1.0push log210push log2epush πpush log102push loge2push +0.0

ca4-47

Overzicht

• Aritmetische instructies

• Logische instructies

• Vlottende-komma-instructies

• MMX-instructies

• SSE/SSE2-4-instructies

• Varia

• Machinemodellen

ca4-48

Aanleiding

• Multimedia-applicaties en het web

– Beeld (10 kiB)

– Geluid (100 kiB)

– Video (MiB).

• Opkomst van 64-bit processors

• Kleine data-elementen (8 of 16 bit)

• Zeer veel data-elementen

• Onafhankelijke data-elementen

ca4-49

Maar

00 00 00 00 00 00 00

00 00 00 00 00 00

64 bit

64 bit

64 bitOplossing:

ca4-50

Multimedia-extensies

• Sparc: Visual Instruction Set• PA-RISC: MAX-2• X64: MMX, SSE• PowerPC: Altivec

ca4-51

MMX: registers

• 8 MMX-registers van 64 bit (mm0-mm7)

• Dezelfde registers als ST

• register geschikt voor de opslag van

8 bytes

4 woorden

2 dubbelwoorden

1 quadwoord

Registers: mmx

ca4-52

MMX: Instructies

• 57 instructies die subwoordparallellisme ondersteunen

• Voorbeeld:– acht 8-bit optellingen in parallel– vier 16-bit optellingen in parallel– twee 32-bit optellingen in parallel– één 64-bit optelling

ca4-53

Instructies

paddb

paddw

paddd

paddq

padds[b/w]

paddus[b/w]

psubb

psubw

psubd

psubq

psubs[b/w]

psubus[b/w]

ca4-54

paddb

paddb mm0,mm1paddb mm0,mm1

mm0+ + + + + + + +

mm1

mm0

ca4-55

paddd

paddd mm0,mm1paddd mm0,mm1

mm0 + +

mm1

mm0

ca4-56

Instructies

a b c d

e f g h

(a*e).l (b*f).l (c*g).l (d*h).lpmullw

(a*e).h (b*f).h (c*g).h (d*h).hpmulhw

a*e+b*f c*g+d*hpmaddwd

ca4-57

pcmpeqd

pcmpeqd mm0,mm1pcmpeqd mm0,mm1

FF 00 00 FF FF 00 FF FF mm0

Andere: pcmpeq[b/w/d] pcmpgt[b/w/d]

FF FF FF FF 00 00 00 00 mm0

FF 00 00 FF FF 00 00 00 mm1

ca4-58

Logische instructies

psra[w/d]

psll[w/d/q]

psrl[w/d/q]

pand

pandn

por

pxor

psra[w/d]

psll[w/d/q]

psrl[w/d/q]

pand

pandn

por

pxor

ca4-59

Unpack instructies

punpckl[bw/wd/dq] punpckh[bw/wd/dq]punpckl[bw/wd/dq] punpckh[bw/wd/dq]

mm0

punpckhbw mm0,mm1punpckhbw mm0,mm1

mm1

mm0

ca4-60

Pack instructies

packss[wb/dw]packss[wb/dw]

packssdw mm0,mm1packssdw mm0,mm1

mm0

mm1

mm0

packuswbpackuswb

ca4-61

Einde van MMX-programma

emms empty MMX state

ca4-62

Overzicht

• Aritmetische instructies

• Logische instructies

• Vlottende-komma-instructies

• MMX-instructies

• SSE/SSE2-4-instructies

• Varia

• Machinemodellen

ca4-63

SSE-extensies

• Streaming SIMD Extensions: 70 nieuwe instructies

• 8 extra registers XMM (128 bits lang)

• Subwoordparallellisme met vlottende-kommagetallen (enkelvoudige precisie)

128 bit

ca4-64

Packed SSE-operaties

xmm0

xmm1

xmm0

x3 x2 x1 x0

y3 y2 y1 y0

x3+y3 x2+y2 x1+y1 x0+y0

addps xmm0, xmm1addps xmm0, xmm1

ca4-65

Scalaire SSE-operaties

xmm0

xmm1

xmm0

x3 x2 x1 x0

y3 y2 y1 y0

x3 x2 x1 x0+y0

addss xmm0, xmm1addss xmm0, xmm1

ca4-66

SSE2-extensies

• Subwoordparallellisme met vlottende-kommagetallen (dubbele precisie) + integers.

• 144 nieuwe instructies

8 woorden

4 dubbelwoorden

2 quadwoorden

16 bytesInt

Int

Int

FP/Int

ca4-67

Packed SSE2-operaties

xmm0

xmm1

xmm0

x1 x0

y1 y0

x1+y1 x0+y0

addpd xmm0, xmm1addpd xmm0, xmm1

ca4-68

Scalaire SSE2-operaties

xmm0

xmm1

xmm0

x1 x0

y1 y0

x1 x0+y0

addsd xmm0, xmm1addsd xmm0, xmm1

ca4-69

Shuffle operaties

shufps xmm0, xmm1, patshufps xmm0, xmm1, pat

xmm0

xmm1

xmm0

x3 x2 x1 x0

y3 y2 y1 y0

y? y? x? x?

ca4-70

SSE3-uitbreidingen

haddps xmm0, xmm1haddps xmm0, xmm1

xmm0

xmm1

xmm0

x3 x2 x1 x0

y3 y2 y1 y0

x3+x2 x1+x0 y3+y2 y1+y0

haddps = Horizontal-Add-Packed-Single

SSE4-uitbreidingen

• 54 bijkomende instructies

• Zeer gespecialiseerd

ca4-71

ca4-72

Overzicht

• Aritmetische instructies

• Logische instructies

• Vlottende-komma-instructies

• MMX-instructies

• SSE/SSE2-4-instructies

• Varia

• Machinemodellen

ca4-73

nop

nopnop doe niets

Instructie: nop

ca4-74

xadd

xadd d,sxadd d,s t = d+ss = dd = t

ca4-75

cmpxchg

cmpxchg d,scmpxchg d,s if (reg[eax]==d) d = s;else reg[eax] = d;

ca4-76

lock-prefix

lock add [1000],eaxlock add [1000],eax

atomaire optelling van eax bij de geheugenlocatie [1000]

slechts combineerbaar met een beperkt aantal instructies

ca4-77

set/clear status bits

stc

clc

std

cld

sti

cli

stc

clc

std

cld

sti

cli

c = 1

c = 0

d = 1

d = 0

i = 1

i = 0

ca4-78

Overzicht

• Aritmetische instructies

• Logische instructies

• Vlottende-komma-instructies

• MMX-instructies

• SSE/SSE2-4-instructies

• Varia

• Machinemodellen

ca4-79

Globale machinetypes

• Stapelmachines

• Accumulatormachines

• Registermachines

ca4-80

Stapelmachine

O1

O2

R A := (B-C)/D

PUSH B

PUSH C

SUB

PUSH D

DIV

POP A

b.v.: hp-calculator

Exp

ress

iest

apel

ca4-81

A := (B-C)/D

LOAD B

SUB C

DIV D

STORE A

Accumulatormachine

ACC RO1

O2

b.v.: klassieke calculator

ca4-82

A := (B-C)/D

MOV R1,B

MOV R2,C

SUB R3,R1,R2

MOV R1,D

DIV R2,R3,R1

MOV A,R2

Registermachine

O1

O2

R0R1R2R3R4R5R6R7

R

ca4-83

A := (B-C)/D

Registermachine

O1

O2

R

MOV R1,B

SUB R1,C

DIV R1,D

MOV A,R1

R0R1R2R3R4R5R6R7

ca4-84

A := (B-C)/D

Registermachine

O1

O2

R

SUB R1,B,C

DIV A,R1,D

R0R1R2R3R4R5R6R7

ca4-85

stapelmachine 0-adresmachine -accumulatormachine 1-adresmachine met registeroperand R met geheugenoperand Mregistermachine 2-adresmachine

tot 0 geheugenoperandi RR tot 1 geheugenoperand MR tot 2 geheugenoperandi MM

3-adresmachine tot 0 geheugenoperandi RRR tot 1 geheugenoperand MRR tot 2 geheugenoperandi MMR tot 3 geheugenoperandi MMM

Machinetypes

ca4-86

Oefening

A := (A+B)*(C+D)

Stapel Accu RRRpush Apush Baddpush Cpush Daddmulpop A

load Cadd Dstore Tload Aadd Bmul Tstore A

mov R1,Amov R2,Badd R1,R2,R1mov R2,Cmov R3,Dadd R2,R3,R2mul R1,R2,R1mov A,R1

ca4-87

Pauze

top related