IOCLA curs 02 Arhitectura x86 - ERASMUS...

39
Curs 2 – Arhitectura x86 1 Arhitectura x86 De citit: Dandamudi capitolele 3, 14 Modificat: Oct-14-18

Transcript of IOCLA curs 02 Arhitectura x86 - ERASMUS...

Page 1: IOCLA curs 02 Arhitectura x86 - ERASMUS Pulseelf.cs.pub.ro/asm/res/cursuri/IOCLA_curs_02_Arhitectura_x86.pdf(contine un numar par de biti 1). Acest indicator este folosit de instructiunile

Curs2–Arhitecturax86 1

Arhitecturax86De citit: Dandamudi capitolele 3, 14

Modificat:Oct-14-18

Page 2: IOCLA curs 02 Arhitectura x86 - ERASMUS Pulseelf.cs.pub.ro/asm/res/cursuri/IOCLA_curs_02_Arhitectura_x86.pdf(contine un numar par de biti 1). Acest indicator este folosit de instructiunile

Curs2–Arhitecturax86 2

Cuprinscurs2

•  Familiax86•  Registrele*  Data*  Pointer,index*  Control*  Segment

•  Modulprotejat*  RegistreleSegment*  Descriptoridesegment*  Tabelededescriptori*  Modeledesegmentare

•  Modulreal•  Segmentare,Paginare•  Întreruperi•  Demosasm,gdb•  Instrucţiunimov,add,

jmp

Page 3: IOCLA curs 02 Arhitectura x86 - ERASMUS Pulseelf.cs.pub.ro/asm/res/cursuri/IOCLA_curs_02_Arhitectura_x86.pdf(contine un numar par de biti 1). Acest indicator este folosit de instructiunile

Curs2–Arhitecturax86 3

IstoriculprocesoarelorIntelProcesor An Frecvenţa Tranzistoare Registre Busdate Maxaddr

4004 1969 0.74 2.3K 4 12 4K

8080 1974 2 4.5K 8 16 64K

8086 1978 8 29K 16 16 1MB

80386 1985 20 275K 32 32 4GB

Pentium 1993 60 3.1M 32 40? 4GB

Pentium4 2000 1500 42M 32 64GB

Core2 2006 3000 291M 64 64GB

Corei7 2008 3400 1.4G 64 64GB

XeonE5 2012 3600 5.5G 64 768GB

Page 4: IOCLA curs 02 Arhitectura x86 - ERASMUS Pulseelf.cs.pub.ro/asm/res/cursuri/IOCLA_curs_02_Arhitectura_x86.pdf(contine un numar par de biti 1). Acest indicator este folosit de instructiunile

Curs2–Arhitecturax86 4

Arhitecturax86

Page 5: IOCLA curs 02 Arhitectura x86 - ERASMUS Pulseelf.cs.pub.ro/asm/res/cursuri/IOCLA_curs_02_Arhitectura_x86.pdf(contine un numar par de biti 1). Acest indicator este folosit de instructiunile

Curs2–Arhitecturax86 5

•  Registrede32biţipotfifolosite*  Pe32biţi(EAX,EBX,ECX,EDX)*  Pe16biţi(AX,BX,CX,DX)*  Pe8bitbiţi(AH,AL,BH,BL,CH,CL,DH,DL)

•  Uneleregistreauutilizărispeciale*  ECXestenumăratorpentruinstrucţiunealoop

x86registrepe32biţi

Page 6: IOCLA curs 02 Arhitectura x86 - ERASMUS Pulseelf.cs.pub.ro/asm/res/cursuri/IOCLA_curs_02_Arhitectura_x86.pdf(contine un numar par de biti 1). Acest indicator este folosit de instructiunile

Curs2–Arhitecturax86 6

•  Douăregistreindex*  16sau32biţi*  Instrucţiunipestringuri*  source(SI);destination

(DI)*  Potfifolositeînscop

general

•  Douăregistrepointer*  16sau32-biţi*  Exclusivpentrustivă

x86registrepe32biţi

Page 7: IOCLA curs 02 Arhitectura x86 - ERASMUS Pulseelf.cs.pub.ro/asm/res/cursuri/IOCLA_curs_02_Arhitectura_x86.pdf(contine un numar par de biti 1). Acest indicator este folosit de instructiunile

Curs2–Arhitecturax86 7

