Binary radix bitek és bájtok
Bináris rendszer.
Az előző fejezetben megnéztük akkor a hexadecimális számrendszer, és egy egyszerű programot soros kijelző.
Ha teljesen lebontották az egész fejezetben, majd úgy, hogy megtanultad assembly bázis. Az elkövetkező fejezetben fogunk tanulni a nyelvet sokkal intenzívebb.
Annak érdekében, hogy jobban megértsük szegmentálás, meg kell egy nyomkövető. Dolgoztam CodeView (CV.EXE) és AFD Pro (AFD.EXE).
Tegyük fel, hogy írj egy programot assembly nyelven, és elnevezte PROG03.ASM. Sassemblirovav, megvan a fájl. Ezután futtatni az debugger CodeView / AFD, meg kell, hogy tárcsázza a MS-DOS parancssorba:
Tehát, lélegezzen mélyeket, és - megy előre!
Fontolja meg, hogy az adatok tárolása a számítógép memóriájában.
Általában a számítógép képes tárolni, például a „drive”? A fő elv - mágnesezettség és demagnetization egy sáv (nevezzük így). Egy memória chip - van, durván szólva, egy hatalmas sávok száma (hasonlóan a kazettával). Most próbálja megérteni.
nulla lesz a továbbiakban, mint 0000 (négy nulla)
Két - 0010 (azaz, a jobb oldali egység helyett 0, és a második készlet 1).
Fogásai elv? „0” és „1” - ez az úgynevezett bit. Egy kicsit, mivel lehet, hogy észrevette, lehet nulla vagy egy, azaz demagnetizált vagy mágnesezett vagy a pályán ( „0” és „1” - egy szimbólum). Alaposabban szemügyre, azt találjuk, hogy minden egyes következő sor bit (jobbról kezdve) számát növeli kétszer: 0001 ebben a példában - az egyik; 0010 - két; 0100 - Négy; 1000 - Nyolc stb Ez az úgynevezett Bináris formában az adatok bemutatása.
így jelölésére egy szám 0 és 9 között, szükségünk van négy bit (annak ellenére, hogy nem használják fel teljes mértékben ki lehet terjeszteni :. Ten - 1010, tizenegy - 1011 ... tizenöt - 1111).
A számítógép tárolja az adatokat a memóriába ezen a módon. Utalni bármilyen karakter (számok, betűk, vessző, pont ...) a számítógép használ egy bizonyos számú bit. A számítógép „felismeri” 256 (0-255) különböző karakter a kód alapján. Ez elég, hogy tartsa az összes számjegy (0-9) és betűk a latin ábécé (a - z, A - Z), Orosz (A - Z, A - Z) és mások. Megjelenítéséhez a lehető legmagasabb kód jel (255) van szükség 8 bit. Ezek 8 bitet úgynevezett byte. így egy karakter - mindig 1 byte (lásd 1. ábra ..).
Ábra. 1. Egy bájt karakter kód „Z”
(Szimbólumok "H" és "R" hidrogén- vagy F amagnicheno azmagnicheno -kal)
így A „készülék” szó kerül 4 byte, vagy 4 * 8 = 32 bit. Mint tudja, a számítógép tárolja a betűk önmagukban nem (karakter), a szó és a sorozat „az is” és a „nulla”.
A „b” után a bináris számot assembly írni mindig állni. Ez biztosítja, hogy amikor a szerelvény assembly programot lehetne megkülönböztetni decimális, hexadecimális és bináris számokat. Például: 10 - a „tíz”, 10h - a „tizenhat” és 10b - „kettő” a tízes számrendszerben.
így regiszter le a bináris, decimális és hexadecimális számokat.
Ennek eredményeként, AX, BH és CL regiszter lesz ugyanazt a számot, csak a terhelés is különböző jelöléseket. A számítógép is tárolhatók bináris formátumban (például a nyilvántartás BH).
Így összefoglalni. A számítógép minden információt tárolja bináris formátumban (bináris) hasonló a következő: 10101110 10010010 01111010 11100101 (. Természetesen nincs szóköz kedvéért osztottam bájt). Nyolc bit - az egy bájt. Egy karakter egy bájt, azaz Nyolc bit. Véleményem szerint semmi bonyolult. Fontos, hogy megértsük ezt a témát, hiszen mi mindig a bináris rendszer, és meg kell tudni, hogy a „kiváló”. Elvileg akkor is, ha valami nem világos, akkor - ne essen kétségbe! Idővel minden világos lesz.
Hogyan lehet átalakítani a bináris számot decimális:
Meg kell megállapítani a két a fok, amely megfelel a pozíciókat, ahol a bináris egységárát.
Annyi 20. A bináris rendszer, azt a következő formában: 10100b
Tehát (start balról jobbra számolva 0-4, és a szám a nulla teljesítmény mindig egyenlő egy (emlékszik az iskolai tananyag matematika)):
10100b = 1 * 16 + 0 * 8 + 1 * 4 + 0 * 2 + 0 * 1 = 20
Hogyan lehet átalakítani a decimális bináris:
Akkor osszuk két, az írás a fennmaradó jobbról balra:
20/2 = 10, a maradékot 0
Az eredmény: 10100b = 20
Hogyan lehet átalakítani a hexadecimális szám decimális:
A hexadecimális cikkszám számának foknak felel meg, szeretné emelni a 16 szám:
8Ah = 8 * 16 + 10 (0Ah) = 138
Abban a pillanatban, sok számológépek, hogy tud olvasni, és lefordítani a számok a különböző számrendszerek. Például a Windows számológépet, ami kell a forma tervezés. Nagyon kényelmes számológép DOS Navigator. Ha van, nincs szükség kézi fordításának egyik rendszerből a másikba, ami természetesen egyszerűsíti a munkát. Azonban tudjuk, ez az elv rendkívül fontos!
Szegmentálása memória valós módban.
Vegyük a következő mondatot: „felfedezése memória szegmensek”. Most nézzük meg, mi számítani pont az „s” betű a szó „szegmensek” a kezdete a kínálatát, beleértve terek ... A tizenhatodik. Hangsúlyozom, hogy úgy éreztük, az elejétől a mondat.
Most egy kicsit bonyolítja a feladatot, és ossza el a mondat a következő (a „_” jelentése space):
CS regiszter tárolására használt szegmensek programkód (kódszegmenst - kód szegmens);
Regisztráció DS - tároló szegmens (Data Segment - adatszegmenshez);
Regisztráció SS - szegmens tárolóverem (veremszegmensbe - verem szegmens);
Próbáljuk terhelés regiszterpárt ES: DI szegmens és offset az „m” betű a szó „memória” № 1. példa (lásd fent).. Ez így van írva assembly:
Most a nyilvántartás ES a szegmens száma 20 regiszterben DI - offset a betű (jel) „m” a szó „memória”. Kérem ...
Érdemes megjegyezni, hogy a letöltések száma (azaz minden szegmens) közvetlenül a szegmenshez nyilvántartás tilos. Ezért a vezeték (1) töltöttünk szegmensben az AX, és a vonal (2) betöltjük a regiszter ES száma 20 volt, ami a AX:
Amikor betölti a programot a memóriába, akkor automatikusan elhelyezve az első szabad szegmensben. A fájlok, mint a * .com minden szegmens regiszter automatikusan alapállapotba ebben a szegmensben (értékeket határoz egyenlő a szegmensben betöltött a program). Ezt lehet ellenőrizni segítségével a debugger. Ha például betöltjük a műsortípus * .com a memóriában, és a számítógép az első ingyenes szegmens 5674h számát, a szegmens regiszterek jelentése a következő:
Más szóval: CS = DS = SS = ES = 5674h
Program Type Code * .com kell kezdődnie offset 100h. Ebből a célból, mi, sőt, fel a korábbi példákban szereplő programok a ORG 100h, rámutatva assembly szerelése közben használatra 100h offset elejétől a szegmens, amelyben a program betöltése (később nézzük meg, hogy miért olyan). A szegmens is regisztrál, mint mondtam, automatikusan úgy van beállítva, hogy a szegmens, ahol a program betöltődik.
(01) CSEG szegmens
(05) mov dx, offset My_name
(08) My_name db 'Dima $'
Így, a vonal (01) és (09) leírják a szegmens:
CSEG (így a neve a szegmens) szegmens (Assembler utalás arra, hogy a név CSEG - a neve a szegmens);
CSEG végei (END Szegmens - végszegmensén) azt mondja a szerelő a végén egy szegmens.
1234h: 0100h (azaz CS = 1234h és 0100h IP =) (nézd a debugger a CS és IP regiszterek).
Nézzük tovább a következő parancsot (a hibakereső CodeView nyomja meg az F8 at AFD - F1, a másik -, hogy melyik gomb van szükség, akkor lesz írva valami hasonló „F8-Step” vagy „F7-Trace”). Most már láthatja, hogy megváltozott a következő nyilvántartásokat:
AX = 0900h (vagy inkább, AH = 09h, és AL = 0, ahogy betöltve a parancsot mov ah, 9, 9-es szám a nyilvántartásba AH, míg nem érnek a AL. Ha AL egyenlő, például 15h, miután ezt a parancsot AX egyenlő lenne 0915h)
Felhívjuk figyelmét, hogy írunk assembly nyelven:
mov dx, offset My_name
és a debugger láthatjuk a következő:
mov dx, 109 (109 - hexadecimális szám, de CodeView és sok más debuggers szimbólum „h” ne tegye Meg kell szem előtt tartanunk.).
(09) My_name db 'Dima $'
Csak megismételni a parancsot int 20h (bár, mint tudjuk, a vonal (08), a program nem fogja elérni).
A „Memory” ( „Memory”) hibakereső CodeView (AFD valami ilyesmi), akkor valami hasonlót kell látni a következő:
Pozíció №1 (1234) - egy szegmens, amelyben a program betöltése (lehet bármilyen).
Pozíció №2 (0000) - az eltolás a szegmensben (szegmens és eltolásos vannak elválasztva kettősponttal (:)).
Pozíció №4 (= .a.) - ASCII kódot (lásd alább vesszük) a megfelelő hexadecimális számot a jobb oldalon.
Ahogy már mondtam, hogy használja a megszakításokat programok AH lépett funkciót. Nem kívánatos funkciók megjegyezni (legalább chastoispolzuemye) annak érdekében, hogy ne állandóan keresendő könyvtárak, amelyek funkciója teszi.
Az első megszakítás
Általában bármilyen string ASCII karakterekből úgynevezett ASCII-karakterlánc. ASCII karaktereket -. Vannak karakterek 0-255 DOS, amely magában foglalja a betűk az orosz és a latin ábécé, számok, írásjelek, stb (teljes listája ASCII-karakterek különböző karakterkészletek, lásd a függeléket száma 04).
Képzeljük ezt a táblázatban (ahogy szoktuk):
Funkció 09h 21h megszakítás - output egy karaktersorozatot a képernyőn a kurzor aktuális pozícióját:
A „Belépés” mi jelzik, amely regisztrálja a terhelési hívása előtt a megszakítás, és az „Exit” - ez a funkció visszatér. Hasonlítsuk össze ezt a példát egy táblázat 3. számú.
Itt megvizsgáltuk a szegmentáció memóriát. Ha kihagytam valamit, akkor meg fogja vizsgálni a következő fejezetekben. Nagyon remélem, hogy megértette a témát. Legalábbis fogott szegmentálás elvét.
A program a gyakorlatban
Most egy érdekes példa program (/003/PROG03.ASM) gyakorlat, amely megjeleníti a bal felső sarokban vidám arcot a kék háttér:
(01) CSEG szegmens
(04) mov ax, 0B800h
Számos szereplő már tudja. Tehát azt fogja magyarázni csak az új.
Lines (04) és (05) töltik be a szegmens regisztrációhoz ES száma 0B800h, amely megfelel a szegmens kijelző szöveges módban (emlékezz!). A vonal (06) van betöltve regiszterbe DI nulla. Ez lesz tolva az 0B800h szegmens. Lines (08) és (09) az AH regiszter beírt karakter attribútum (31 - fényes fehér jelkép kék alapon) az AL - az ASCII-kód (01 - Ezzel a smiley).
Lehet kísérletezni ezt a példát. Csak nem változik, amíg a vonal (04) és (05). Szegmens nyilvántartást kell ES (természetesen, DS, de akkor óvatosnak kell lenni). Részletesebben, ez a módszer figyelembe veszi majd. Most ki belőle, meg kell értened az elvet szegmentáció a gyakorlatban.
Kedves Olvasó! Tehát elolvasta az első rész a könyv „assembly? Ez könnyű megtanulni programozni”.
E rész - az volt, hogy megadja az alapokat a programozás a nagyon gyors, kompakt és egyedi programozási nyelv - assembly. Ha megtanulta legalább 75% -át az anyag ebben a részben, akkor mondhatjuk azt kaptam, amit akartam. Ha úgy érzi, hogy sok nem egyértelmű, akkor próbálja meg elolvasni mindent elölről, használja a debugger, írjon nekem egy levelet, amelyben felvázolta a problémát, így a legtöbb információt a lehető (program-szerelő használatra, mit tettél, hogy megoldja a problémát, és pr.). Válasz garantálja Önnek a lehető leghamarabb. Azonban később fogjuk újra és újra visszatér az anyag szerint kerül bemutatásra az első részben. Ha nem értesz valamit most, remélem, meg fogja érteni az idővel. A leginkább érdekes és izgalmas - előtt!
Kérdés esetén az átadott anyag nem érzi nyugodtan folytassa a tanulmány második részében a könyv - „A szeretet - barátság.”
előfizetőknek
„Assembly? Ez egyszerű! Ismerje meg a programot.”
A következő fájl szeretne tanulni - 004.htm. majd - 005.htm stb
Jó olvasást!