De presentatie wordt gedownload. Even geduld aub

De presentatie wordt gedownload. Even geduld aub

Ca4-1 Les 4: Gegevensmanipulatie- instructies en machinemodellen “Everything that can be invented has been invented.” — Charles H. Duell, Commissioner,

Verwante presentaties


Presentatie over: "Ca4-1 Les 4: Gegevensmanipulatie- instructies en machinemodellen “Everything that can be invented has been invented.” — Charles H. Duell, Commissioner,"— Transcript van de presentatie:

1 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

2 ca4-2 Von Neumann-machine Fysiek zicht Invoer/Uitvoer Geheugen:bau-cellen RAM adres controle data BUS controle klok registers ALU Invoer/Uitvoer Controle klok registers Geheugen CVEadres controle data ALU BUS cache

3 ca4-3 Overzicht Aritmetische instructies Logische instructies Vlottende-komma-instructies MMX-instructies SSE/SSE2-4-instructies Varia Machinemodellen

4 ca4-4 Operatorgedeelte R O1 O2 controle c-bit s-bit o-bit z-bit S

5 ca4-5 s Toestandsbits bij 32-bit optelling R = O1: O2: R: c z-bit = 1 indien resultaat = 0

6 ca4-6 overflow Overflow o-bit = carry(31) xor carry(30)

7 ca4-7 Getallencirkel optellen aftrekken

8 ca4-8 Saturatierekenen Overflow kan ook opgevangen worden door de waarden te plafonneren op de extremen (max) (min)

9 ca4-9 Saturatierekenen overflow modulo saturatie

10 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

11 ca4-11 Optelling add doel, bron 00B A … C eax ebx add eax, ebx add eax, 10h add eax, [4] soczsocz Alle waarden zijn hexadecimaal! Instructie:add

12 ca4-12 Aftrekking sub doel, bron 00B A … C eax ebx 0091C BFF0 sub eax, ebx sub eax, 10h sub eax, [4] soczsocz BFF Alle waarden zijn hexadecimaal! Instructie:sub

13 ca4-13 Integer hoofdbewerkingen add d,s adc d,s sub d,s sbb d,s mul s imul s div s idiv s neg d inc d dec d d = d + s d = d + s + c d = d - s d = d - s - c vermenigvuldiging (unsigned) vermenigvuldiging (signed) deling (unsigned) deling (signed) d = -d d = d + 1 d = d - 1

14 ca4-14 mov eax,[10h] mov ebx,[14h] add eax,[18h] adc ebx,[1ch] mov [20h],eax mov [24h],ebx 64-bit optelling 10h14h18h1ch20h24h28h ebx [14h]eax [10h] [1ch] [20h][24h] [18h] +

15 ca4-15 mul & div edx:eax = bron * eax (bin) mul bron eax = edx:eax / bron (bin) edx = edx:eax % bron div bron edx:eax = bron * eax (2c) imul bron deeltal = quotiënt * deler + rest en rest * deeltal ≥ 0. Instructie:mul Instructie:div

16 ca4-16 imul: 3 varianten edx:eax = bron * eax imul bron d = d * bron imul d,bron d = bron1 * bron2 imul d,bron1,bron2

17 ca4-17 Product in helften b.v. Alpha (64 bit) reg[c]:=(reg[a]*reg[b]) mulq a,b,c umulh a,b,c bits n1 tot n2 (neerwaarts genummerd)

18 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 = … 2 = /15 = * = /15 = 002D 16 * =0002.FFFD 16

19 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:cmdInstructie:test

20 ca ? c Natuurlijke getallen (binair) anbe(c or z) == 0above aenbc == 0above or equal bnaec == 1below bena(c or z) == 1below or equal anbe(c or z) == 0above aenbc == 0above or equal bnaec == 1below bena(c or z) == 1below or equal binair

21 ca ? ? o == 1 o == 0 s == 1s == 0 Gehele getallen (2-complement) gnle((s xor o) or z) == 0 greater genl(s xor o) == 0greater or equal lnge(s xor o) == 1less leng((s xor o) or z) == 1less or equal gnle((s xor o) or z) == 0 greater genl(s xor o) == 0greater or equal lnge(s xor o) == 1less leng((s xor o) or z) == 1less or equal 2-comp

22 ca4-22 Conditiecodes zz == 1zero cc == 1carry oo == 1overflow pp == 1parity ss == 1sign nzz == 0no zero ncc == 0no carry noo == 0no overflow npp == 0no parity nss == 0 no sign gnle((s xor o) or z) == 0 greater genl(s xor o) == 0greater or equal lnge(s xor o) == 1less leng((s xor o) or z) == 1less or equal ez == 1equal nez == 0not equal anbe(c or z) == 0above aenbc == 0above or equal bnaec == 1below bena(c or z) == 1below or equal zz == 1zero cc == 1carry oo == 1overflow pp == 1parity ss == 1sign nzz == 0no zero ncc == 0no carry noo == 0no overflow npp == 0no parity nss == 0 no sign gnle((s xor o) or z) == 0 greater genl(s xor o) == 0greater or equal lnge(s xor o) == 1less leng((s xor o) or z) == 1less or equal ez == 1equal nez == 0not equal anbe(c or z) == 0above aenbc == 0above or equal bnaec == 1below bena(c or z) == 1below or equal binair 2-comp

