Számítógép architektúra

Slides:



Advertisements
Hasonló előadás
Szerver oldali programozás
Advertisements

Sor láncolt ábrázolással
1 Számítógépek felépítése 9. előadás I/O rendszerek.
Jt Java Feltételek, logikai kifejezések. jt 2 Logikai operátorok Logikai kifejezésekre alkalmazhatók a következő műveletek: 1. nem! 2. és&ill.&& 3. kizáró.
Máté: Architektúrák3. előadás1 Alapvető digitális logikai áramkörök Integrált áramkör (IC, Integrated Circuit, chip, lapka) 5x5 mm 2 szilícium darab kerámia.
Számítógépek felépítése 3. előadás CPU, utasítás ciklus, címzés
2009 Bevezetés a programozásba Krankovits Melinda.
Rekurzió (Horváth Gyula és Szlávi Péter előadásai felhasználásával)
Turbo Pascal Változók.
7. előadás (2005. április 12.) Láncolt lista File kezelés 1.
4. előadás (2005. március 8.) Pointerek Pointer aritmetika
Nem kombinációs áramkörök
Máté: Architektúrák3. előadás1 Alapvető digitális logikai áramkörök Integrált áramkör (IC, Integrated Circuit, chip, lapka) 5x5 mm 2 szilícium darab kerámia.
Máté: Architektúrák5. előadás1 String kezelő utasítások Az s forrás területet (DS:SI), a d cél területet pedig (ES:DI) címzi. A mnemonik végződése (B /
Máté: Architektúrák2. előadás1 Központi memória (2.9. ábra) A programok és adatok tárolására szolgál. Bit: a memória alapegysége, egy 0-t vagy 1-et tartalmazhat.
Csernoch Mária Adatábrázolás Csernoch Mária
A verem működése fpga-n
Készítette: Rummel Szabolcs Elérhetőség:
Mikroszámítógépek I 8085 processzor.
Mikroszámítógépek I 8085 processzor.
1 Programozás alapjai GEIAL312B (ANSI C) BSc (Bachelor of Science) / Alap képzés 2005/2006. őszi félév Miskolci Egyetem Általános Informatikai Tanszék.
PIC processzor és környezete
16. Verem műveletei Kaszab Gábor.
C++ Alapok, első óra Elemi típusok Vezérlési szerkezetek
2 tárolós egyszerű logikai gép vázlata („feltételes elágazás”)
Vizuális és web programozás II.
PHP I. Alapok. Mi a PHP? PHP Hypertext Preprocessor Szkriptnyelv –Egyszerű, gyors fejlesztés –Nincs fordítás (csak értelmező) Alkalmazási lehetőségek:
Fixpontos, lebegőpontos
Címzési módok, utasítások a CPU-ban Címértelmezés műv. kódadat műv. kód 0 1 cím adat cím adat közvetlen (immediat) adatmegadás rejtett (inheritent),
Programozás Operátorok C# -ban.
Relációs algebra. A relációs adatbáziskezelő nyelvek lekérdező utasításai a relációs algebra műveleteit valósítják meg. A relációs algebra a relációkon.
SQL.
C nyelv utasításai.
Aritmetikai áramkörök
Máté: Architektúrák5. előadás1 String kezelő utasítások Az s forrás területet (DS:SI), a d cél területet pedig (ES:DI) címzi. A mnemonik végződése (B /
Számítógép architektúra Címzésmódok. 2007Címzésmódok2-21 Operandusok egy operandus hossza lehet: –1 byte –2 byte (szó) –4 byte egy operandus lehet: –az.
Számítógép architektúra
Alkalmazások és operációs rendszerek optimizálása „Babeş-Bolyai” Tudományegyetem, Matematika-Informatika Kar Bevezetés. Elvárások előadás dr. Robu Judit.
Összetett adattípusok
Programozási Nyelvek (C++) Gyakorlat Gyak 02.
A Mikroprocesszor Második rész.
Ismétlés A pascal program szerkezete: program programnev; Programfej
Számítógép architektúrák
Rendezések és szövegkezelő függvények
Operátorok Értékadások
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
Egy második generációs gép (az IBM 7094) felépítése
Egy első generációs gép (az IAS) felépítése
A Mikroprocesszor Harmadik rész.
Objektum orientált programozás
Fixpontos, lebegőpontos
A Visual Basic nyelvi elemei
Számítógépek felépítése 3. előadás CPU, utasítás ciklus, címzés
BIOLÓGUS INFORMATIKA 2008 – 2009 (1. évfolyam/1.félév) 3. Előadás.
Algoritmusok és Adatszerkezetek Egy kifejezés lengyelformára hozása - bemutató.
Kiterjesztések szemantikája: Szemantikai tartomány : Adatoknak, vagy értékeknek egy nem üres halmazát szemantikai tartománynak nevezzük. Jelölése: D. Egy.
HEFOP 3.3.1–P /1.0A projekt az Európai Unió társfinanszírozásával, az Európa terv keretében valósul meg. 1 Számítógép architektúrák dr. Kovács.
Memóriakezelés feladatok Feladat: 12 bites címtartomány. 0 ~ 2047 legyen mindig.
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás I. 3. gyakorlat.
Számítógépek felépítése 4. előadás ALU megvalósítása, vezérlő egység
1 Számítógépek felépítése 5. előadás a CPU gyorsítása, pipeline, cache Dr. Istenes Zoltán ELTE-TTK.
Függvények, mutatók Csernoch Mária. Függvények függvény definíciója az értelmezési tartomány tetszőleges eleméhez hozzárendel egy értéket –függvény helyettesítési.
Paraméterátadás assembly nyelvű programokban
Építsünk Processzort Avagy mi is kell hozzá.
A Számítógépek felépítése, működési módjai
Számítógép architektúrák
A Számítógépek felépítése, működési módjai
Pipeline példák (IMSC, 2019).
Cache példák 2019 (IMSC).
Számítógépek felépítése 9. előadás I/O rendszerek
Előadás másolata:

Számítógép architektúra Utasítások – valós üzemmód

Utasítás Prefix Opkód ModR/M SIB Eltolás Közvetlen Mod Reg/ Opkód R/M max 4 1 byte-os prefix (opcionális) 1, 2 vagy 3 byte 1 byte, ha szükséges memória cím eltolása, 0, 1, 2 vagy 4 byte közvetlen érték, 0, 1, 2 vagy 4 byte 7 6 5 3 2 0 Mod Reg/ Opkód R/M 7 6 5 3 2 0 Skála Index Bázis 2007 Utasítások

Operandusok zéro, egy vagy két operandus első operandus – cél második opernadus – forrás forrás operandus lehet: regiszter – 8, 16 vagy 32 bites, memória közvetlen érték – 1, 2 vagy 4 byte cél operandus regiszter vagy memória cél és forrás operandus mérete meg kell egyezzen nem lehet két memória operandus 2007 Utasítások

Operandusok jelölése r8 – 8 bites regiszter: AL, CL, DL, BL, AH, CH, DH, BH r16 – 16 bites általános regiszter: AX, CX, DX, BX, SP, BP, SI vagy DI r32 – 32 bites általános regiszter: EAX, ECX, EDX, EBX, ESP, EBP, ESI vagy EDI Sreg – szegmensregiszter: ES, CS, SS, DS, FS, GS m8, m16, m32 – 8, 16 vagy 32 bites memória operandus r/m8, r/m16, r/m32 – 8, 16 vagy 32 bites regiszter vagy memória operandus imm8, imm16, imm32 – byte, szó vagy duplaszó közvetlen operandus 2007 Utasítások

Adatátviteli utasítások nem módosítják a jelzőbiteket 2007 Utasítások

MOV MOV cél, forrás cél ← forrás cél nem lehet a CS regiszter lehtséges operandusok MOV r/m8,r8 MOV r/m16,r16 MOV r/m32,r32 MOV r8,r/m8 MOV r16,r/m16 MOV r32,r/m32 MOV r/m16,Sreg MOV Sreg,r/m16 MOV r8,imm8 MOV r16,imm16 MOV r32,imm32 MOV r/m8,imm8 MOV r/m16,imm16 MOV r/m32,imm32 2007 Utasítások

MOV példák MOV AX, BX AX ← BX MOV CX, [eger] CX ← [eger], ahol eger egy 16 bites változó MOV AL, -5 AL ← -5 MOV CH, [BX + SI] CH ← [BX + SI] MOV DX, CS DX ← CS MOV AX, CL hibás, mivel AX 16, CL pedig 8 bites MOV [BX], [DI] hibás, mivel mindkét operandus változó MOV [BX + 10], 123 hibás, mivel nem lehet eldönteni, hogy 8 vagy 16 bitesek az operandusok; egy helyes változata például a következő: MOV WORD [BX + 10], 123 [BX + 10] ← 123; 16 bites op. MOV DS, AX DS ← AX MOV ES, DS hibás, mindkét operandus nem lehet Sreg MOV SS, 12DEh hibás, egyik operandus sem lehet konstans MOV CS, DX hibás, mivel CS nem lehet céloperandus 2007 Utasítások

XCHG adatok cseréje (Exchange data) XCHG cél, forrás cél ↔ forrás lehtséges operandusok XCHG r/m8, r8 XCHG r8, r/m8 XCHG r/m16, r16 XCHG r16, r/m16 XCHG r/m32, r32 XCHG r32, r/m32 2007 Utasítások

XCHG példák XCHG EAX, EBX EAX ↔EBX XCHG CX, [eger] CX ↔ [eger], ahol eger egy 16 bites változó XCHG CH, [BX + SI] CH ↔ [BX + SI] XCHG AX, CL hibás, mivel AX 16, CL pedig 8 bites XCHG [BX], [DI] hibás, mivel mindkét operandus változó XCHG AL, -5 hibás, mivel a –5 közvetlen érték, nem megengedett operandus 2007 Utasítások

XLAT Index dekódolása (Table Look-up Translation) XLAT forrás forrás csak dokumentál XLATB AL ← [DS:BX+AL] példa: MOV BX, eger MOV AL, 15 XLAT eger utasítássorozat az AL regiszterben visszaadja az eger címen kezdődő táblázat 15. byte-ját. 2007 Utasítások

PUSH Adatok mentése a verembe (Push data) PUSH forrás SP ← SP–2 vagy SP ← SP–4 [SP] ← forrás A veremszegmens címméret attributumától függően csökkenti SP-t 2-vel vagy 4-gyel lehtséges operandusok: PUSH r/m16 PUSH r/m32 PUSH imm8 PUSH imm16 PUSH imm32 PUSH Sreg 2007 Utasítások

PUSH példák veremszegmens címméret attributum 32: PUSH EAX SP ← SP–4; [SP] ← EAX PUSH CS SP ← SP–4; [SP] ← CS duplaszó hosszra veremszegmens címméret attributum 16: PUSH CS SP ← SP–2; [SP] ← CS PUSH [eger] SP ← SP–2; [SP] ← [eger], ahol eger egy 16 bites változó PUSH -15 SP ← SP–2; [SP] ← -15 szóhosszra (16 bit) előjelhelyesen kiterjesztve PUSH CL hibás, mivel CL 8 bites regiszter 2007 Utasítások

POP Adatok betöltése a veremből (Pop data) POP cél cél ← [SP] SP ← SP+2 vagy SP ← SP+4 A veremszegmens címméret attributumától függően növeli SP-t 2-vel vagy 4-gyel lehtséges operandusok: POP r/m16 POP r/m32 POP Sreg Sreg nem lehet a CS 2007 Utasítások

POP példák veremszegmens címméret attributum 32: POP AX AX ← [SP], SP ← SP+4 POP DS DS ← [SP], SP ← SP+4 veremszegmens címméret attributum 16: POP AX AX ← [SP], SP +2 POP [eger] [eger] ← [SP], SP ← SP+2, ahol eger egy 16 bites változó POP 15 hibás, mivel a cél nem lehet közvetlen érték POP CL hibás, mivel CL pedig 8 bites regiszter POP CS hibás, mivel a CS szegmensregiszter nem lehet a POP operandusa 2007 Utasítások

PUSHF Flagek mentése a verembe (Push flags) PUSHF SP ← SP–2 vagy SP ← SP–4 [SP] ← Flags A veremszegmens címméret attributumától függően csökkenti SP-t 2-vel vagy 4-gyel Példa: PUSHF SP ← SP–2; [SP] ← Flags 2007 Utasítások

POPF Flagek betöltése a veremből (Pop flags) POPF Flags ← [SP] SP ← SP+2 vagy SP ← SP+4 A veremszegmens címméret attributumától függően növeli SP-t 2-vel vagy 4-gyel Példa: POPF Flags ← [SP], SP ← SP+2 2007 Utasítások

PUSHA az általános regiszterek kimentése a verembe (Push all) PUSHA az általános regiszterek tartalmát a verembe menti AX, CX, DX, BX, SP (eredeti érték), BP, SI és DI sorrendben megfelel 8 PUSH utasításnak 2007 Utasítások

POPA Általános regiszterek betöltése a veremből (Pop all) POPA betölti az általános regiszterek tartalmát a veremből DI, SI, BP, (SP), BX, DX, CX és AX sorrendben. megfelel 8 POP utasításnak 2007 Utasítások

SAHF flagek betöltése AH-ból (Store AH into Flags) SAHF a Flags regiszter 7., 6., 4., 2. és 0. bitjeit (SF, ZF, AF, PF és CF jelzőbitek) betölti az AH regiszterből az 5., 3. és 1. bitek változatlanok maradnak 2007 Utasítások

LAHF flagek mentése AH-ba (Load Flags into AH) LAHF a Flags regiszter alacsonyabb helyiértékű byte-ját (az SF, ZF, AF, PF és CF jelzőbitek) az AH regiszterbe tölti 2007 Utasítások

LDS Távoli mutató betöltése (Load far pointer) LDS cél, forrás DS ← forrás + 2 vagy forrás + 4 lehetséges operandusok LDS r16,m16:16 LDS r32,m16:32 A memóriában a távoli mutatót 4 (6) byte-on ábrázoljuk, eltolás (offset), szegmens kezdőcím (szelektor) sorrendben. Egy távoli mutató a verembe is hasonló formában kerül. 2007 Utasítások

LDS példák LDS BX, [eger] BX ← [eger]; DS ← [eger + 2], ahol eger egy 32 bites változó LDS SI, [BX] SI ← [BX]; DS ← [BX + 2], ahol a BX regiszter egy 32 bites változóra mutat LDS SI, BX hibás, mivel a forrás egy regiszter 2007 Utasítások

LES, LFS, LGS, LSS távoli mutató betöltése (Load far pointer) ugyanúgy működik,mint az LDS, DS regiszter helyett az ES,FS, GS vagy SS szegmensregisztereket használva lehetséges operandusok LSS r16,m16:16 LSS r32,m16:32 LES r16,m16:16 LES r32,m16:32 LFS r16,m16:16 LFS r32,m16:32 LGS r16,m16:16 LGS r32,m16:32 2007 Utasítások

LEA Effektív cím kiszámítása (Load effective address) LEA cél, forrás cél ← offset forrás lehetséges operandusok LEA r16,m LEA r32,m Példák: LEA SI, [eger] SI ← offset eger, ahol eger egy memória operandus LEA DI, [BX+5] DI ← BX+5 LEA BX, [BP+SI+5] BX ← BP+SI+5 LEA DI, BX hibás, mivel a forrás egy regiszter 2007 Utasítások

Aritmetikai utasítások értelemszerűen módosítják a jelzőbiteket 2007 Utasítások

ADD Összeadás (Add) – két egész szám összeadása ADD cél, forrás cél ← cél + forrás módosított jelzőbitek: OF, SF, ZF, AF, CF és PF lehetséges operandusok: ADD r/m8,imm8 ADD r/m16,imm16 ADD r/m32,imm32 ADD r/m16,imm8 ADD r/m32,imm8 ADD r/m8,r8 ADD r/m16,r16 ADD r/m32,r32 ADD r8,r/m8 ADD r16,r/m16 ADD r32,r/m32 2007 Utasítások

ADD példák ADD AX, BX AX ← AX + BX ADD CX, [eger] CX ← CX + [eger], ahol eger egy 16 bites változó ADD CH, DL CH ← CH + DL ADD DX, -1234 DX ← DX + (-1234) ADD [SI], AX [SI] ← [SI] + AX, ahol SI egy 16 bites változó címét tartalmazza ADD SI, BX SI ← SI + BX ADD AX, BL hibás, mivel AX 16, BL pedig 8 bites ADD [SI], [eger] hibás, mivel mindkét operandus változó 2007 Utasítások

ADC Összeadás átvitellel (Add with carry) – az összeadás eredményhez hozzáadja az átviteli jelzőbit (carry flag) értékét is ADD cél, forrás cél ← cél + forrás + CF módosított jelzőbitek: OF, SF, ZF, AF, CF és PF lehetséges operandusok – mint az ADD-nél 2007 Utasítások

ADC példák ADC AX, BX AX ← AX + BX + CF ADC DX, -12 DX ← DX + (-12) + CF ADC [ES:SI], AX ES:[SI] ← [SI] + AX + CF, ahol SI egy járulékos szegmensbeli (ES) 16 bites változó címét tartalmazza ADC AX, BL hibás, mivel AX 16, BL pedig 8 bites ADC -1234, DX hibás, mivel a -1234 nem lehet céloperandus a DX:AX regiszterpárban tárolt 32 bites értékhez adja hozzá a CX:BX regiszterpárban tárolt, szintén 32 bites értéket: ADD AX, BX AX ← AX + BX, és beállítja a CF értékét ha van átvitel ADC DX, CX DX ← DX + CX + CF 2007 Utasítások

SUB kivonás (Subtract) két egész szám különbsége SUB cél, forrás cél ← cél – forrás módosított jelzőbitek: OF, SF, ZF, AF, CF és PF lehetséges operandusok – mint az ADD-nél 2007 Utasítások

SUB példák SUB AX, BX AX ← AX – BX SUB CX, [eger] CX ← CX – [eger], ahol eger egy 16 bites változó SUB CH, DL CH ← CH – DL SUB DX, -1234 DX ← DX – (-1234) SUB [SI], AX [SI] ← [SI] – AX, ahol SI egy 16 bites változó címét tartalmazza SUB SI, BX SI ← SI – BX SUB AX, BL hibás, mivel AX 16, BL pedig 8 bites SUB [SI], [eger] hibás, mivel mindkét operandus változó 2007 Utasítások

SBB Kivonás kölcsönkéréssel (Subtract with borrow) a kivonás eredményéből kivonja a CF értékét SBB cél, forrás cél ← cél – (forrás + CF) módosított jelzőbitek: OF, SF, ZF, AF, CF és PF lehetséges operandusok – mint az ADD-nél 2007 Utasítások

SBB példák SBB AX, BX AX ← AX – (BX + CF) SBB DX, -12 DX ← DX – (-12 + CF) SBB ES:[SI], AX ES:[SI] ← [SI] – (AX + CF), ahol SI egy 16 bites változó címét tartalmazza az ES által jelölt szegmensen belül SBB AX, BL hibás, mivel AX 16, BL pedig 8 bites SBB -1234, DX hibás, mivel a -1234 nem lehet céloperandus 2007 Utasítások

MUL előjel nélküli szorzás (Multiply) két előjel nélküli egész szám szorzata MUL forrás módosított jelzőbitek: OF, CF beállítva, ha átvitel van a magasabb helyiértékű regiszterbe (AH,DX,EDX) lehetséges operandusok: MUL r/m8 MUL r/m16 MUL r/m32 Operandus mérete Szorzandó Szorzó Szorzat byte AL r/m8 AX word r/m16 DX:AX dword EAX r/m32 EDX:EAX 2007 Utasítások

MUL példák MUL EBX EDX:EAX ← EAX * EBX MUL word [eger] DX:AX ← AX * [eger], ahol eger egy 16 bites változó MUL DL AX ← AL * DL MUL 1234 hibás, mivel közvetlen operandus nem megengedett MUL [SI] hibás, mivel az SI regiszter által mutatott változó mérete nem ismert, helyesen: MUL byte [SI] AX ← AL * [SI], ahol SI egy 8 bites változó címét tart. MUL AX, BL hibás, mivel két operandust adtunk meg 2007 Utasítások

DIV előjel nélküli osztás (Divide) két előjel nélküli egész szám maradékos osztása DIV forrás nem állítja a jelzőbiteket, túlcsorduláskor kivétel lép fel lehetséges operandusok: DIV r/m8 DIV r/m16 DIV r/m32 Operandus mérete Osztandó Osztó Hányados Maradék word / byte AX r/m8 AL AH dword / word DX:AX r/m16 DX qword / dword EDX:EAX r/m32 EAX EDX 2007 Utasítások

DIV példák DIV EBX EAX ← EDX:EAX div EBX; EDX ← EDX:EAX mod EBX DIV word[eger] AX ← DX:AX div [eger]; DX ← DX:AX mod [eger], ahol eger egy 16 bites változó DIV CL AL ← AX div CL; AH ← AX mod CL DIV 1234 hibás, mivel közvetlen operandus nem megengedett DIV [SI] hibás, mivel az SI regiszter által mutatott változó mérete nem ismert, helyesen: DIV byte [SI] AL ← AX div [SI]; AH ← AX mod [SI], ahol SI egy 8 bites változó címét tart. DIV AX, BL hibás, mivel két operandust adtunk meg 2007 Utasítások

IMUL előjeles szorzás (Integer multiply) két előjeles egész szám szorzása a szorzást kétszeresen méreten végzi el módosított jelzőbitek: OF, CF beállítva, ha a szorzat mérete meghaladja a az operandusok méretét (átvitel van a magasabb helyiértékű regiszterbe vagy a második és harmadik alak esetén elveszít a szám elejéről értékes számjegyeket) három alak lehetséges 2007 Utasítások

IMUL – első alak megegyezik a MUL utasítással, csak előjeles számokkal dolgozik 2007 Utasítások

IMUL – második alak IMUL cél, forrás cél ← cél * forrás a cél és a forrás operandusok hossza megegyezik, így az adott méretet meghaladó szorzat esetén az eredmény magasabb helyiértékű bitjei elvesznek alkalmazható előjel nélküli operandusokkal is lehetséges operandusok: IMUL r16,r/m16 IMUL r32,r/m32 IMUL r16,imm8 IMUL r32,imm8 IMUL r16,imm16 IMUL r32,imm32 2007 Utasítások

IMUL – harmadik alak IMUL cél, forrás, érték cél ← forrás * érték a cél és a forrás operandusok hossza megegyezik, így az adott méretet meghaladó szorzat esetén az eredmény magasabb helyiértékű bitjei elvesznek alkalmazható előjel nélküli operandusokkal is lehetséges operandusok: IMUL r16,r/m16,imm8 IMUL r32,r/m32,imm8 IMUL r16,r/m16,imm16 IMUL r32,r/m32,imm32 2007 Utasítások

IMUL példák IMUL BX DX:AX ← AX * BX IMUL ECX EDX:EAX ← EAX * ECX IMUL word [eger] DX:AX ← AX * [eger], ahol eger egy 16 bites változó IMUL DL AX ← AL * DL IMUL 1234 hibás, mivel közvetlen operandus nem megengedett IMUL [SI] hibás, mivel az SI regiszter által mutatott változó mérete nem ismert, helyesen: IMUL byte ptr [SI] AX ← AL * [SI], ahol SI egy 8 bites változó címét tartalmazza 2007 Utasítások

IMUL példák (2) IMUL CX, -23 CX ← CX * (-23) IMUL CX, DX CX ← CX * DX IMUL EBX, dword[eger] EBX ← EBX * eger, ahol eger egy 32 bites változó IMUL CL, DL hibás, mivel 8 bites operan- dusok nem megengedettek IMUL word[eger], DX hibás, mivel a cél operandus nem lehet memória operandus IMUL EBX,ECX, -23 EBX ← ECX * (-23) IMUL BX, word[eger], 10 BX ← eger * 10, ahol eger egy 16 bites változó IMUL CX, AX, BL hibás, mivel a harmadik op. nem közvetlen érték IMUL [eger], DX, 25 hibás, mivel a cél operandus nem lehet memória operandus 2007 Utasítások

IMUL végrehajtása IMUL BL AX 1 AL = –5 BX 1 BL = 3 AX 1 AX = –15 2007 8 7 AX 1 AL = –5 15 8 7 BX 1 BL = 3 15 8 7 AX 1 AX = –15 2007 Utasítások

IDIV előjeles osztás (Integer Divide) két előjeles egész szám maradékos osztása IDIV forrás nem állítja a jelzőbiteket, túlcsorduláskor kivétel lép fel a maradék előjele megegyezik az osztandó előjelével lehetséges operandusok: DIV r/m8 DIV r/m16 DIV r/m32 Operandus mérete Osztandó Osztó Hányados Maradék word / byte AX r/m8 AL AH dword / word DX:AX r/m16 DX qword / dword EDX:EAX r/m32 EAX EDX 2007 Utasítások

IDIV példák IDIV EBX EAX ← EDX:EAX div EBX; EDX ← EDX:EAX mod EBX IDIV word[eger]AX ← DX:AX div [eger]; DX ← DX:AX mod [eger], ahol eger egy 16 bites változó IDIV CL AL ← AX div CL; AH ← AX mod CL IDIV 1234 hibás, mivel közvetlen operandus nem megengedett IDIV [SI] hibás, mivel az SI regiszter által mutatott változó mérete nem ismert, helyesen: IDIV byte [SI] AL ← AX div [SI]; AH ← AX mod [SI], ahol SI egy 8 bites változó címét tart. IDIV AX, BL hibás, mivel két operandust adtunk meg 2007 Utasítások

IDIV végrehajtása IDIV BL AX 1 AX = –17 BX 1 BL = 3 AX 1 AL = –5 15 8 7 AX 1 AX = –17 15 8 7 BX 1 BL = 3 15 8 7 AX 1 AL = –5 AH = –2 2007 Utasítások

CBW előjelhelyes kiterjesztés szóra (Convert byte to word) – az AL regiszter tartalmát előjelhelyesen kiterjeszti az AX regiszterre (az AL regiszter előjelbitjét átmásolja az AH regiszter minden bitjébe). előjeles osztás előtt használjuk, ha az osztandó csak az AL regiszterben van. CBW AX← AL előjelhelyes kiterjesztése nem módosítja a jelzőbiteket 2007 Utasítások

CBW végrehajtása CBW CBW AX 1 AL = 5 AX 1 AX = 5 AX 1 AL = –5 AX 1 15 8 7 AX 1 AL = 5 15 8 7 AX 1 AX = 5 CBW 15 8 7 AX 1 AL = –5 15 8 7 AX 1 AX = –5 2007 Utasítások

CWD előjelhelyes kiterjesztés duplaszóra (Convert word to doubleword) – 16 bites üzemmód – az AX regiszter tartalmát előjelhelyesen kiterjeszti a DX:AX regiszterpárra (az AX regiszter előjelbitjét átmásolja a DX regiszter minden bitjébe). előjeles osztás előtt használjuk, ha az osztandó csak az AX regiszterben van. CWD DX:AX← AX előjelhelyes kiterjesztése nem módosítja a jelzőbiteket 2007 Utasítások

CWDE előjelhelyes kiterjesztés dupla szóra (Convert word to doubleword) – 32 bites üzemmód – az AX regiszter tartalmát előjelhelyesen kiterjeszti az EAX regiszterre (az AX regiszter előjelbitjét átmásolja az EAX regiszter első 16 bitjébe). 32 bites előjeles osztás előtt használjuk, ha az osztandó csak az AX regiszterben van. CWDE EAX← AX előjelhelyes kiterjesztése nem módosítja a jelzőbiteket 2007 Utasítások

CDQ előjelhelyes kiterjesztés 8 byte-ra (Convert doubleword to quadword) – 32 bites üzemmód – az EAX regiszter tartalmát előjelhelyesen kiterjeszti a EDX:EAX regiszterpárra (az EAX regiszter előjel-bitjét átmásolja a EDX regiszter minden bitjébe). előjeles osztás előtt használjuk, ha az osztandó csak az EAX regiszterben van. CDQ EDX:EAX← EAX előjelhelyes kiterjesztése nem módosítja a jelzőbiteket 2007 Utasítások

NEG előjelcsere (Negate) a cél operandus 2-es komplementumát képezi, ami az előjel megváltoztatásának felel meg NEG cél cél ← 0 – cél jelzőbitek: ha az operandus 0 a CF-et 0-ra, ellenkező esetben 1-re állítja; az OF, SF, ZF, AF és PF értékét értelemszerűen állítja. lehetséges operandusok: NEG r/m8 NEG r/m16 NEG r/m32 2007 Utasítások

NEG példák NEG BX BX ← 0 – BX NEG ECX ECX ← 0 – ECX NEG [eger] hibás, mivel az operandus mérete nem ismert NEG word [eger] eger ← 0 – eger, ahol eger egy 16 bites változó NEG [BX] hibás, mivel az operandus mérete nem ismert NEG byte [BX] [BX] ← 0 – [BX], ahol BX egy 8 bites változóra mutat NEG 1234 hibás, közvetlen operandus nem megengedett 2007 Utasítások

INC Inkrementálás (Increment) – a cél operandus értékét eggyel növeli anélkül, hogy a CF-et módosítaná INC cél cél ← cél + 1 jelzőbitek: CF-et nem módosítja. OF, SF, ZF, AF és PF jelzőbitek értékét értelemszerűen állítja. lehetséges operandusok: INC r/m8 INC r/m16 INC r/m32 2007 Utasítások

DEC dekrementálás (Decrement) – a cél operandus értékét eggyel csökkenti anélkül, hogy a CF-et módosítaná DEC cél cél ← cél – 1 jelzőbitek: CF-et nem módosítja. OF, SF, ZF, AF és PF jelzőbitek értékét értelemszerűen állítja. lehetséges operandusok: DEC r/m8 DEC r/m16 DEC r/m32 2007 Utasítások

INC és DEC példák INC BX BX ← BX + 1 INC [eger] hibás, mivel az op. mérete nem ismert INC word [eger] [eger] ←[eger] + 1, ahol eger 16 bites v. INC 1234 hibás, mivel közvetlen op. nem megengedett DEC ECX ECX ← ECX – 1 DEC [BX] hibás, mivel az op. mérete nem ismert DEC byte [BX] [BX] ← [BX] – 1, ahol BX egy 8 bites változóra mutat DEC 1234 hibás, mivel közvetlen op. nem megengedett 2007 Utasítások

CMP operandusok összehasonlítása (Compare) – a cél operandusból kivonja a forrás operandust és beállítja a jelzőbiteket anélkül, hogy a kivonás eredményét megjegyezné CMP cél, forrás temp ← cél – forrás módosított jelzőbitek: OF, SF, ZF, AF, CF és PF lehetséges operandusok – mint az ADD-nél 2007 Utasítások

Logikai utasítások

NOT Bitenkénti logikai tagadás (Logical bitwise not) – a cél operandust bitenként tagadja, azaz 1-es bitből 0, 0-ból 1-es lesz NOT cél cél ← NOT cél nem módosítja a jelzőbiteket lehetséges operandusok NOT r/m8 NOT r/m16 NOT r/m32 2007 Utasítások

AND Bitenkénti logikai és (Logical bitwise and) – a két operandus bitenkénti konjunkcióját képezi. Egy bit értéke 1 lesz, ha mind a két megfelelő bit 1-es, különben 0. AND cél, forrás cél ← cél AND forrás jelzőbitek: az OF és CF jelzőbiteket törli, az SF, ZF és PF-et értelemszerűen állítja, az AF változatlan marad lehetséges operandusok – mint az ADD-nél 2007 Utasítások

XOR Bitenkénti logikai kizáró vagy (Logical bitwise exclusive or) – a két operandus bitenkénti kizárólagos vagy-ot képezi. Egy bit értéke 0 lesz, ha a két megfelelő bit megegyezik, különben értéke 1. XOR cél, forrás cél ← cél XOR forrás jelzőbitek: az OF és CF jelzőbiteket törli, az SF, ZF és PF-et értelemszerűen állítja, az AF változatlan marad lehetséges operandusok – mint az ADD-nél 2007 Utasítások

OR Bitenkénti logikai vagy (Logical bitwise or) – a két operandus bitenkénti diszjunkcióját képezi. Egy bit értéke 0 lesz, ha mind a két megfelelő bit 0, különben értéke 1 . OR cél, forrás cél ← cél OR forrás jelzőbitek: az OF és CF jelzőbiteket törli, az SF, ZF és PF-et értelemszerűen állítja, az AF változatlan marad lehetséges operandusok – mint az ADD-nél 2007 Utasítások

TEST Bitenkénti logikai teszt (Logical bitwise test) – bitenkénti AND utasítást végez, beállítja a jelzőbiteket, de az eredményt nem jegyzi meg. TEST cél, forrás temp ← cél AND forrás jelzőbitek: az OF és CF jelzőbiteket törli, az SF, ZF és PF-et értelemszerűen állítja, az AF változatlan marad lehetséges operandusok – mint az ADD-nél 2007 Utasítások

AND és XOR végrehajtása 15 8 7 AX 1 15 8 7 BX 1 AND AX, BX 15 8 7 AX 1 XOR AX, BX 15 8 7 AX 1 2007 Utasítások

Logikai utasítások alkalmazása regiszter nullázása: XOR AL,AL adott bitek értékének módosítása – megfelelő maszk használata bitek lenullázása AND BL,0DEh – 0 és 5-ös bit nullázása 7 A L 1 XOR 7 B L 5 1 AND 2007 Utasítások

Logikai utasítások alkalmazása bitek beállítása OR BL,28h – 3 és 5-ös bit beállítása bitek invertálása XOR BL,70h – 4, 5 és 6-os bit invertálása adott bit lekérdezése TEST BL,10h – 4-es bit lekérdezése 7 B L 5 3 1 OR 7 B L 6 5 4 1 XOR 7 B L 4 ZF 1 TEST 2007 Utasítások

Eltolások és forgatások az operandust jobbra vagy balra eltolja vagy elforgatja az eltolás értéke a 80386-os processzorig csak 1 lehet, de akkor is ki kell írni ha több pozícióval akarunk eltolni vagy forgatni az eltolás (forgatás) mértékét a CL regiszterben lehet megadni 2007 Utasítások

SHR Bitek eltolása jobbra (Shift right) – a cél operandus bitjeit jobbra tolja a második operandus által megadott pozicióval, a legmagasabb helyiértékű bit 0 lesz, az utolsó kifutó bit a CF-be kerül (előjel nélküli osztás 2i) SHR cél, számláló cél ← cél eltolt értéke jelzőbitek: CF az utolsó kifutó bitet jegyzi meg, az SF, ZF és PF-et értelemszerűen állítja, OF-et csak az 1 bites művelet állítja, az eredeti operandus legmagasabb helyiértékű bitjére az AF változatlan marad 2007 Utasítások

SHR lehetséges operandusok végrehajtás 1 x 1 SHR r/m8,1 SHR r/m8,CL SHR r/m8,imm8 SHR r/m16,1 SHR r/m16,CL SHR r/m16,imm8 SHR r/m32,1 SHR r/m32,CL SHR r/m32,imm8 végrehajtás 15 8 7 CF 1 x 15 8 7 CF 1 2007 Utasítások

SHL Bitek eltolása balra (Shift left) – a cél operandus bitjeit balra tolja a második operandus által megadott pozicióval, a legalacsonyabb helyiértékű bit 0 lesz, az utolsó kifutó bit a CF-be kerül (szorzás 2i-nel) SHL cél, számláló cél ← cél eltolt értéke jelzőbitek: CF az utolsó kifutó bitet jegyzi meg, az SF, ZF és PF-et értelemszerűen állítja, OF-et csak az 1 bites művelet állítja, 0 lesz, ha az eredeti operandus legmagasabb helyiértékű két bitjére megegyezik az AF változatlan marad 2007 Utasítások

SHL lehetséges operandusok végrehajtás x 1 1 SHL r/m8,1 SHL r/m8,CL SHL r/m8,imm8 SHL r/m16,1 SHL r/m16,CL SHL r/m16,imm8 SHL r/m32,1 SHL r/m32,CL SHL r/m32,imm8 végrehajtás CF 15 8 7 x 1 CF 15 8 7 1 2007 Utasítások

SAR Bitek aritmetikai eltolása jobbra (Shift arithmetic right) – a cél operandus bitjeit jobbra tolja a második operandus által megadott pozicióval, az előjel bitet ismétli, az utolsó kifutó bit a CF-be kerül (előjeles osztás 2i-nel) SAR cél, számláló cél ← cél eltolt értéke jelzőbitek: CF az utolsó kifutó bitet jegyzi meg, az SF, ZF és PF-et értelemszerűen állítja, OF-et csak az 1 bites művelet állítja, az eredeti operandus legmagasabb helyiértékű bitjére az AF változatlan marad 2007 Utasítások

SAR lehetséges operandusok végrehajtás 1 x 1 SAR r/m8,1 SAR r/m8,CL SAR r/m8,imm8 SAR r/m16,1 SAR r/m16,CL SAR r/m16,imm8 SAR r/m32,1 SAR r/m32,CL SAR r/m32,imm8 végrehajtás 15 8 7 CF 1 x 15 8 7 CF 1 2007 Utasítások

SAL megegyzik SHL-lel (szorzásnál nincs különbség az előjeles és előjel nélküli művelet között) 2007 Utasítások

ROR Bitek forgatása jobbra (Rotate right) – a cél operandus bitjeit jobbra forgatja a második operandus által megadott pozicióval, az utolsó kifutó bit a CF-be kerül ROR cél, számláló cél ← cél elforgatott értéke jelzőbitek: CF az utolsó kifutó bitet jegyzi meg, OF-et csak az 1 bites művelet állítja, XOR az eredeti operandus legmagasabb helyiértékű két bitjére az SF, ZF, AF és PF változatlan marad 2007 Utasítások

ROR lehetséges operandusok végrehajtás 1 x 1 ROR r/m8,1 ROR r/m8,CL ROR r/m8,imm8 ROR r/m16,1 ROR r/m16,CL ROR r/m16,imm8 ROR r/m32,1 ROR r/m32,CL ROR r/m32,imm8 végrehajtás 15 8 7 CF 1 x 15 8 7 CF 1 2007 Utasítások

ROL Bitek forgatása balra (Rotate left) – a cél operandus bitjeit balra forgatja a második operandus által megadott pozicióval, az utolsó kifutó bit a CF-be kerül ROL cél, számláló cél ← cél elforgatott értéke jelzőbitek: CF az utolsó kifutó bitet jegyzi meg, OF-et csak az 1 bites művelet állítja, XOR az eredmény legmagasabb helyiértékű bitje és az új CF az SF, ZF, AF és PF változatlan marad 2007 Utasítások

ROL lehetséges operandusok végrehajtás x 1 1 ROL r/m8,1 ROL r/m8,CL ROL r/m8,imm8 ROL r/m16,1 ROL r/m16,CL ROL r/m16,imm8 ROL r/m32,1 ROL r/m32,CL ROL r/m32,imm8 végrehajtás CF 15 8 7 x 1 CF 15 8 7 1 2007 Utasítások

RCR Bitek forgatása átviteljelzőn át jobbra (Rotate through carry right) – a cél operandus CF-fel kiegészített bitjeit jobbra forgatja a második operandus által megadott pozicióval végrehajtás 15 8 7 CF 1 x 15 8 7 CF x 1 2007 Utasítások

RCL Bitek forgatása átviteljelzőn át balra (Rotate through carry left) – a cél operandus CF-fel kiegészített bitjeit balra forgatja a második operandus által megadott pozicióval végrehajtás CF 15 8 7 x 1 CF 15 8 7 1 x 2007 Utasítások

Karakterlánc-feldolgozó utasítások az operandusokat nem kell megadni forrásoperandus címe a DS:(E)SI regiszterpárban céloperandus címe az ES:(E)DI regiszterpárban az SI ill. DI regisztereket értelemszerűen, automatikusan módosítják (növelik vagy csökkentik) 1-, 2- vagy 4-gyel a DF kapcsolóbit mutatja meg a feldolgozás irányát (az elejétől a vége felé,vagy a végétől az eleje felé haladva) byte, szó illetve duplaszó változat, a mnemonikus kód utolsó betűje B, W vagy D egy utasítás a karakterlánc egy elemét dolgozza fel a teljes lánc feldolgozásához a REP előtag szükséges 2007 Utasítások

MOVSB, MOVSW, MOVSD Karakterlánc másolása (Move from string to string) – a DS:(E)SI címen levő byte-ot, szót vagy duplaszót átmásolja az ES:(E)DI címre, majd megfelelően módosítja az SI és DI regisztereket [ES:(E)DI] ← [DS:(E)SI] az SI és DI regiszterek módosítása nem állítja a jelzőbiteket 2007 Utasítások

CMPSB, CMPSW, CMPSD Karakterláncok összehasonlítása (Compare strings) – a cél operandusból kivonja a forrás operandust és beállítja a jelzőbiteket anélkül, hogy a kivonás eredményét megjegyezné temp ← [ES:(E)DI] – [DS:(E)SI] az SI és DI regiszterek módosítása módosított jelzőbitek: OF, SF, ZF, AF, CF és PF 2007 Utasítások

LODSB, LODSW, LODSD Karakterlánc betöltése (Load string) – a DS:(E)SI címen levő byte-ot, szót vagy duplaszót betölti az AL, AX vagy EAX regiszterbe, majd megfelelően módosítja az SI regisztert AL ← [DS:(E)SI] LODSB AX ← [DS:(E)SI] LODSW EAX ← [DS:(E)SI] LODSD az SI regiszter módosítása nem állítja a jelzőbiteket 2007 Utasítások

STOSB, STOSW, STOSD Karakterlánc mentése (Store string) – az AL, AX vagy EAX regisztert kimenti az ES:(E)DI címre, majd megfelelően módosítja a DI regisztert [ES:(E)DI] ← AL STOSB [ES:(E)DI] ← AX STOSW [ES:(E)DI] ← EAX STOSD a DI regiszter módosítása nem állítja a jelzőbiteket 2007 Utasítások

SCASB, SCASW, SCASD Keresés karakterláncban (Scan string) – az AL, AX vagy EAX regiszter tartalmát összehasonlítja az ES:(E)DI címen levő byte-tal, szóval vagy duplaszóval, beállítja a jelzőbiteket, majd megfelelően módosítja a DI regisztert temp ← AL – [ES:(E)DI] SCASB temp ← AX – [ES:(E)DI] SCASW temp ← EAX – [ES:(E)DI] SCASD a DI regiszter módosítása módosított jelzőbitek: OF, SF, ZF, AF, CF és PF 2007 Utasítások

STD irányjelző bit beállítása (Set direction flag) – 1-re állítja az irányjelző bitet DF ← 1 a többi jelzőbit változatlan marad a karakterláncok feldolgozását befolyásolja, a string végétől halad az eleje felé a string műveletek csökkentik az SI illetve DI regiszter tartalmát 2007 Utasítások

CLD irányjelző bit törlése (Clear direction flag) – 0-ra állítja az irányjelző bitet DF ← 0 a többi jelzőbit változatlan marad a karakterláncok feldolgozását befolyásolja, a string elejétől halad a vége felé (alapértelmezés) a string műveletek növelik az SI illetve DI regiszter tartalmát 2007 Utasítások

REP Karakterlánc-művelet ismétlés előtag (Repeat prefix) REP sművelet Amíg CX  0 ismételd sművelet CX ← CX – 1 Amíg vége Példa – karakterlánc másolása: MOV SI, a MOV DI, b MOV CX, 5 REP MOVSB 2007 Utasítások

REPE / REPZ Ismétlés, ha ZF = 1 (Repeat if equal / zero) REPE sművelet REPZ sművelet Amíg CX  0 ismételd sművelet CX ← CX – 1 Ha ZF = 0 Kilép amíg Amíg vége Példa – első különböző karakter megkeresése: MOV SI, a MOV DI, b MOV CX, 25 REPE CMPSB 2007 Utasítások

REPNE / REPNZ Ismétlés, ha ZF = 0 (Repeat if not equal / not zero) REPNE sművelet REPNZ sművelet Amíg CX  0 ismételd sművelet CX ← CX – 1 Ha ZF = 1 Kilép amíg Amíg vége Példa – első „a” betű megkeresése: MOV DI, s MOV CX, 25 MOV AL, 61h REPNE SCASB 2007 Utasítások

Végrehajtás-vezérlő utasítások 2007 Utasítások

Ugró utasítások Az IP (EIP) illetve CS regiszterek tartalmát módosítják lehetnek rövid (short) – relatív ugrás, az (E)IP regiszterhez előjel-helyesen hozzáadja az operandusként szereplő közvetlen értéket (8 bit, ugrás előre max 127, vagy vissza max 128 byte) közeli (near) – a megadott cím ugyanabban a szegmensben van, csak az (E)IP regisztert módosítja relatív – az (E)IP regiszterhez előjel-helyesen hozzáadja az operandus-ként szereplő közvetlen értéket (2 vagy 4 byte) abszolut – indirekt, a regiszterben vagy memóriában megadott címet betölti az (E)IP regiszterbe távoli (far) – egy másik szegmensbe történő ugrás, a CS és (E)IP regisztereket módosítja a címet megadhatjuk címkével (relatív ugrás esetén is) vagy regiszter vagy memória operandusként. 2007 Utasítások

JMP Feltétel nélküli ugrás (Unconditional jump) – a vezérlést átadja a program egy más pontjára JMP cím short near far JMP rel8 JMP rel16 JMP ptr16:16 JMP rel32 JMP ptr16:32 JMP r/m16 JMP m16:16 JMP r/m32 JMP m16:32 2007 Utasítások

Jcc Feltételes ugrás (Jump if Condition Is Met) – ugrás, ha a jelzőbitek megfelelően vannak beállítva csak relatív ugrás lehet előjel nélküli összehasonlítás: JA – jump if above CF = 0 és ZF = 0 JNBE – jump if not below or equal JAE – jump if above or equal CF = 0 JNB – jump if not below JNC – jump if not carry JB – jump if below CF = 1 JNAE – jump if not abive or equal JC – jump if carry JNA – jump if not above CF = 1 vagy ZF = 1 JBE – jump if below or equal 2007 Utasítások

Jcc előjeles összehasonlítás egyenlőség JG – jump if greater ZF = 0 és SF = OF JNLE – jump if not less or equal JGE – jump if greater or equal SF = OF JNL – jump if not less JL – jump if less SF  OF JNGE – jump if not greater or equal JLE – jump if less or equal ZF = 1 vagy SF  OF JNG – jump if not greater egyenlőség JZ – jump if zero ZF = 1 JE – jump if equal JNZ – jump if not zero ZF = 0 JNE – jump if not equal 2007 Utasítások

Jcc egyes jelzőbitek ellenőrzése CX regiszter ellenőrzése JO – jump if overflow OF = 1 JNO – jump if not overflow OF = 0 JS – jump if sign SF = 1 JNS – jump if not sign SF = 0 JP – jump if parity PF = 1 JPE – jump if parity even JNP – jump if not parity PF = 0 JPO – jump if parity odd CX regiszter ellenőrzése JCXZ – jump if CX reg. is zero CX = 0 JECXZ – jump if ECX reg. is zero ECX = 0 2007 Utasítások

LOOP Ciklus (Loop) – ciklusszervező utasítás, csökkenti a CX regisztert, amennyiben nem nulla a címkére ugrik csak short ugrás lehet (rövid relatív) LOOP címke CX ← CX – 1 Ha CX  0 akkor IP ← IP + d Nem állítja a jelzőbiteket 2007 Utasítások

LOOPZ / LOOPE Ciklus, ha ZF = 1 (Loop if zero / equal) – feltételes ciklusszervező utasítás, csökkenti a CX regisztert, amennyiben CX nem nulla és ZF = 1 a címkére ugrik csak short ugrás lehet (rövid relatív) LOOPZ címke LOOPE címke CX ← CX – 1 Ha CX  0 és ZF = 1 akkor IP ← IP + d Nem állítja a jelzőbiteket 2007 Utasítások

LOOP példa adjuk össze egy t tömb első 20 elemét t resw 100  mov CX,20 mov BX,t xor AX,AX ciklus: add AX, [BX] inc BX loop ciklus 2007 Utasítások

LOOPNZ / LOOPNE Ciklus, ha ZF = 0 (Loop if not zero / not equal) – feltételes ciklusszervező utasítás, csökkenti a CX regisztert, amennyiben CX nem nulla és ZF = 0 a címkére ugrik csak short ugrás lehet (rövid relatív) LOOPNZ címke LOOPNE címke CX ← CX – 1 Ha CX  0 és ZF = 0 akkor IP ← IP + d Nem állítja a jelzőbiteket 2007 Utasítások

Eljárások (1) eljáráshíváskor feltétel nélküli ugrás az eljárás első utasítására (belépési pont) a visszatérési cím megjegyzésével lehet közeli (szegmensen belüli), vagy távoli (más szegmens) eljáráshívás a visszatérési cím a verembe kerül közeli hívás – a következő utasítás offsetje (IP regiszter), távoli hívás –a szegmensregiszter (CS) és az IP regiszter 2007 Utasítások

Eljárások (2) visszatéréskor feltétel nélküli ugrás a veremben megjegyzett címre (IP, illetve CS:IP regiszter betöltése a veremből) a paramétereket átadhatjuk regiszterekben vagy a veremben (címzés a BP regiszter segítségével) az eljárásban verembe mentett értékeket az eljárás befejezése előtt el kell távolítani a veremből (visszatéréskor a verem tetején a visszatérési cím legyen) 2007 Utasítások

CALL Eljárás hívása (Procedure call) CALL cím PUSH (E)IP PUSH CS (E)IP ← cím PUSH (E)IP CS ← seg cím (E)IP ← offset cím az operandusok lehetnek: közeli hívás CALL rel16 CALL rel32 CALL r/m16 CALL r/m32 távoli hívás CALL ptr16:16 CALL ptr16:32 CALL m16:16 CALL m16:32 2007 Utasítások

RET / RETN Visszatérés közeli eljárásból (Return near) – feltétel nélküli ugrás a veremben megjegyzett közeli címre RET RETN RET n RETN n (E)IP ← POP () (E)SP ← (E)SP + n 2007 Utasítások

RETF Visszatérés távoli eljárásból (Return far) – feltétel nélküli ugrás a veremben megjegyzett távoli címre RETF RETF n (E)IP ← POP () CS ← POP () (E)SP ← (E)SP + n 2007 Utasítások

INT Megszakítás generálása (Interrupt) – távoli hívás a megszakításvektor megfelelő elemére a verembe menti a flageket INT n PUSH Eflags[15:0] IF ← 0 (* interrupt flag törlése*) TF ← 0 (* trap flag törlése *) AC ← 0 (*AC flag törlése *) PUSH CS PUSH IP CS ← IDT(Descriptor (n * 4), selector)); EIP ← IDT(Descriptor (n * 4), offset)); 2007 Utasítások

INTO Túlcsordulás megszakítás generálása (Interrupt on overflow) – a 4-es megszakítást generálja, ha az OF be van állítva 2007 Utasítások

IRET Visszatérés megszakításból (Interrupt return) IRET (E)IP ← POP () CS ← POP () Eflags[15:0] ← POP() 2007 Utasítások

STI Megszakítás-engedélyező bit beállítása (Set interrupt flag) IF ← 1 a többi jelzőbit változatlan marad engedélyezi a külső maszkolható megszakításokat a következő utasítás végrehajtása után 2007 Utasítások

CLI Megszakítás-engedélyező bit törlése (Clear interrupt flag) IF ← 0 a többi jelzőbit változatlan marad letiltja a külső maszkolható megszakításokat 2007 Utasítások

Különféle utasítások 2007 Utasítások

STC Átviteljelző bit beállítása (Set carry flag) CF ← 1 a többi jelzőbit változatlan marad általában alprogramokból való visszatéréskor hibák jelzésére használjuk 2007 Utasítások

CLC Átviteljelző törlése (Clear carry flag) CF ← 0 a többi jelzőbit változatlan marad 2007 Utasítások

CMC Átviteljelző bit komplementálása (Complement carry flag) CF ← NOT CF a többi jelzőbit változatlan marad 2007 Utasítások

NOP Üres utasítás (No operation) 2007 Utasítások

HLT Utasítások végrehajtásának felfüggesztése (Halt) 2007 Utasítások

Forrás Intel® 64 and IA-32 Architectures Software Developer's Manual Volume 2A: Instruction Set Reference, A-M http://www.intel.com/design/processor/manuals/253666.pdf Volume 2B: Instruction Set Reference, N-Z http://www.intel.com/design/processor/manuals/253667.pdf 2007 Utasítások