x86registrepe32biţi

Page 8: IOCLA curs 02 Arhitectura x86 - ERASMUS Pulseelf.cs.pub.ro/asm/res/cursuri/IOCLA_curs_02_Arhitectura_x86.pdf(contine un numar par de biti 1). Acest indicator este folosit de instructiunile

Curs2–Arhitecturax86 8

EFLAGS(Indicatoriidestare)•  CF(CarryFlag)-indicatordetransport-reflectatransportulinexterioralbitului

celmaisemnificativalrezultatuluioperatiiloraritmetice.Astfel,acestindicatorpoatefifolositincazuloperatiilorindublaprecizie.ValoareaCF=1semnificafietransportlaadunarefieimprumutlascadere.Deasemenea,indicatorulCFestemodificatsideinstructiunilededeplasaresirotatie.

•  PF(ParityFlag)-indicatordeparitate-este1dacarezultatulareparitatepara(contineunnumarpardebiti1).Acestindicatorestefolositdeinstructiuniledearitmeticazecimala.

•  AF(AuxiliaryCarryFlag)-indicatordetransportauxiliar-este1dacaafosttransportdelajumatateadeoctetinferioaralajumatateadeoctatesuperioara(delabitul3labitul4).Acestindicatorestefolositdeinstructiuniledearitmeticazecimala.

•  ZF(ZeroFlag)-indicatoruldezero-este1dacarezultatuloperatieiafostzero.•  SF(SignFlag)-indicatoruldesemn-este1dacacelmaisemnificativbital

rezultatului(MSb)este1,adicainreprezentareanumerelorincomplementfatade2(C2)rezultatulestenegativ(aresemn-).

•  OF(OverflowFlag)-indicatoruldedepasirearitmetica(agameidevaloriposibildereprezentat)-este1dacadimensiunearezultatuluidepasestecapacitatealocatieidedestinatiesiafostpierdutunbit(indicalavalorilecusemnfaptulcase"altereaza"semnul).

C2 8

Page 9: IOCLA curs 02 Arhitectura x86 - ERASMUS Pulseelf.cs.pub.ro/asm/res/cursuri/IOCLA_curs_02_Arhitectura_x86.pdf(contine un numar par de biti 1). Acest indicator este folosit de instructiunile

Curs2–Arhitecturax86 9

EFLAGS(Indicatoriidecontrol)

•  DF(DirectionFlag)–esteutilizatdeinstrucţiunilepeşirurişispecificădirecţiadeparcurgereaacestora:*  0–şirurileseparcurgdelaadresemicispreadresemari;*  1–şirurilesuntparcurseinvers.

•  IF(InterruptFlag)–acestindicatorcontroleazăacceptareasemnalelordeîntrerupereexternă.DacăIF=1esteactivatsistemuldeîntreruperi,adicăsuntacceptatesemnaledeîntrerupereexternă(mascabile,peliniaINTR);altfel,acesteasuntignorate.Indicatorulnuareinfluenţăasuprasemnaluluideîntreruperenemascabilă–NMI.

•  TF(TraceFlag)–esteutilizatpentrucontrolulexecuţieiinstrucţiunilorînregimpascupas(instrucţiunecuinstrucţiune),înscopuldepanăriiprogramelor.Dacăindicatoruleste1,dupăexecuţiafiecăreiinstrucţiunisevageneraunsemnaldeîntrerupereintern(penivelul1).Evident,execuţiasecvenţeidetratareaacesteiîntreruperisevafacecuindicatorulTF=0.

C2 9

Page 10: IOCLA curs 02 Arhitectura x86 - ERASMUS Pulseelf.cs.pub.ro/asm/res/cursuri/IOCLA_curs_02_Arhitectura_x86.pdf(contine un numar par de biti 1). Acest indicator este folosit de instructiunile

Curs2–Arhitecturax86 10

x86registrepe32biţi

•  registredecontrol*  EIP

»  Instructionpointer(instrucţiuneacurentă)*  EFLAGS

»  Statusflags–  Seactualizeazădupăoperaţiiaritmetice/logice

»  Directionflag–  Forward/backwarddirecţiacopierii

»  Systemflags–  IF:activareintreruperi–  TF:Trapflag(pentrudebugging)

Page 11: IOCLA curs 02 Arhitectura x86 - ERASMUS Pulseelf.cs.pub.ro/asm/res/cursuri/IOCLA_curs_02_Arhitectura_x86.pdf(contine un numar par de biti 1). Acest indicator este folosit de instructiunile

Curs2–Arhitecturax86 11

x86registrepe32biţi

•  Registresegment*  16biţi*  Memoriasegmentată*  Conţinutdistinct

»  Code»  Data»  Stack

Page 12: IOCLA curs 02 Arhitectura x86 - ERASMUS Pulseelf.cs.pub.ro/asm/res/cursuri/IOCLA_curs_02_Arhitectura_x86.pdf(contine un numar par de biti 1). Acest indicator este folosit de instructiunile

Curs2–Arhitecturax86 12

Modurile86

•  Toateprocesoarelex86audouămoduriimportante*  Modul“real”

»  Adreseșiregistrepe16biţi»  Memorie1MB

–  640Kshouldbeenoughforeveryone»  Folositdupăreset(grub)

*  Modulprotejat»  Registrede32biţi»  Segmentareșipaginare»  Protecţiakerneluluișiaproceselor»  FolositdeLinux,Windows

Page 13: IOCLA curs 02 Arhitectura x86 - ERASMUS Pulseelf.cs.pub.ro/asm/res/cursuri/IOCLA_curs_02_Arhitectura_x86.pdf(contine un numar par de biti 1). Acest indicator este folosit de instructiunile

Curs2–Arhitecturax86 13

•  Segmentarea&paginarea=translatareadrese32biţi•  Segmentarea:adreselogice→ adreselineare•  Paginarea:adreselineare→ adresefizice•  Segmentare,paginare->cursurileSO,SO2

ModulProtejat

(ceadinprogram)

Page 14: IOCLA curs 02 Arhitectura x86 - ERASMUS Pulseelf.cs.pub.ro/asm/res/cursuri/IOCLA_curs_02_Arhitectura_x86.pdf(contine un numar par de biti 1). Acest indicator este folosit de instructiunile

Curs2–Arhitecturax86 14

Imagineaunuiprocesînmemorie

Adreselogice(înprogram)

http://duartes.org/gustavo/blog/post/anatomy-of-a-program-in-memory/

Page 15: IOCLA curs 02 Arhitectura x86 - ERASMUS Pulseelf.cs.pub.ro/asm/res/cursuri/IOCLA_curs_02_Arhitectura_x86.pdf(contine un numar par de biti 1). Acest indicator este folosit de instructiunile

Curs2–Arhitecturax86 15

Adresareamemoriei

Page 16: IOCLA curs 02 Arhitectura x86 - ERASMUS Pulseelf.cs.pub.ro/asm/res/cursuri/IOCLA_curs_02_Arhitectura_x86.pdf(contine un numar par de biti 1). Acest indicator este folosit de instructiunile

Curs2–Arhitecturax86 16

Adresareamemoriei

calcululadreseilogice

:[++]]]Registrusegment

Registrudebaza

Registruindex

Deplasament

AdresadeoffsetAdresadesegment

Page 17: IOCLA curs 02 Arhitectura x86 - ERASMUS Pulseelf.cs.pub.ro/asm/res/cursuri/IOCLA_curs_02_Arhitectura_x86.pdf(contine un numar par de biti 1). Acest indicator este folosit de instructiunile

Curs2–Arhitecturax86 17

Adresareamemoriei

mov eax, [mybuffer + ebx + esi*4 + 9] ; un dword

mov ebx, mybuffer ; adresa lui mybuffer, deci valoare imediată

Page 18: IOCLA curs 02 Arhitectura x86 - ERASMUS Pulseelf.cs.pub.ro/asm/res/cursuri/IOCLA_curs_02_Arhitectura_x86.pdf(contine un numar par de biti 1). Acest indicator este folosit de instructiunile

Curs2–Arhitecturax86 18

Procesareaîntreruperilor

De citit: Capitol 14, fără 14.3

Page 19: IOCLA curs 02 Arhitectura x86 - ERASMUS Pulseelf.cs.pub.ro/asm/res/cursuri/IOCLA_curs_02_Arhitectura_x86.pdf(contine un numar par de biti 1). Acest indicator este folosit de instructiunile

Curs2–Arhitecturax86 19

Cesuntîntreruperile?

•  Intreruperilealtereazăfluxulprogramului*  Comportamentsimilarapeluluideprocedură*  Existădiferenţesemnificative

•  IntrerupereatransferăcontrolulcătreISR*  ISR=interruptserviceroutine,interrupthandler

•  LaterminareaISRprogramuloriginalcontinuă•  Intreruperile=modefficientdeatrataevenimente

neanticipate

Page 20: IOCLA curs 02 Arhitectura x86 - ERASMUS Pulseelf.cs.pub.ro/asm/res/cursuri/IOCLA_curs_02_Arhitectura_x86.pdf(contine un numar par de biti 1). Acest indicator este folosit de instructiunile

Curs2–Arhitecturax86 20

Intreruperivs.Proceduri

Intreruperi

•  Iniţiatedesoftwaresauhardware

•  Trateazăevenimenteanticipateșineanticipate

•  ISRsuntmereuînmemorie•  Suntidentificatecunumere•  registrulEFLAGSsalvat

automat

Proceduri

•  Iniţiatedoardesoftware•  Trateazăevenimente

anticipatedinprogram•  Suntîncărcatecuprogramul•  Suntidentificatecunume•  NusalveazăregistrulEFLAGS

Page 21: IOCLA curs 02 Arhitectura x86 - ERASMUS Pulseelf.cs.pub.ro/asm/res/cursuri/IOCLA_curs_02_Arhitectura_x86.pdf(contine un numar par de biti 1). Acest indicator este folosit de instructiunile

Curs2–Arhitecturax86 21

Taxonomiaîntreruperilor

Page 22: IOCLA curs 02 Arhitectura x86 - ERASMUS Pulseelf.cs.pub.ro/asm/res/cursuri/IOCLA_curs_02_Arhitectura_x86.pdf(contine un numar par de biti 1). Acest indicator este folosit de instructiunile

Curs2–Arhitecturax86 22

Declanșareauneiîntreruperi

1.  PushEFLAGSontothestack2.  ClearIF&TF(interruptandtrapflags)*  Sedezactiveazăalteîntreruperi

3.  PushCSandEIPontothestack4.  seîncarcăCS:EIPdinIDT(interruptdescriptiontable)

Page 23: IOCLA curs 02 Arhitectura x86 - ERASMUS Pulseelf.cs.pub.ro/asm/res/cursuri/IOCLA_curs_02_Arhitectura_x86.pdf(contine un numar par de biti 1). Acest indicator este folosit de instructiunile

Curs2–Arhitecturax86 23

InterruptFlag

•  IF(Interruptflag)[dez]activeazăîntreruperile•  IF==0→ nusepermitîntreruperi*  Instrucţiuneacli(clearinterrupts)*  LadeclanșareaintreruperiiIFdevine0*  Instrucţiuneasti(setinterrupts)

Page 24: IOCLA curs 02 Arhitectura x86 - ERASMUS Pulseelf.cs.pub.ro/asm/res/cursuri/IOCLA_curs_02_Arhitectura_x86.pdf(contine un numar par de biti 1). Acest indicator este folosit de instructiunile

Curs2–Arhitecturax86 24

ÎntoarcereadinISR

• UltimainstrucţiunedinISResteiret

• Acţiunileexecutatelairetsunt:1.  PopEIP2.  PopCS3.  PopEFLAGS

•  ISRsuntresponsiblepentru*  ArestauraTOATEregistrelefolosite*  Anulăsadatepestivă

Page 25: IOCLA curs 02 Arhitectura x86 - ERASMUS Pulseelf.cs.pub.ro/asm/res/cursuri/IOCLA_curs_02_Arhitectura_x86.pdf(contine un numar par de biti 1). Acest indicator este folosit de instructiunile

Curs2–Arhitecturax86 25

Excepţii

•  3tipuri:Fault,Trap,Abort•  Faultșitrapsuntdeclanșateîntreinstrucţiuni• Abortedeclanșatălaerorisevere*  Erorihardware*  Valoriinconsistenteînsistem

Page 26: IOCLA curs 02 Arhitectura x86 - ERASMUS Pulseelf.cs.pub.ro/asm/res/cursuri/IOCLA_curs_02_Arhitectura_x86.pdf(contine un numar par de biti 1). Acest indicator este folosit de instructiunile

Curs2–Arhitecturax86 26

FaultșiTrap

•  Fault»  Sedeclanșeazăînaintedeinstrucţiuneaîncauză»  Sereporneșteinstrucţiunea»  Exemplu:page-not-foundfault

•  Trap»  Sedeclanșeazădupăinstrucţiuneaîncauză»  NUsereporneșteinstrucţiunea»  Exemplu:Overflowexception(intreruperea4)»  Exemplu:întreuperidefinitedeutilizator

Page 27: IOCLA curs 02 Arhitectura x86 - ERASMUS Pulseelf.cs.pub.ro/asm/res/cursuri/IOCLA_curs_02_Arhitectura_x86.pdf(contine un numar par de biti 1). Acest indicator este folosit de instructiunile

Curs2–Arhitecturax86 27

Numeredeîntreruperirezervate

intrerupere Scop0 Divideerror1  Single-step2  Nonmaskableinterrupt(MNI)5  Breakpoint6  Overflow

13 Generalprotectionexception14 Pagefault16 Floatingpointerror

Page 28: IOCLA curs 02 Arhitectura x86 - ERASMUS Pulseelf.cs.pub.ro/asm/res/cursuri/IOCLA_curs_02_Arhitectura_x86.pdf(contine un numar par de biti 1). Acest indicator este folosit de instructiunile

Curs2–Arhitecturax86 28

Întreruperirezervate

• DivideErrorInterrupt*  Instrucţiuneadiv/idivcâtulnuîncapeîndestinaţie

•  Single-StepInterrupt*  DacăTrapFlagestesetat(TF==1)

»  CPUgenereazăautomatint1dupăexecuţiafiecăreiinstrucţiuni

*  folositorpentrudebugger• BreakpointInterrupt*  int 3încodmașinăesteunoctet(CCH)*  Cumestefolosităladebug?

• PagefaultInterrupt*  Seacceseazăopaginăvirtualăcarenuesteîncămapată*  SOaducepaginasauterminăprocesul

Page 29: IOCLA curs 02 Arhitectura x86 - ERASMUS Pulseelf.cs.pub.ro/asm/res/cursuri/IOCLA_curs_02_Arhitectura_x86.pdf(contine un numar par de biti 1). Acest indicator este folosit de instructiunile

Curs2–Arhitecturax86 29

Întreruperisoftware

•  Iniţiatedeexecuţiainstrucţiuniiint interrupt-number

interrupt-number=[0..255]

•  înLinuxint 0x80esteapeluldesistem*  180serviciidiferite*  EAXconţinenumărulserviciului

•  Funcţionalsimilarecuapeluriledeproceduri

Page 30: IOCLA curs 02 Arhitectura x86 - ERASMUS Pulseelf.cs.pub.ro/asm/res/cursuri/IOCLA_curs_02_Arhitectura_x86.pdf(contine un numar par de biti 1). Acest indicator este folosit de instructiunile

Curs2–Arhitecturax86 30

Exempleint 0x80 (Linux)

*  Tastaturașiecranulsunttratatecafișiere*  Fișierestandard,dejadeschise

»  Standardinput(stdin),descriptor0–  Dispozitivasociat:tastatura

»  Standardoutput(stdout)descriptor1–  Dispozitivasociat:terminal

»  Standarderror(stderr)descriptor2–  Dispozitivasociat:terminal

Page 31: IOCLA curs 02 Arhitectura x86 - ERASMUS Pulseelf.cs.pub.ro/asm/res/cursuri/IOCLA_curs_02_Arhitectura_x86.pdf(contine un numar par de biti 1). Acest indicator este folosit de instructiunile

Curs2–Arhitecturax86 31

Exempleint 0x80 (Linux)

•  CiteștedinfișierSystemcall3Inputs: EAX=3 EBX=filedescriptor ECX=pointertoinputbuffer EDX=max.#ofbytestoreadReturns: EAX=#ofbytesreadError: EAX=errorcode

Page 32: IOCLA curs 02 Arhitectura x86 - ERASMUS Pulseelf.cs.pub.ro/asm/res/cursuri/IOCLA_curs_02_Arhitectura_x86.pdf(contine un numar par de biti 1). Acest indicator este folosit de instructiunile

Curs2–Arhitecturax86 32

Exempleint 0x80 (Linux)

•  ScrieînfișierSystemcall4Inputs: EAX=4 EBX=filedescriptor ECX=pointertooutputbuffer EDX=#ofbytestowriteReturns: EAX=#ofbyteswrittenError: EAX=errorcode

Page 33: IOCLA curs 02 Arhitectura x86 - ERASMUS Pulseelf.cs.pub.ro/asm/res/cursuri/IOCLA_curs_02_Arhitectura_x86.pdf(contine un numar par de biti 1). Acest indicator este folosit de instructiunile

Curs2–Arhitecturax86 33

Proceduraputch; primește caracterul in AL. putch: pusha mov [temp_char],AL mov EAX,4 ; 4 = write mov EBX,1 ; 1 = std output (display) mov ECX,temp_char ; pointer to char buffer mov EDX,1 ; # bytes = 1 int 0x80 popa ret

Page 34: IOCLA curs 02 Arhitectura x86 - ERASMUS Pulseelf.cs.pub.ro/asm/res/cursuri/IOCLA_curs_02_Arhitectura_x86.pdf(contine un numar par de biti 1). Acest indicator este folosit de instructiunile

Curs2–Arhitecturax86 34

Proceduragetstr; primește EDI = buffer, ESI = lungimea getstr: pusha pushf mov EAX,3 ; file read service mov EBX,0 ; 0 = std input (keyboard) mov ECX,EDI ; pointer to input buffer mov EDX,ESI ; input buffer size int 0x80 dec EAX mov byte[EDI+EAX],0 ; append NULL character popf popa ret

Page 35: IOCLA curs 02 Arhitectura x86 - ERASMUS Pulseelf.cs.pub.ro/asm/res/cursuri/IOCLA_curs_02_Arhitectura_x86.pdf(contine un numar par de biti 1). Acest indicator este folosit de instructiunile

Curs2–Arhitecturax86 35

Întreruperihardware

•  Suntasincrone,produsedehardware*  Seaplicăunsemnalexternprocesului

•  Întreruperilehardwarepotfi*  Maskable*  Non-maskable

»  Întreruperearezervată2 (NMI)

Page 36: IOCLA curs 02 Arhitectura x86 - ERASMUS Pulseelf.cs.pub.ro/asm/res/cursuri/IOCLA_curs_02_Arhitectura_x86.pdf(contine un numar par de biti 1). Acest indicator este folosit de instructiunile

Curs2–Arhitecturax86 36

Cumsedeclanșeazăîntreruperilehardware?

•  ÎntreruperileNon-maskablesuntdeclanșatedepinulNMIalprocesorului*  Procesorulrăspundeîntotdeauna*  Nupoatefidezactivatprinprogram

•  ÎntreruperileMaskablesuntdeclanșatedepinulINTRalprocesorului*  declanșatedoardacăIF==1*  Mascatecucli,activatecusti

Page 37: IOCLA curs 02 Arhitectura x86 - ERASMUS Pulseelf.cs.pub.ro/asm/res/cursuri/IOCLA_curs_02_Arhitectura_x86.pdf(contine un numar par de biti 1). Acest indicator este folosit de instructiunile

Curs2–Arhitecturax86 37

Demo

• Programulbc–conversiifolosindobase,ibase•  curs-02-demo–sasm*  RegistreleEAX,AX,AH,AL*  EFLAGS*  EIP*  InstrucţiunileMOV,ADD,JMP

•  curs-02-demo–Makefile+gdb*  Comenzilebmain,r,n*  set$eax=0xffffffff*  set$eip=main*  Decomentaţiinstrucţiuneajmpșireasamblaţi

Page 38: IOCLA curs 02 Arhitectura x86 - ERASMUS Pulseelf.cs.pub.ro/asm/res/cursuri/IOCLA_curs_02_Arhitectura_x86.pdf(contine un numar par de biti 1). Acest indicator este folosit de instructiunile

Curs2–Arhitecturax86 38

Demo

• Programulbc–conversiifolosindobase,ibase•  curs-02-demo–sasm•  curs-02-demo–Makefile+gdb

• Atenţiela~/.gdbinit*  sasmfoloseștegdb!*  sasmdoarintroductiv

Page 39: IOCLA curs 02 Arhitectura x86 - ERASMUS Pulseelf.cs.pub.ro/asm/res/cursuri/IOCLA_curs_02_Arhitectura_x86.pdf(contine un numar par de biti 1). Acest indicator este folosit de instructiunile

Curs2–Arhitecturax86 39

Intrebări?