Fe23 - Reference x86 - a szerkezet a gép parancs

Előtagja a műtét előtt kód

Valójában a parancs elindítja a műveleti kód. De az előtag lehet a csapatnak. Még több előtagokat. Minden előtag - ez az egyik bájt.







Tény, hogy a előtagokat előtt a csapatok nem gyakori. Hogy ez, csak nézd meg bármilyen program felsorolja formájában gépi utasítások, mint például az eredmények a disassembler. Még ritkább, hogy csak két egymást követő előtagot.

Amikor az első a művelet előtagokat kerülnek, feltéve, hogy a következő két szabály:

Ha egy csapat több mint egy előtag az előtag kell helyezni a sorrendben, ahogy azok megjelennek a fenti táblázatokban.

Ugyanez a csapat nem tud állni csak két előtag egy csoport (csak két csapat azonnal előtag vagy két szegmens csere előtag).

Azt vette észre, hogy a feldolgozók általában toleránsak, ha megsértették a szabályokat. Azonban akkor is úgy kell tekinteni, hogy az eredmény az ilyen jogsértések lehet kiszámíthatatlan.

Az előtag csak akkor érvényes, ezen belül a csapat, amely előtt állt.

Az előhívó eltérhet a műveleti kódját minden csapat. Ez világosan látható táblázatból Eredeti byte utasításból. Ez a táblázat is mutatja, az elő- és kódokat.

előtagok csapat

„Előtagok parancs” - a neve az első csoport előtagokat. Csak azt mondják, hogy nem egy jó név, hiszen más előtagokat más neveket is, amelyek az előtagokat a csapatnak.

Előtagok csapatok saját nevét assembly nyelven. És ezen kívül néhány összeszerelő mutatják ezeket a parancsokat egy sorban. Ezért, amikor a programozás assembly ilyen előtag parancsokat is felfogható, mint egy külön csapat. (Ez is azt mutatja, hogy a gondolkodás assembly nyelven lehet nagyon eltérő gondolkodás gépi kódban parancsokat).

Kód F0 - busz zár előtag LOCK paranccsal ( "lock" - zár). Az előtag csak azokkal parancsokat, amelyek támogatják ezt - a képesség, hogy rögzítse a gumiabroncs.

F2 kódokat. F3 - ismételt előtagot, REP csapat ( „ismétlés” - ismétlés) és a többi csapat ebben a csoportban. Ezek az előtagok csak lánccal csapatok. REP előtétek csoportok segítségével szervezni ciklikus végrehajtás lánc csapat. Lásd Láncolt parancsokat.

Kód F1 - nincs előtag, és nincs ilyen parancs. Itt meg kell jegyezni, hogy ez csak a kód első parancs byte, amely továbbra is ingyenes. Önkéntelenül felmerül a gondolat, hogy létezik néhány dokumentált funkciókat.

prefix akció függ az adott parancsot.

Operandus mérete előtag változások

Ha a teljes program végrehajtási mód „32 bit”, a parancs, amely az előtag 66, állítsa az operandus mérete attribútuma „16” bit.

Ha a teljes program végrehajtási mód „16 bit”, a parancs, amely az előtag 66, állítsa az operandus mérete attribútuma „32” bit.

prefix akció függ az adott parancsot.

Előtagok helyettesítő kategóriában

Kód 26 - alapértelmezett szegmens helyébe a ES szegmensben.
2E kód - az alapértelmezett szegmens helyébe a CS szegmensben.
Kód 36 - alapértelmezett szegmens helyébe a SS szegmensben.
3E kód - az alapértelmezett szegmens helyébe a DS szegmensben.
64 kód - az alapértelmezett szegmens helyébe a FS szegmensben.
Kód 65 - alapértelmezett szegmens helyébe a GS szegmens.

műveleti kód

Elvégre előtagok (ha a csapat egy prefix) kezdődik a tényleges gépi utasítás. És a gépi utasítás kezdődik a műveleti kód.

