Assembly könnyű! A tanulás Program kiadása n 014 (BLER) Newsletter

Ó, barátaim! Olyan beteg vagyok! Az egész héten. Sajnos, nem volt képes, hogy kiadja a levelezési szoba időben. Ebben a tekintetben, sajnálom ilyen hosszú késés. Szeretném figyelmeztetni neked: légy óvatos! Ne legyél beteg!

Kedves előfizetőknek! Kinyomtathatok hírlevelünkre, hogy tanulni írni programok assembly. Sőt, nagyon szeretném, hogy csepegtetni a szeretet maga a nyelv, és azt mutatják, hogy ez nem olyan nehéz. Nagyon örülök, hogy sok a Execu információt levelezési írni a vezérlő és / vagy laboratóriumi munka. Örülök, hogy tudtam segíteni valakinek!

Én azonban nagyon csalódott, hogy megtudja, hogy az információt a sugárzott „assembly? Ez egyszerű! Ismerje meg a program” által használt valaki kereskedelmi célokra. Kérem: figyelembevételével kérjük, valaki másnak a munkáját! Ha van egy javaslat, hogy az információkat a hírlevél nem csak a saját, személyes használatra, hanem a kereskedelmi célra (ez nem tartalmazza írás saját összefoglalók, irányítástechnikai és laboratóriumi munka, stb), akkor, ha úgy tetszik: írj az ajánlatot! Meg fogjuk találni a közös nyelvet!

Miért írunk csak a * .com fájlokat? Igen, mert a memória modell nagyon hasonlít a Windows-modell * .com-fájlokat, amit most mérlegeli. Természetesen fogjuk írni néhány példát * .exe-fájlt, de ez lesz később.

By the way. memória * .hu-fájlokat hívott apró (kis). Windows - lapos (sík vagy ez?).

Azt szeretném megkérdezni, művelt emberek: van egy szó az orosz nyelv „megjegyzett”. Ha nem, milyen szó lehet cserélni?

Újabban tettem a webhelyen egy kis fotó album. ahol látható képek a feleségem, fiú, testvér, testvér, apa, anya, és én személy szerint. Ha kíváncsi, akkor nézd a szabadidejében.

Így eljött az idő! Néhány már ismerik a feltételeket a helyszínen. de még mindig ajánlom, hogy olvassa el, mi van ebben a szakaszban, levelezés, és az összes előfizetőt.

Nem minden közvetlen és folyamatos hozzáférést a hálózathoz. Ebben a tekintetben, megpróbálom röviden elmagyarázni kísérletünk hogy úgy mondjam.

Ezért döntöttem úgy, hogy csináld?

Jön nekem rengeteg levelet különböző kérdések (mind assembly és más témákról, például dolgozni DOS). Én, mint már említettük, nincs ideje megválaszolni a leveleket. Ezért úgy döntöttem, hogy végezzen egy kis kísérletet: létrehozni egy úgynevezett „A klub Szakértői”.

Mi ez (ő?) „A klub”?

Ez adja meg, aki úgy dönt, hogy egy felelős és nehéz feladat, és megpróbálta a szerepe „tanár”, és vált az úgynevezett szakértő. Vagy más szóval, hogy válaszoljon a kérdésekre hozzáértő előfizetők. Például:

  • Bob nem tudja, hogyan kell dolgozni a DOS (nem tudom, hogyan kell futtatni a programot, csomagold ki a fájlt, hogyan kell használni MASM / TASM és mások.);
  • Petya volt egy kérdés a munka egy disassembler;
  • Sasha írt program segítségével a megszerzett tudás a levelezési, de - itt a bökkenő! - ez nem működik, mint Sasha tenné. Mit kell tenni?
  • Vova általában csak aláírt, és nem tudta, hogy ez igent. Hol és kivel?
  • Dima nem értettem semmit a veremben. Ez volt a kérdés. Ki tud segíteni előfizető?
  • és így tovább.

De Szergej az idő, némi tudás és hajlandóság válaszolni a kérdésekre, másoknak segíteni, hogy megtanulják assembly, de nem tudsz. Sőt, Szergej tudja, hogy amikor elmagyarázza a témát, vagy a kérdés megválaszolásához magát valami olyan kezdi megérteni. Ie akkor tanulni tanít.

Azt akarom, hogy ezt a lehetőséget, hogy Sergey és mindenki másnak, aki ugyanazt a vágyat.

Mi az az elv, a klub?

Mit tudok ajánlani a szakértők?

Három vezetők a lehetőséget, hogy:

A szakértő, aki az első helyet kaphat, amellett, hogy a fenti, még az érme fáradozását. Sokan nem ígérnek, mert Fogok fizetni a saját zsebéből, de a sör is elég.

Ezért írtam „lehet”? Mert egy darabig (amíg a rendszer nem fog működni egy bizonyos ritmust, ha egyáltalán fog működni!) A pénz nem kerül kifizetésre. De akkor lesz lehetséges, hogy nem csak a sör, hanem a voblochku. És ott, bámult, és mielőtt a kaviár jön. Legalábbis remélem.