23 ca4-23 Overzicht Aritmetische instructies Logische instructies Vlottende-komma-instructies MMX-instructies SSE/SSE2-4-instructies Varia Machinemodellen

24 ca4-24 Logische Operaties and d,s or d,s xor d,s not d d = d ‘and’ s d = d ‘or’ s d = d ‘xor’ s d = ‘not’ d

25 ca4-25 Verschuivingen 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 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 d = (s:d >> n) bitrotatie naar links bitrotatie naar rechts uitgebreide bitrotatie naar links uitgebreide bitrotatie naar rechts

26 ca4-26 Schuifoperaties C=1 C= Schuif 1 positie naar links Schuif 5 posities naar links Instructie: schuifoperatie

27 ca4-27 Schuifoperaties C 0 SHL C SAR C 0 SHR C 0 SAL

28 ca4-28 Schuifoperaties D C SHLD S S C SHRD D

29 ca4-29 Rotatieoperaties C ROL C ROR C RCL C RCR Instructie: rotatieoperatie

30 ca4-30 Schuifoperaties: logisch links 1  x rechts 1   2 links n  x 2 n rechts n   2 n

31 ca4-31 Schuifoperaties: aritmetisch links 1  x rechts 1   rechts 1   2

32 ca4-32 Oefening sal 2 sar shl 2 shr

33 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]

34 ca4-34 Product door verschuivingen x 3 x 4 x 5 x 6 x 7 x 8 x 9 x 10 x 11 x x2+x1 x4 x4+x1 x4+x2 x8-x1 x8 x8+x1 x8+x2 x8+x2+x1 x8+x4 x4-x1 x8-x2 x16-x4-x1 x16-x4

35 ca4-35 Verschuivingen x 57 = x64 - x8 + x1 x 113 = x128 - x16 + x1 Soms combinatie van de twee:

36 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 c = d ; d = 1 c = d ; d = 0 c = d ; d = d Instructie: bitoperaties

37 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

38 ca4-38 Set byte on condition set 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

39 ca4-39 Overzicht Aritmetische instructies Logische instructies Vlottende-komma-instructies MMX-instructies SSE/SSE2-4-instructies Varia Machinemodellen

40 ca4-40 Vlottende-komma- registerverzameling sexpmantisse st st(1) st(2) st(3) st(7) st(6) st(5) st(4) Registers: vlottende-komma

41 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)

42 ca4-42 Zuivere stapeladressering fadd 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 st = st+mem[ae] Adresseermodes

43 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) negatiest = - st FP compare and set eflags

44 ca4-44 Wiskundige functies fsqrt fsin fcos fptan fpatan fyl2x fyl2xp1 f2xm1 fsqrt fsin fcos fptan fpatan fyl2x fyl2xp1 f2xm1 vierkantswortel sinus cosinus tangens arcus tangens logaritme st(1) = st(1)*log 2 (st); pop logaritme st(1) = st(1)*log 2 (st+1); pop exponent st = 2 st -1

45 ca4-45 Load-store operaties fbld fbstp fild fist fld fst fbld fbstp fild fist fld fst 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

46 ca4-46 Load constant fld1 fldl2t fldl2e fldpi fldlg2 fldln2 fldz fld1 fldl2t fldl2e fldpi fldlg2 fldln2 fldz push 1.0 push log 2 10 push log 2 e push π push log 10 2 push log e 2 push +0.0

47 ca4-47 Overzicht Aritmetische instructies Logische instructies Vlottende-komma-instructies MMX-instructies SSE/SSE2-4-instructies Varia Machinemodellen

48 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

49 ca4-49 Maar bit Oplossing:

50 ca4-50 Multimedia-extensies Sparc: Visual Instruction Set PA-RISC: MAX-2 X64: MMX, SSE PowerPC: Altivec

51 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

52 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

53 ca4-53 Instructies paddb paddw paddd paddq padds[b/w] paddus[b/w] psubb psubw psubd psubq psubs[b/w] psubus[b/w]

54 ca4-54 paddb paddb mm0,mm1 mm mm1 mm0

55 ca4-55 paddd paddd mm0,mm1 mm0 + + mm1 mm0

56 ca4-56 Instructies abc d efg h (a*e).l(b*f).l(c*g).l (d*h).l pmullw (a*e).h(b*f).h(c*g).h (d*h).h pmulhw a*e+b*fc*g+d*h pmaddwd