Field opkód mindig jelen van minden gépen parancsot. Nyilvánvaló, hogy a csapat kell legalább egy bájt. És akkor ez az egyetlen byte csak fog opkódot.

Műveleti kódot (rövidítve - CPC) állhat egy bájt vagy két byte. Ha az első műveleti kódot bájtok értéke 0F. ebben a műveletben kód is van a második byte.

Amikor beszélünk irányító rendszer kényelmes a használata a „alapvető byte” műveleti kód. Ha a CPC áll egy bájt, akkor a byte az alapvető bájt. Ha CPC két bájt, a fő tekinthető a második byte a műveleti kód.

Ebben a könyvtárban vannak csapatok a táblázat, amelyben a csapat sorrendbe utasításból: Az első byte utasításból második byte műveleti kód







Táblázatok könyvtár a „Format” alapvető feltétele műveleti kódot byte jelenik szétrombolja nyolc, nyolc bit a megfelelő elsődleges bájt.

Az ilyen megjelölés alapvető bájt, minden csapat, hiszen minden csapat egy műveleti kódot.

Sok csapat általában speciális bit byte vagy bit-területeken. Az ilyen helyeken jelennek byte leveleket a háttérben a kötőjel.

Például, a jelölést (------- w) azt mutatja, hogy a nulla (a legkevésbé szignifikáns) byte fő kisülés van egy speciális bit (w). A levél „w” eszköz „szó” - „szó”. És ez azt jelenti, hogy a parancs két lehetőség, hogy méretében különböznek az operandus.

Nézzük meg néhány konkrét esetben. Legyen hozzá kódokat 04 és 05, aki elvégzi a művelet hozzáadás. A bináris kód ilyen műveletek a következők: 00000100 és 00000101, az egyetlen különbség az LSB.

Van ADD parancs opciókódot 04 (w = 0) végzi az összeadást bájt (az operandus mérete 8 bit) és verziókódú 05 (w = 1) végzi ugyanazt a műveletet a szó (16 bit).

De ahogy ez a 16 bites processzorok. Az Advent a 32 bites bonyolult helyzet. Most ugyanez a csapat végezhet működését bájt (8 bit), szó (16 bit), dupla szavas (32 bites). csapat opció (w = 0) nem változott, mindig csak akkor működik bájt (8 bit). De a munka csapat megvalósítási mód (w = 1), az függ az operandus mérete attribútum megadott egy szó (16 bit), vagy dupla szót (32 bit). Lásd fent a prefix megváltoztatja az operandus mérete - kód 66, ami egy ilyen kapcsolót, egyetlen paranccsal.

Rendeltetése (----- reg) azt jelzi, hogy lényegében egyenes bájtos műveleti kód regiszter van beállítva, hogy ezt a műveletet végzi.

És ez azt jelenti, hogy ez a csapat, nyolc különböző változatai különböző kódokkal műveletek. Néhány példa a fenti parancsokat lehet egy byte-os parancs INC és december (növelő és csökkentő).

Láthatjuk a másik oldalról, a szerelési útmutató. Ha a parancs INC van beállítva, mint egy operandus bármilyen nyilvántartás, így például EAX és EBX operandus kerülnek meghatározásra közvetlenül a kódot gépi utasítás működését.

Teljes lista megnevezések konkrét bitek és bájtok fő bitmezőkbe jelenik meg az oldalon megjegyzi, hogy a fő asztalra.

Byte MRM - (mod, reg, r / m)

Teljes név úgy néz ki - "bájt (mod, reg, r / m)". Egy rövid név különböző könyvekben másképp néz ki. A mi könyvtárban használt rövidítése a „bájt MRM”.

Byte MRM nem érhető el minden csapat. Ez határozza meg az adott műveleti kódot (és pontosabban „a fő műveleti kód”), akár MRM byte egy része a gép utasítás vagy nem tartalmazza.

Fontos megjegyezni, hogy nem beszélünk egy csapat assembly nyelven szempontból, de a gép parancsot adott alap kódot műveleteket. Például az ADD utasítás ADD négy különböző változatban az MRM bájt, négy változatban a „csökkentett” byte az MRM, ami a mi könyvtár feltüntetve, NNN, és a két verzió nem byte MRM. Összesen kiderül tíz különböző kódokat műtét, tíz különböző változatai a gép parancsot. Lásd. Oldal alapvető aritmetikai parancsokat.

MRM megabájtig három bit területeken: a két-bites mező (mod). három-bites mező (reg). három-bites mező (r / m).

Field (reg) meghatározza az első operandus operandus vevő (cél). Field (r / m) meghatározza a második operandus, a forrás operandus (forrás). Általában ez a szerepek (reg) és (r / m). melyik lesz a forrása az operandusok, és amelyet a vevő. De előfordul, és fordítva, ez függ az adott parancsot.

Field (reg) meghatározza az általános célú regiszter. Három bit - a nyolc változatban nyolc különböző nyilvántartásokban.

kijelölés NNN

A rendszer x86 parancsok parancs, mint hogy a bájt MRM használnak némileg eltérő, mint a fent leírt. A különbség, hogy a mező kezelt (reg).

Az a tény, hogy a fő műveleti kódot (egy bájt vagy két byte) nem mindig egyértelműen meghatározza, hogy mi egy csapat. Bizonyos értékek az elsődleges műveleti kód a műveleti kód tartalmaz három további bit a mező (reg) bájtot MRM. És akkor ez a művelet rassshirenny kód olyan parancsot.

Példaként egy ilyen eset, akkor hívja a csapat az első byte műveleti kódot egyenlő 80. 81. 82. 83. See. Oldal első byte utasításból.

Az alábbi táblázatok a kézikönyv az ilyen csapatok feltöltött NNN megjelölést a „méret” helyett utal MRM. Csak meg kellett valahogy külön azonosítását a speciális esetben. Kiderült „NNN bájt” helyett „byte MRM”.

A rendszer x86 utasításkészlet vannak esetek, amikor MRM használt bájtok rövidítve csak annak a ténynek köszönhető, hogy nem szükséges az adott csapat byte MRM feltett két operandust, mert ez a csapatnak szüksége van csak egy operandust. Ebben az esetben a mező (reg) MRM bájt egyszerűen nem használják, és a dokumentációban meghatározott, hogy mindig legyen (reg = 0).

Ezek az esetek egy kicsit:
  • MOV utasítás kódok C6 és C7
  • POP csapat, 8F kód
  • Csoport SET parancsok (vez), kódok a 90 0F 0F 9F

Ezekben az esetekben is a táblákat tartalmazó könyvtárba kerül kijelölése NNN.

Byte SIB - (skála, index, bázis)

SIB byte áll rendelkezésre a csapat csak 32 bites módban, és csak akkor, ha a csapat már byte MRM (teljes formában vagy tömörített formában NNN).

Hasonlóképpen byte MRM, SIB byte van osztva három bitmezőkbe:

Ez két különböző esetben különböző módon tükröződik a referencia táblázatok a „Format”.

azonnali operandus

Formátumok sok parancs biztosítja a képességét, hogy egy állandó közvetlenül a csapaton belül. Assembly nyelv, ez megfelel az utasítások az operandus egy adott számérték helyett egy változó nevét.

Táblázatok könyvtárat a „formátum” létezésének közvetlen operandus mutatja a kijelölést „adat (..)”. ahol zárójelben lévő bájtok számát.

Golf közvetlen operandus nem minden gép parancsokat.

Ha a parancs formátum mezőben megadhatja azonnali operandus a területen, mint egy csapat mindig az utolsó.

Minden man oldalak

A legutóbbi új oldalak adunk a könyvtárat is hiányzik ebben a listában. De természetesen minden új oldalak szerepel a főoldalon.

otthon

Fő nagy asztal

A szerkezet a motortérben