De nem minden ilyen egyszerű. Minden szakértő kell felelnie bizonyos szabályoknak, amelyet meg kell küldeni nekik röviden. A szakértők száma korlátozott, míg 10 fő ugyanarra a témára.

Mi szükséges előfizetők kérdéseket?

Először is - az őszinteség és a gondozás. nevezetesen:

Minden aforenamed - ami a legfontosabb! Ehhez szeretnék az első áthaladnak a postaláda.

Kérjük, győződjön meg róla, hogy a „Tárgy” mezőt a kérdés a megfelelő karaktersorozat, ami után „? Subject =”.

A kérdés, hogy te küldtél engem, és nem kaptak választ, kérjük prereshlite érintett szakértők. Köszönöm.

Ma van egy elég unalmas és érdektelen kiadás. De az a tény, hogy nagyon fontosnak! Meg kell emlékezni az alapokat a matematika és egy kis „kenyeret”. Igen, barátaim! Mit akar tanulni assembly nélkül alapvető ismeretek a matematika? Hangsúlyozom: elemi. Meg kell keményen dolgozni ma! Bár, még a legtöbb munka önért, nevezetesen átgondolt algoritmus kijelző minden ablak (vagy keret) a képernyő közepén. Meg kell, hogy vizsgálja felül alaposan és megérteni.

Teljes kérés: Kérjük, olvassa el ezt a felszabadulást és a csatolt fájlt Sshell14.rar!

Nézzük egyetért néhány definíciót. mert programot mi lesz azután, hogy megkönnyítse az olvashatóság, és keressen a szükséges eljárásokat, azt jelzi, zárójelben az eljárást, és a fájl, ahol szeretné, hogy vizsgálja meg, amit írok a hírlevélben. Például,

"Aztán távolítsa el a fájlt (Delete_file, FILES.ASM)."

Itt: Delete_file - olyan eljárás, amely törli a fájlt, és FILES.ASM - a fájlt, ahol szeretné, hogy úgy nézzen.

Azonnal nézzen MAIN.ASM fájlt. Az első dolog, amit tennie kell, hogy elrejtse a kurzor (Hide_cursor, DISPLAY.ASM). Mielőtt ezt, meg kell emlékezni a jelenlegi pozícióból. Ez lehetővé teszi számunkra, hogy a funkció 3 megszakítás 10h:

Tehát csinálunk (Save_mainscr, DISPLAY.ASM). Itt találkozunk az új szereplők: Pusha és POPA (POPA átlagos pop - all (de nem ugyanaz), és Pusha - all - all.). Ie az üzemeltető kitolja a verem regiszterek az alábbi sorrendben:

AX, CX, DX, BX, SP, BP, SI és DI

és ennek megfelelően POPA üzemeltető kitolja őket a verem fordított sorrendben, azaz a.:

DI, SI, BP, SP, BX, DX, CX és AX.

Ezek a megállapítások csak 286+ processzor. Írásakor például, hogy egy ilyen nyilatkozatot, amely egy 386+ processzor, az azt jelenti, hogy az üzemeltető működni fog processzorok 80386, 80486, Pentium, és stb de nem 8086 (PC / XT) és 80286 (PC / AT).

Esetünkben Pusha csapat és POPA fog futni 80286 és későbbi (újabb) processzorokat. Felhívjuk a figyelmet arra az úgynevezett erre a legelején a fájl SSHELL.ASM Irányelve 0,286, ami azt jelzi, hogy az assembler (MASM TASM), hogy ez a program megfeleljen a csapat (utasítások) nemcsak 8086, hanem a 80286. „Miért, mi volt semmi, mint az írás?” - kérje fel a figyelmes olvasó. „Ha ezek a ponton, a szerelő (MASM TASM) úgy véli, hogy csak a 8086-os kézi, a program, hogy mi is volt.” - válaszolt alázatos szolgája.

Természetesen Pusha csapat és POPA kényelmes azokban az esetekben, ahol meg kell menteni a köteg több nyilvántartással. Ezek csökkentik a méretét a program.

Figyelemreméltó az is, mint mi számít szegmens nyilvántartási száma:

Kiderült 1 byte rövidebb, mint tennénk ezt:

Sőt, ne érintse meg a nyilvántartásban AX, ami hasznos lehet bizonyos esetekben.

is működik feldolgozók 80286+ (pontosabban, fut a CPU 80186+, de mivel ezek a processzorok nem terjedt el széles körben annak a ténynek köszönhető, hogy néhány hónappal megjelenése után az 80186 megjelent 80286, valamit róluk (körülbelül 80186), csak kevesen tudják).

Minden más az eljárás (Save_mainscr, DISPLAY.ASM) tisztának kell lennie. Hasonlóan, mint a behajtási eljárás képernyőt (Restore_mainscr, DISPLAY.ASM).

Most a legunalmasabb (véleményem szerint).

Ezzel a módszerrel már találkozott, amikor megpróbáltuk megjeleníteni „arca”. Most nézzük meg részletesebben.