57 ca4-57 pcmpeqd pcmpeqd mm0,mm1 FF FFFF 00 FF FF mm0 Andere:pcmpeq[b/w/d] pcmpgt[b/w/d] FF FF mm0 FF FFFF mm1

58 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

59 ca4-59 Unpack instructies punpckl[bw/wd/dq] punpckh[bw/wd/dq] mm0 punpckhbw mm0,mm1 mm1 mm0

60 ca4-60 Pack instructies packss[wb/dw] packssdw mm0,mm1 mm0 mm1 mm0 packuswb

61 ca4-61 Einde van MMX-programma emms empty MMX state

62 ca4-62 Overzicht Aritmetische instructies Logische instructies Vlottende-komma-instructies MMX-instructies SSE/SSE2-4-instructies Varia Machinemodellen

63 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

64 ca4-64 Packed SSE-operaties xmm0 xmm1 xmm0 x3x2x1x0 y3y2y1y0 x3+y3x2+y2x1+y1x0+y0 addps xmm0, xmm1

65 ca4-65 Scalaire SSE-operaties xmm0 xmm1 xmm0 x3x2x1x0 y3y2y1y0 x3x2x1x0+y0 addss xmm0, xmm1

66 ca4-66 SSE2-extensies Subwoordparallellisme met vlottende- kommagetallen (dubbele precisie) + integers. 144 nieuwe instructies 8 woorden 4 dubbelwoorden 2 quadwoorden 16 bytes Int FP/Int

67 ca4-67 Packed SSE2-operaties xmm0 xmm1 xmm0 x1x0 y1y0 x1+y1x0+y0 addpd xmm0, xmm1

68 ca4-68 Scalaire SSE2-operaties xmm0 xmm1 xmm0 x1x0 y1y0 x1x0+y0 addsd xmm0, xmm1

69 ca4-69 Shuffle operaties shufps xmm0, xmm1, pat xmm0 xmm1 xmm0 x3x2x1x0 y3y2y1y0 y? x?

70 ca4-70 SSE3-uitbreidingen haddps xmm0, xmm1 xmm0 xmm1 xmm0 x3x2x1x0 y3y2y1y0 x3+x2x1+x0y3+y2y1+y0 haddps = Horizontal-Add-Packed-Single

71 SSE4-uitbreidingen 54 bijkomende instructies Zeer gespecialiseerd ca4-71

72 ca4-72 Overzicht Aritmetische instructies Logische instructies Vlottende-komma-instructies MMX-instructies SSE/SSE2-4-instructies Varia Machinemodellen

73 ca4-73 nop doe niets Instructie: nop

74 ca4-74 xadd xadd d,s t = d+s s = d d = t

75 ca4-75 cmpxchg cmpxchg d,s if (reg[eax]==d) d = s; else reg[eax] = d;

76 ca4-76 lock-prefix lock add [1000],eax atomaire optelling van eax bij de geheugenlocatie [1000] slechts combineerbaar met een beperkt aantal instructies

77 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

78 ca4-78 Overzicht Aritmetische instructies Logische instructies Vlottende-komma-instructies MMX-instructies SSE/SSE2-4-instructies Varia Machinemodellen

79 ca4-79 Globale machinetypes Stapelmachines Accumulatormachines Registermachines

80 ca4-80 Stapelmachine O1 O2 R A := (B-C)/D PUSH B PUSH C SUB PUSH D DIV POP A b.v.: hp-calculator Expressiestapel

81 ca4-81 A := (B-C)/D LOAD B SUB C DIV D STORE A Accumulatormachine ACC R O1 O2 b.v.: klassieke calculator

82 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 R0 R1 R2 R3 R4 R5 R6 R7 R

83 ca4-83 A := (B-C)/D Registermachine O1 O2 R MOV R1,B SUB R1,C DIV R1,D MOV A,R1 R0 R1 R2 R3 R4 R5 R6 R7

84 ca4-84 A := (B-C)/D Registermachine O1 O2 R SUB R1,B,C DIV A,R1,D R0 R1 R2 R3 R4 R5 R6 R7

85 ca4-85 stapelmachine 0-adresmachine - accumulatormachine 1-adresmachine met registeroperand R met geheugenoperand M registermachine 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

86 ca4-86 Oefening A := (A+B)*(C+D) Stapel Accu RRR push A push B add push C push D add mul pop A load C add D store T load A add B mul T store A mov R1,A mov R2,B add R1,R2,R1 mov R2,C mov R3,D add R2,R3,R2 mul R1,R2,R1 mov A,R1

87 ca4-87 Pauze


Download ppt "Ca4-1 Les 4: Gegevensmanipulatie- instructies en machinemodellen “Everything that can be invented has been invented.” — Charles H. Duell, Commissioner,"

Verwante presentaties


Ads door Google