Érdemes megjegyezni, hogy ez a leggyorsabb módja annak, hogy a karakterek megjelenítéséhez a képernyőn. Gyorsabb nem létezik. Minden attól függ, a szakértelmet és a programozó - ennek eredményeként - a kimenet az algoritmus, a sebesség a végrehajtás.

Nézzük meg röviden a monitor típusának, amelyek közül sok már mélyen a múltban, és csak a régi jó játékok rendszeresen emlékeztetik a létezésükről. Íme néhány: MDA (Monochrome Display Adapter), Hercules. CGA (Color Graphic Adapter), EGA (Enchanced Graphic Adapter), VGA (Video Graphic Array), MCGA (Multi-Color Graphic Adapter - hasonlóság VGA), SVGA (Super Video Graphic Array - az a tény, hogy sok jelenleg alkalmazott munka ).

Az eljárás (és talán nem csak neki) vezetője két változó: Height_X és Width_Y. Bár átmenetileg. Ezt követően megtudjuk, hogy adatokat a verem. De ez lesz később, de most Height_X változó tartalmazza a magassága a keret, és Width_Y - széles. Num_attr - keret színe (Main_proc, MAIN.ASM). Hívhatjuk Draw_frame eljárás, amely a DISPLAY.ASM fájlt.

Ez most úgy a legfontosabb dolog. Tehát Draw_frame eljárást.

Mielőtt hívja ezt az eljárást kell rögzíteni néhány fontos változók (main.asm), nevezetesen:

Height_X - tartalmazza a magassága a keret

Width_Y - tartalmazza a szélessége a keret

Num_attr - tartalmaz attribútumokat kiadási keretet.

Míg az összes. Akkor menj - több.

Így hoztuk. Hívjon Draw_frame eljárás (Display.asm).

Most, figyelem! Be kell, hogy bizonyos számítások előtt kijelző keret nem „ahol egyébként”, vagyis a képernyő közepén.

Meg kell osztani a magassága a 2 keret és levonjuk az így kapott több középső magassága. Íme:

(1) mov ax, Height_X

A vonal (1) be kell jegyezni az AX magassága a keret, ami azt mutatta, hogy az eljárás hívást. Ezután sorban (2) SHR operátor eltolja az összes bit a AL terül 1 jobbra. Mi történik? Itt egy példa:

mov ax, 16 --- AX = 10000b, azaz 16

SHR ax, 1 --- AX = 1000b, azaz 8

SHR ax, 1 --- AX = 100b, azaz 4

SHR ax, 1 --- AX = 10b, azaz 2

SHR ax, 1 --- AX = 1b, azaz 1

így jobbra léptetés bites szám egységnyi elosztja 2. kettes - négyszer stb Ez gyorsabb, ha használjuk az üzemeltető DIV (ami mellesleg még nem vizsgálták) - osztás.

Vonal (3) regisztráljuk DH közepén (vagy közel a közepén) a képernyő (vízszintesen), azaz 11. Kivonás 11 az eredmény.

Például, mi származik a keret magassága 5 sor. Ez az, amit kap:

így Kezdjük a kihúzózsineget 6.

Mindegy mi az oszlopok (függőlegesen). Vegyünk egy pillantást a mellékelt példa.

Elvileg amíg nem különösebben összpontosítani ezt: az idő jön tapasztalat és pontosabb megértését.

mov dh, 0; DH általában arra utal, hogy egy string

mov dl, 15 és a DL - egy oszlopot (hogy mi minden eljárásaink)

; A lényeg O. fogunk hozni egy nulla vonal (azaz a legtetején a képernyőn), 15 oszlopon.

Itt két szám lefordítani egy lineáris tömb (alakítani egyetlen szám - offset):

Szorozzuk két sorban, mert egy karakter a képernyőn foglal két byte: a + karaktert az attribútum

Lineáris = Lineáris + DH * 160

mov dh, 8, 8-as vonal

mov dl, 56; oszlop 56

Most Lineáris = 112

Lineáris = Lineáris + DH * 160

Most Lineáris = 1392 vagy 570h

Egy utolsó példa. Mi végre a számításokat az utolsó karakter a képernyőn (jobb alsó):

Lineáris = (24 * 160 + 80 * 2) - 2 = 0F9Eh

80 - Az oszlopok száma a képernyőn, amelyet meg kell szorozni 2 (figyelembe véve nem csak a karakter, hanem a tulajdonság).

(24-edik sorban * 160 + 80. szimbólum * 2) - 2

(24 * 160 + 80 * 2) - 2 = 3998, vagy 0F9Eh

Jobb mondani, hogy néz ki a gyakorlatban. Így az eljárás (Get_linear, DISPLAY.ASM) (bár sokat, és így egyértelmű a leírás a fájlban):

shl dl, 1; szorozza 2 DL (DL = DL * 2).

Csak tolja a biteket egy balra (az elv az osztódásra. Lásd fent.).

mov al, dh, a AL - sorban,
mov bl, 160, meg kell szorozni 160
mul bl; többszörösen: AL (szám) * 160; eredmény AX

Mi ez? Az új üzemeltető MUL? Tehát most úgy.

Tehát itt van egy táblázat az új szereplők: