az intel 8088/8086users.atw.hu/kandolev/programozas/assembly/tav_program... · web viewaz intel...

160
Az INTEL 8088/8086 mikroprocesszor assembly nyelve

Upload: vodat

Post on 24-Jun-2018

221 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Az INTEL 8088/8086users.atw.hu/kandolev/programozas/Assembly/TAV_program... · Web viewAz INTEL 8088/8086 mikroprocesszor assembly nyelve Kandó Kálmán Muszaki Foiskola Készítette

Az INTEL 8088/8086mikroprocesszor

assembly nyelve

Kandó Kálmán Muszaki Foiskola Készítette Számítógéptechnikai Intézet Kovács Józsefné foiskolai adjunktus

Page 2: Az INTEL 8088/8086users.atw.hu/kandolev/programozas/Assembly/TAV_program... · Web viewAz INTEL 8088/8086 mikroprocesszor assembly nyelve Kandó Kálmán Muszaki Foiskola Készítette

Kandó Kálmán Mûszaki Fõiskola Assembly segédletSzámítógéptechnikai Intézet

Bevezetés

Amikor egy programozónak egy feladatot meg kell oldania, akkor a magas szintű nyelvek igen széles köréből válogathat. Programját csak akkor írja assembly nyelven, ha rendszerközeli programot ír, vagy ha különleges gyorsaságra van szüksége, vagy ha hardver interruptokat akar kezelni.

Assembly nyelven való programozáskor azonban igen jól kell ismerni a gépet, az operációs rendszert, valamint a gépi szintű programozás követelményeit.

Az assembly programozás azt jelenti, hogy a programozó lényegében gépi kódban programoz. Közvetlenül írja elő minden egyes gépi kódú utasítás végrehajtását, a gép összes regiszterének, memóriája minden bitjének felhasználását.

Az assembly nyelv nagyon közel áll az adott gép nyelvéhez, ezért annak fordítóprogramja az assembler, viszonylag egyszerű szerkezetű program.

Az assembly nyelven keresztül érthetjük meg igazán egy számítógép működését, az assembler megismerése pedig önmagában is egy fontos feladat - megkönnyíti számunkra a bonyolultabb nyelvek fordítóprogramjainak megértését.

Mielőtt az assembly nyelv leírására térnénk rá, áttekintjük azokat a hardver elemeket, amelyek szerepet játszanak a programozásban.

Mindenekelőtt röviden áttekintjük a személyi számítógépek és a bennük alkalmazott processzorok kialakulásának történetét és programozási szempontból leglényegesebb vonásaikat. Ennek alapján érthető lesz az a választás, amely szerint az INTEL 8086-os és 8088-as processzor assembly nyelvével foglalkozunk.

1ASSEMBLY.DOC 09/05/2023

Page 3: Az INTEL 8088/8086users.atw.hu/kandolev/programozas/Assembly/TAV_program... · Web viewAz INTEL 8088/8086 mikroprocesszor assembly nyelve Kandó Kálmán Muszaki Foiskola Készítette

Kandó Kálmán Mûszaki Fõiskola Assembly segédletSzámítógéptechnikai Intézet

A személyi számítógépek története

A személyi számítógépek az elmúlt évtizedben gyors ütemben fejlődtek. Ennek az elektronika mennyiségi és minőségi fejlődése volt a fő oka. Emellett nem elhanyagolható kedvező árszintjük és gazdaságos árfekvésük.

A személyi számítógépek gyártásában kiemelkedő szerep jutott az IBM (International Business Machines) cégnek. A legelső személyi számítógépet is az IBM gyártotta IBM PC néven 1981 - ben.

Azóta is az IBM élen jár a számítógépgyártásban. Az eredeti IBM PC -t továbbfejlesztette. Sorra jött ki az IBM PC XT, PCjr típusokkal, majd a hordozható PC-jével. Az IBM PC XT az eredeti PC bővítéseként egy merevlemezes tárolóeszközt is magába foglalt. A hordozható változat neve Portable PC. A PCjr-t nagyon olcsó otthoni számítógépnek szánták, de nem nagy sikert aratott.

1984 - ben mutatták be az IBM PC AT-t, amely az elkövetkező néhány évben az IBM vezető személyi számítógépévé vált. Számítási sebessége lényegesen felülmúlta a PC és a PC XT sebességét.

1987 - ben az IBM stratégiáját megváltoztatva a személyi számítógépek új családját indította el, amelyet Personal System 2-nek ( PS / 2 ) nevezett el. Ennél a PS / 2 családnál az IBM egy új műszaki megoldást vezetett be, amelynek neve Micro Channel Architecture (MCA). Ezzel az IBM-nek az volt a célja, hogy a versenytársak számára megnehezítse a másolatok készítését. Az elmúlt évtizedben az IBM-en kívül számos vállalat gyártott személyi számítógépeket, de ezek csaknem kivétel nélkül mind követték az IBM irányvonalát, azaz gépeik csaknem 100%-ban IBM kompatibilisek voltak. (Ezeket a gépeket szokás klónoknak nevezni).

Az MCA megjelenése nagy jelentőségű a személyi számítógépek történetében.Mindezideig az IBM határozta meg a hardverrel kapcsolatos valamennyi fontos ipari szabványt, olyan értelemben, hogy azok a cégek, amelyek IBM kompatibilis számítógépeket gyártottak, szükségszerűen követték az IBM vonalát.

Az MCA megjelenése után az IBM licencdíjat tűzött ki az általa kidolgozott szabvány szerint gyártott számítógépekre. Az érintett vállalatok azonban ezt nem fogadták el, megmaradtak a régi IBM szabvány mellett és azt ISA (Industry Standard Architecture) névvel illették. Ezt később tovább is fejlesztették és kidolgozták az MCA alternatívájaként a mikrocsatorna nagy teljesítményű változatát, az Extended Industry Standard Architecture (EISA)-t.

Ezzel a számítógépes világ két táborra szakadt: az egyik az IBM a maga PS/2 családjával, amelynek a legtöbb tagja a mikrocsatornás architektúrát használja, valamint az összes többi cégre, amelyek többsége továbbra is a régi IBM szabvány szerint gyártja a számítógépeit.

Szerencsére mindkét hardver kialakításon kölcsönösen futnak ugyanazok a programok.Bármennyire is különböző a számítógépek belső felépítése, lényegében a mi szempontunkból hasonlóképpen működnek.

A processzorok története

2ASSEMBLY.DOC 09/05/2023

Page 4: Az INTEL 8088/8086users.atw.hu/kandolev/programozas/Assembly/TAV_program... · Web viewAz INTEL 8088/8086 mikroprocesszor assembly nyelve Kandó Kálmán Muszaki Foiskola Készítette

Kandó Kálmán Mûszaki Fõiskola Assembly segédletSzámítógéptechnikai Intézet

A számítógépben egy sor processzor van, amelyek mindegyike valamilyen speciális feladatot lát el. Ezek között mindig van egy, az ún. főprocesszor, amely kitüntetett szerepet játszik. Ennek típusa az egyes számítógépek teljesítményét nagymértékben befolyásolja. A PC-kben alkalmazott főprocesszor mindig az INTEL 86-os család valamelyik tagja.Vannak PC-k, amelyekben a főprocesszor mellett egy ún. társprocesszor is van, amelyek speciális matematikai műveleteket hajtanak végre. A PC-kben a társprocesszorok az INTEL 87-es család tagjai.

Amikor az IBM tervezte az eredeti PC-t, akkor a legalkalmasabbnak vélt processzor az INTEL Corporation cég terméke a 8086-os és 8088-as processzor volt.

A 8086-os és 8088-as processzor mindegyike 16 bitet képes egyidejűleg kezelni, de a 8086-os a külvilággal is 16 biten tartja a kapcsolatot, míg a 8088-as csak 8 biten.

A piaci lehetőségekhez alkalmazkodva az IBM a PC-be a 8088-at építette be, hiszen a rendelkezésre álló eszközök akkoriban 8 bitesek voltak.A 8088-as processzor épült be a PC XT-be, a PC Covertible PCjr számítógépekbe és egy csomó nem IBM által gyártott gépbe is.

Az INTEL újabb típusa a 80186-os és 80188-as típus. Ezeknél már bizonyos kiegészítő áramkörök beépültek a processzorba, de döntően forradalmi változást nem jelentettek.

Igazán nagy sikert a 80286-os típus megjelenése hozott. Előnyei az elődeihez képest:

- sokkal nagyobb memóriát tud kezelni (16 Mbájt)- képes a virtuális memória kezelésére- képes több programot egyidejűleg futtatni (hardware multitasking).

A 286-os kedvező tulajdonságait csak nagyon kevés program használja ki. A DOS operációs rendszer is a régi 8088-as architektúrára épül (Pl. csak 1Mbájt memóriaterületet tud közvetlenül elérni). Így a gyakorlatban a 286-os semmivel sem tud többet, mint az elődei.

A 286-osnak két üzemmódja létezik:-0 valós üzemmód: ebben az üzemmódban úgy működik, mintha 8086-os processzor

lenne. Teljesen kompatibilis a DOS-szal és a meglevő programok döntő többségével.

-1 védett üzemmód: ebben az üzemmódban megmutatkoznak új tulajdonságai, a virtuális tárkezelés, a többfeladatos munkavégzés és a nagyobb memória használata. A védett jelző a többfeladatos munkavégzéshez kapcsolódik, ugyanis több feladat egyidejű futtatása esetén mindegyik program a többi programtól elválasztva a saját külön világában fut.

A 86-os család újabb tagja a 386-os processzor. Ez teljes mértékben 32 bites processzor és felülről kompatibilis az előzőkkel.

3ASSEMBLY.DOC 09/05/2023

Page 5: Az INTEL 8088/8086users.atw.hu/kandolev/programozas/Assembly/TAV_program... · Web viewAz INTEL 8088/8086 mikroprocesszor assembly nyelve Kandó Kálmán Muszaki Foiskola Készítette

Kandó Kálmán Mûszaki Fõiskola Assembly segédletSzámítógéptechnikai Intézet

Három üzemmódja létezik:

-2 valós üzemmód: ebben emulálja a 8086-ost

-3 védett üzemmód: ebben továbbfejlesztette a 286-os képességeit, valós memóriakezelése 640 Mbájt, virtuális memóriakezelése 4 terabájt

-4 virtuális üzemmód: ebben az üzemmódban a processzor lehetővé teszi egynél több DOS program egyidejű futtatását úgy, hogy mindegyik azt hiheti, hogy egy saját 8086-os gépen fut.

Vannak olyan speciális vezérlő programok, (pl. a Microsoft Windows 386), amelyek lehetővé teszik, hogy egyidejűleg több DOS program futhasson ugyanazon a gépen és az egyes programok egymástól védve vannak. Mivel nincs védett üzemmódban működő DOS, a 286-ossal ezt nem lehetett megoldani.

A 486-os típusnál a processzort és a matematikai társprocesszort egybeépítették. Az eddigi processzorokba a társprocesszort nem építették be, ez opcionálisan volt beépíthető.A társprocesszorokkal kapcsolatban fontos tudnivaló, hogy ezeknek nagyon pontosan (típusban és sebességben) illeszkedniük kell a főprocesszorhoz.

A személyi számítógép rendszer elemei

Egy személyi számítógép rendszer az alapgépből és a hozzá csatlakozó perifériákból tevődik össze. Az alapgépben található a központi egység – amelyet egy 8086/8088 vagy vele kompatíbilis processzor testesít meg, ezenkívül a memória és a beépített lemezegységek.A személyi számítógép működéséhez nélkülözhetetlen egy monitor és egy billentyűzet, de csatlakoztatható hozzá nyomtató, scanner és sok más egyéb készülék is.

Memória : tárolja az adatokat és az utasításokat. Perifériák (I / O egységek) : kapcsolatot létesítenek a processzor és a külvilág között.

A processzor működése

Általában egy processzor úgy működik, hogy egy megadott kezdőcímtől kezdődően adatbájtokat olvas be a memóriából, majd értelmezi és végrehajtja a processzor által végrehajtható funkciókat.Működése két lépésre tagolható :

1. fetch : utasítás beolvasása

2. execution : az utasítás végrehajtása

Az I/8086-nál az utasítás végrehajtási szakaszában a processzor egy 6 bájt hosszúságú (processzorba beépített ) memóriába olvassa a következő utasítást. A fetch és az execution egyidejű, egymást átlapoló tevékenység ( A memória neve: utasítás előolvasási sor : instruction queue ).

4ASSEMBLY.DOC 09/05/2023

Page 6: Az INTEL 8088/8086users.atw.hu/kandolev/programozas/Assembly/TAV_program... · Web viewAz INTEL 8088/8086 mikroprocesszor assembly nyelve Kandó Kálmán Muszaki Foiskola Készítette

Kandó Kálmán Mûszaki Fõiskola Assembly segédletSzámítógéptechnikai Intézet

A programozás annyit jelent, mint előkészíteni a bájtsorozatot, amely a megfelelő funkciókat reprezentálja, tárolni a memóriában és utasítani a processzort, hogy a végrehajtást milyen címen kezdje.

Azoknak a funkcióknak az összességét, amelyeket a processzor végre tud hajtani, utasításkészletnek nevezzük.

A PC processzorai el tudják végezni a négy számtani műveletet: tudnak összeadni, kivonni, szorozni és osztani. Mivel a 8086-osok és 8088-asok 16 bites processzorok, ezért ezeket a műveleteket 16 bites számokkal tudják elvégezni, ugyanakkor 8 bites számokkal is képesek műveleteket végezni. Tehát a 16 bites és 8 bites aritmetikát is tudják ezek a processzorok.

A műveleteket előjelesen és előjel nélkül is végre tudja hajtani.

Ez az alapvető aritmetika, amire a processzor képes. Ha ennél többre van szükségünk, - pl. nagy számokra vagy lebegőpontos formátumra -, akkor a matematikai műveleteket célszerűen egy matematikai társprocesszorral, vagy olyan speciális szubrutinokkal végezhetjük el, amelyek az egyszerű aritmetikai építőkockákból nagyobb műveleteket építenek fel.

5ASSEMBLY.DOC 09/05/2023

Page 7: Az INTEL 8088/8086users.atw.hu/kandolev/programozas/Assembly/TAV_program... · Web viewAz INTEL 8088/8086 mikroprocesszor assembly nyelve Kandó Kálmán Muszaki Foiskola Készítette

Kandó Kálmán Mûszaki Fõiskola Assembly segédletSzámítógéptechnikai Intézet

A 8086/8088 architektúrája

A 8088 architekúráját a következö tényezők határozzák meg :

- regiszterkészlet- memóriakezelés- utasításkészlet- memória-elérési módok- utasítások felépítése- I /O lehetőségek- interruptok

Regiszterek

Programozási szempontból a mikroprocesszor legfontosabb komponensei a regiszterek. Állandóan ezekre hivatkozunk, amikor assembly nyelvű programot írunk. A 8086/8088 regiszterkészlete a következő :

6ASSEMBLY.DOC 09/05/2023

Page 8: Az INTEL 8088/8086users.atw.hu/kandolev/programozas/Assembly/TAV_program... · Web viewAz INTEL 8088/8086 mikroprocesszor assembly nyelve Kandó Kálmán Muszaki Foiskola Készítette

Kandó Kálmán Mûszaki Fõiskola Assembly segédletSzámítógéptechnikai Intézet

A regiszterek alapvetően kisméretű, speciális célú memóriák, amelyek a processzor rendelkezésére állnak különleges, meghatározott feladatok ellátására. A regiszterek 14 kicsi, egyenként 16 bites memóriarekeszből állnak, ahol számok tárolhatók. Ezek mindegyike a processzor belső, integráns részét képezi. Lényegében mindegyikük egy-egy kis tárolónak fogható fel, amelyeket a processzor arra használ, hogy rajtuk végezze el a számításokat és az eredményeket megőrizze bennük. Vannak köztük olyanok, amelyek csak meghatározott célra használhatók, míg mások felhasználási területe sokkal szélesebb.Ezeket az assembly nyelven programozóknak nagyon kell ismerniük.

A regiszterek csoportjai:

4 db 16 bites általános célú regiszter2 db 16 bites pointer célú regiszter2 db 16 bites index célú regiszter1 db 16 bites programszámláló regiszter1 db 16 bites flag regiszter4 db 16 bites szegmens regiszter

Általános célú regiszterek

AX ( AH, AL ) elsődleges akkumulátor(ok) BX ( BH, BL ) akkumulátor(ok) vagy bázisregiszterCX ( CH, CL ) akkumulátor(ok) vagy számláló regiszterDX ( DH, DL ) akkumulátor(ok) vagy I / O cím regiszter

Ezek a regiszterek 16 bitesek, de megtehetjük azt is, ha kell, hogy csak fél regiszterrel dolgozzunk. Ugyanis mindegyikük fel van osztva egy-egy felső és alsó félregiszterre, amelynek neve az AX regiszternél AH (ez a felső) és AL ( ez az alsó), a BX-nél BH és így tovább.A számítógépen belül végbemenő folyamatok igen jelentős része ezekben a regiszterekben zajlik.

AX (Accumulator ) kitüntetett szerepű

-5 minden I / O művelet ezen keresztül zajlik.-6 közvetlen adatokon operáló utasítások implicit operandusa és az eredmény is itt

képződik.

BX ( Base Register )

-7 mint bázisregiszter, részt vesz a címkiépítésben az ún. bázisrelatív címzési módoknál.

CX ( Counter Register )

-8 mint számláló, ciklusműveleteknél ( illetve egyes stringműveleteknél ) használható (lehet automatikusan inkrementálni és dekrementálni is )

-9 léptető utasításoknál a CL játszik szerepet.

DX ( Data Register )

-10 egyik funkciójában aritmetikai műveletek adatregisztere -11 néhány I / O utasításban a 16 bites I /O címet tartalmazza.

7ASSEMBLY.DOC 09/05/2023

Page 9: Az INTEL 8088/8086users.atw.hu/kandolev/programozas/Assembly/TAV_program... · Web viewAz INTEL 8088/8086 mikroprocesszor assembly nyelve Kandó Kálmán Muszaki Foiskola Készítette

Kandó Kálmán Mûszaki Fõiskola Assembly segédletSzámítógéptechnikai Intézet

Pointer regiszterek

Ezek a regiszterek abban segítik a processzort, hogy a veremben elhelyezkedő adatokhoz könnyen hozzá tudjon férni.

SP ( Stack Pointer )

-12 veremmutató, amely a verembe utolsóként bevitt elemre mutat.

BP (Base Pointer)

-13 lehet stack pointer is, de lehet adatpointer is

Indexregiszterek

Ezek a regiszterek arra szolgálnak, hogy programjaink nagy mennyiségű adatot vihessenek át a memória egyik helyéről a másikra, speciális ún. stringműveletek segítségével. Adatterületek indexelt címzésére is szolgálnak, ugyanis az indexregiszterek 16 bites tartalma résztvehet a címszámításban (azaz az indexelt címzési módoknál egy plusz eltolást ad.

SI (Source Index)

-14 forrás-indexregiszterDI (Destination Index)

-15 cél-indexregiszter

Programszámláló és jelző regiszter

IP ( Instruction Pointer)

-16 utasításmutató, amely mindig a soron következő utasítás eltolását tartalmazza (CS-sel együtt abszolút címet ad).

FLAGS ( Flag Register )

A programot egy sor jelző vezérli, amelyek mindegyike a számítógépen belüli, valamilyen meghatározott állapotot jelez vagy hoz létre.Bár ezek a jelzőbitek önállóan egymástól függetlenül végzik a feladatukat, a könnyebb kezelhetőség céljából egy regiszterbe az ún. állapotregiszterbe vannak összevonva.

Speciális utasítások szolgálnak arra, hogy egyes jelzőbiteket megvizsgáljunk, vagy beállítsunk.Összesen 9 standard jelzőbit van. Ezek a következők:

8ASSEMBLY.DOC 09/05/2023

Page 10: Az INTEL 8088/8086users.atw.hu/kandolev/programozas/Assembly/TAV_program... · Web viewAz INTEL 8088/8086 mikroprocesszor assembly nyelve Kandó Kálmán Muszaki Foiskola Készítette

Kandó Kálmán Mûszaki Fõiskola Assembly segédletSzámítógéptechnikai Intézet

Aritmetikai műveletekhez tartozó jelzőbitek :

ZF Zero Flag ) : a nulla eredményt vagy összehasonlításnál az egyenlőséget jelzi

SF (Signum Flag) : az eredmény előjelét jelzi

CF (Carry Flag ) : átvitelbit

AF (Auxiliary Carry Flag ): segédátvitelbit: alsó négy biten történő átvitelt jelzi

OF (Overflow Flag ) : túlcsordulásbit az eredmény előjele nem helyes

PF (Parity Flag ) : paritásbit: az eredmény páros vagy páratlan paritású

Vezérlési célú jelzőbitek :

DF (Direction Flag ) : irányjelző bitaz ismétlődő műveletek ( stringműveletek ) esetében az adatmozgatást milyen irányban kell végrehajtani (0: balról jobbra, 1: jobbról balra)

IF (Interrupt Flag ) : megszakításengedélyező bit azt jelzi, hogy fogad-e a processzor megszakításokat, vagy letiltja őket(0 minden megszakítás engedélyezve van 1 a maszkolható megszakítások tiltva vannak)

TF (Trap Flag ) nyomkövető jelzőbit: lehetővé teszi, hogy egy programot lépésenként hajtsunk végre. A processzor minden egyes utasítás végrehajtása után egy megszakítást generál. A megszakításhoz kapcsolt rutin lehetővé teszi az utasítás hatásának nyomon követését.

Szegmensregiszterek

Ezek a regiszterek a számítógép memóriájában való eligazodásban segítik a processzort. Ezek mindegyike révén a memória egy-egy 64Kbájtos, szegmensnek nevezett részéhez lehet hozzáférni.

CS (Code Segment)

-17 A CS szegmensregiszter azt mondja meg, hogy a memóriában hol található a program, azaz mindig a kurrens kódszegmenst definiálja, amely azokat az utasításokat tartalmazza, amelyeket a processzor végrehajt.Az IP az éppen soron következő utasítás címét tartalmazza. Pontosabban, amikor a processzor beolvassa az utasítást, akkor az IP a soron következő utasítás offsetjét, a CS pedig a szegmens kezdőcímét tartalmazza.

9ASSEMBLY.DOC 09/05/2023

Page 11: Az INTEL 8088/8086users.atw.hu/kandolev/programozas/Assembly/TAV_program... · Web viewAz INTEL 8088/8086 mikroprocesszor assembly nyelve Kandó Kálmán Muszaki Foiskola Készítette

Kandó Kálmán Mûszaki Fõiskola Assembly segédletSzámítógéptechnikai Intézet

DS (Data Segment)

-18 A DS regiszter az adatszegmens kezdetét definiálja.

SS (Stack Segment)

-19 Az SS a stack szegmens kezdetét határozza meg.

ES (Extra Segment )

-20 Az ES a másodlagos adatterület kezdetét definiálja. Az extra szegmenst stringműveletek esetén használjuk a céloperandus meghatározására.

Memóriakezelés

A számítógép memóriájában helyezkednek el az információk - programutasítások és adatok- mindaddig, amíg valamilyen munkavégzés történik velük.

A számítógép memóriája bájtokra van osztva. A bájtok összekapcsolhatók egymással tetszőleges módon, hogy így az információ nagyobb darabjait is egységként tudjuk kezelni. Ezek közül legfontosabb a szó, amelyben két bájt együttesen egy 16 bites számot képez. Négy bájtot összefogva egy duplaszót kapunk. Ha a bájtok sorozatát az ábécé karaktereiből álló szövegként értelmezzük, akkor ezt a sorozatot karakterláncnak nevezzük.

Azért, hogy dolgozhassunk a számítógép memóriájában, a memória minden egyes bájtjának van egy címe. Maga a cím egy szám, amely az illető bájtot azonosítja.

Hagyományosan a mikroprocesszorok a memóriában lévő adatokra 16 bites cím felhasználásával hivatkoznak. Így azonban az elérhető bájt - ok száma 65536, azaz 64K.

A megnövekedett igények kielégítésére a memória mérete is megnőtt. Az I / 8086 - nál akár 1Mbájt - ra is bővíthető. A bővítés 64Kbájt - os ún. szegmensenként történhet.Az ilyen szegmenseket fizikai szegmenseknek nevezzük.

Az 1Mbájtos memória címtartománya (0 - 1.048.575) 20 bitet igényel.A probléma a 16 bites aritmetikából ered, ami szerint a processzor max. 16 biten ábrázolható számokkal dolgozhat. A megoldást az Intel 86-os családnál bevezetett szegmentált címzés jelenti.

Ennek lényege a következő:A cím kiszámításához két 16 bites számot használ. Az egyiket a cím szegmensrészének nevezzük, a másikat a cím offsetjének.

Ha a cím szegmensrészét megszorozzuk 16-tal, akkor egy 20 bites számot kapunk, amellyel a memória 16 bájtos egységei megcímezhetők.

Figyeljük meg, hogy így az 1 Mbájt - os memóriában 64 K különböző szegmens kezdőcím lehet : mindegyiknek az alsó helyiértékű 4 bitje 0.

10ASSEMBLY.DOC 09/05/2023

Page 12: Az INTEL 8088/8086users.atw.hu/kandolev/programozas/Assembly/TAV_program... · Web viewAz INTEL 8088/8086 mikroprocesszor assembly nyelve Kandó Kálmán Muszaki Foiskola Készítette

Kandó Kálmán Mûszaki Fõiskola Assembly segédletSzámítógéptechnikai Intézet

00000H00010H00020H

41230H 16 bájt41240H41250H

FFFF0H

2. ábra

A szegmentált cím offset része valamely szegmens-paragrafus után következő konkrét bájt címét jelöli ki. Mivel a 16 bites offsetszó értéke a 0 és a 65535 közötti tartományon belül bármelyik értéket felvehet, a szegmentált cím offsetrésze lehetővé teszi, hogy egy olyan összefüggő, 64 Kbájtos tartományon belül dolgozhassunk, amelyen belül minden címnek ugyanaz a szegmenscíme. Ezt a tartományt nevezzük logikai szegmensnek.A szegmentált cím írásának a PC-knél egy elfogadott módja: 5123:872FA következő ábra egy szegmens és offsetérték által meghatározott című bájt fizikai helyét mutatja a memóriában:

Szegmenscím: 5123HOffsetcím: 872FH

51230H

5995FH

61230H

3. ábraJegyezzük meg, hogy a szegmenseknek nincs mindig 64Kbájt adattartalma, ez csak egy maximális érték. Egy szegmens tartalmazhat 1, 100, vagy 1000 bájt - ot. A szegmensek átlapolhatók.

11ASSEMBLY.DOC 09/05/2023

Page 13: Az INTEL 8088/8086users.atw.hu/kandolev/programozas/Assembly/TAV_program... · Web viewAz INTEL 8088/8086 mikroprocesszor assembly nyelve Kandó Kálmán Muszaki Foiskola Készítette

Kandó Kálmán Mûszaki Fõiskola Assembly segédletSzámítógéptechnikai Intézet

Egyetlen adat elérhető több szegmens kezdőcím segítségével is.

A 8088 mikroprocesszor a memóriát úgy éri el, hogy a szegmensregiszterek egyikét kiválasztja a szegmens kezdőcím számára. Ezt az értéket 4 bittel balra lépteti és hozzáadja az offset címét. Így alakul ki a 20 bites cím.

A szegmensregiszterek mindegyike egy-egy, meghatározott rendeltetésű szegmens-paragrafust jelöl ki. A CS kód-szegmensregiszter a programkód helyét mutatja. A DS adat-szegmensregiszter a program fő adatainak a helyét jelöli ki. Az ES extra-szegmensregiszter A DS szegmensregiszter párja segítségével a memória két távoli része között adatokat lehet mozgatni. Az SS verem-szegmensregiszter a számítógép vermének báziscímét adja meg. A programfutás idejének nagy részében ezek a szegmensregiszterek nem változnak. A címeket a szegmentált cím offsetrésze pontosítja. Az offset rész pl. a BX, SI, DI regiszterekben lehet.

A szegmensregiszterek lehetővé teszik, hogy a programozó négy különböző című helyet szimultán elérjen. Az egy időben szimultán elérhető memória mérete 4 -szer 64K.

Mivel a szegmensregiszterek olvashatók és írhatók, ezért tervezhetjük úgy a programunkat, hogy a szegmensek helye és mérete dinamikusan változó legyen.

A következő ábrán példát látunk arra, hogy hogyan helyezkednek el az egyes szegmensek és milyen lehet a szegmensregiszterek konfigurálása. A 4. ábrán a szegmensek függetlenek egymástól, az 5. ábrán átlapozódnak.

4. ábra 5.ábra

Utasításkészlet

A gépi kódú programozás és az assembly nyelv nagyon szoros kapcsolatban állnak egymással. Ezért, ha valaki assembly nyelven akar programozni, feltétlenül ismernie kell a gép utasításkészletét és az egyes utasítások gépi kódját.

12ASSEMBLY.DOC 09/05/2023

Page 14: Az INTEL 8088/8086users.atw.hu/kandolev/programozas/Assembly/TAV_program... · Web viewAz INTEL 8088/8086 mikroprocesszor assembly nyelve Kandó Kálmán Muszaki Foiskola Készítette

Kandó Kálmán Mûszaki Fõiskola Assembly segédletSzámítógéptechnikai Intézet

A számítástechnikában programon, a számítógép részére összeállított olyan véges hosszúságú informácósorozatot értünk, amely azt írja elő, hogy a számítógépnek milyen műveleteket milyen adatokkal és milyen sorrendben kell elvégeznie, egy adott feladat megoldásakor.

A programok kisebb funkcionális egységekre bonthatók. a legkisebb funkcionális egységet utasításnak nevezzük.

Az utasításoknak az a fajtája, amelyet a számítógép végre tud hajtani, a gépi utasítás. Egy számítógép véges számú gépi utasítást képes értelmezni. A számítógép által értelmezett gépi utasítások összességét a gép utasításkészletének nevezzük.

A gépi utasítás is csak akkor érthető a gép számára, ha egy bináris jelsorozat formájában jelenik meg, amelynek minden bitje valamilyen vezérlési funkcióval rendelkezik. Ezeket a bitsorozatokat - amelyeket gépi kódnak szokás nevezni - a számítógép operatív memóriájában kell tárolnunk. Értelmezésüket a processzor végzi.

Egy gépi kódú utasítás felépítése

A gépi utasítás a következőkről tartalmaz információt:

- a memória mely rekeszeiben találhatók azok a számok, amelyekkel az adott műveletet el kell végezni - vagyis az utasítás tartalmaz olyan információt, amelynek alapján az operandus címét meg lehet határozni. Külön hangsúlyozandó, hogy egy utasítás általában nem magát az adatot, hanem annak címére utaló információkat tartalmaz. Az utasításnak ez a része a címrész (displacement: DISP).Előfordulhat azonban, hogy közvetlenül az adatot tartalmazza, vagy az adat regiszterben helyezkedik el, nem pedig a memóriában.

- milyen műveleteket kell elvégeznie a gépnek az utasításban előírt címek (regiszterek, közvetlen értékek) tartalmával - ezt az utasítás műveleti kódja jelöli. Vannak olyan utasítások is, amelyek nem adatokkal végeznek műveleteket, hanem vezérlési funkciókat látnak el. Ezeknél a műveleti kód határozza meg a teendőt, a címrész pedig egyéb információt ad meg.

Címzési módok

Az INTEL 8086/8088 utasításkészlete több különböző módot nyújt az operandusok megcímzésére. A 2 operandusos műveleteknél a forrás, a (jobboldali) operandus lehet egy közvetlen konstans, ilyenkor a cél (a baloldali operandus) lehet regiszter vagy memóriacím is. Egyéb esetekben a 2 operandus közül az egyiknek feltétlenül regiszternek kell lennie. A másik regiszter lehet egy regiszter vagy egy memóriacím is.

Ugyanis az INTEL 8086/8088 egycímű processzor!

Ugyancsak lényeges, hogy ez a processzor változó utasításhosszal dolgozik.

13ASSEMBLY.DOC 09/05/2023

Page 15: Az INTEL 8088/8086users.atw.hu/kandolev/programozas/Assembly/TAV_program... · Web viewAz INTEL 8088/8086 mikroprocesszor assembly nyelve Kandó Kálmán Muszaki Foiskola Készítette

Kandó Kálmán Mûszaki Fõiskola Assembly segédletSzámítógéptechnikai Intézet

Egy utasítás felépítését az alábbiakban láthatjuk:

Az utasítások kódja változó hosszúságú, de mindegyiknek közös része az 1 bájt-os műveleti kód. Ez utasításonként más és más. A következőkben a legegyszerűbb adatmozgató utasítás gépi kódját elemezzük, a

MOV céloperandus, forrásoperandus

utasítást. Ennek funkciója, hogy a forrásoperandus tartalmát a céloperandusba viszi át. Mint a műveletek legtöbbjének, ennek is két operandusa van, amelyek lehetnek:

- regiszterek, - memóriacímek- konstansok.

Az utasítás vonatkozhat bájtos vagy szavas műveletre. Az operandusok megnevezése az utasítás további részében történik.

Műveleti kód

D W Címzési módDISPvagy adat

DISPvagy adat

adat adat

1. bájt 2. bájt 3. bájt 4. bájt 5. bájt 6. bájt

Az utasítás mérete változik az utasítás típusától, a használt címzési módtól és a közvetlen adat méretétől függően.

Az egyes bájtok jelentése a következő:

1. bájt : műveleti kód, amely meghatározza azt a funkciót, amelyet a processzornak végre kell hajtania.A D és W bitek jelentése :D (direction) : 0 / 1 értéknél regiszterből/ be irányul a műveletW : 0 értéknél bájtos, 1 értéknél szavas a művelet

2. bájt: utal arra, hogy hol található az operandus, vagy hol találhatók az operandusok.A bájton belül a bitek három csoportja meghatározott jelentéssel bír. Ezek a következők.:

MOD R E G R/ M

14ASSEMBLY.DOC 09/05/2023

Page 16: Az INTEL 8088/8086users.atw.hu/kandolev/programozas/Assembly/TAV_program... · Web viewAz INTEL 8088/8086 mikroprocesszor assembly nyelve Kandó Kálmán Muszaki Foiskola Készítette

Kandó Kálmán Mûszaki Fõiskola Assembly segédletSzámítógéptechnikai Intézet

MOD mező : az utasítás hosszát határozza meg a következő módon

MODértékei Hatása0 0 Nincs eltolás0 1 1 bájtos eltolás van1 0 2 bájtos eltolás van1 1 regiszter-mód,azaz az R/M=REG

REG : 8 vagy 16 bites regisztert adhat meg az operandus helyeként Némely utasításnál a műveleti kódba épül be.

REG W = 1 W = 0 000 AX AL 001 CX CL 010 DX DL 011 BX BL 100 SP AH 101 BP CH 110 SI DH 111 DI BH

R / M: regiszter vagy memória mezőEz a mező egy 8 vagy 16 bites regisztert jelöl ki operandusként, vagy utal arra, hogy hol helyezkedik el az operandus a memóriában

R / M Effektív cím 000 [BX] + [SI] + DISP 001 [BX] + [DI] + DISP 010 [BP] + [SI] + DISP 011 [BP] + [DI] + DISP 100 [SI] + DISP 101 [DI] + DISP 110 [BP] + DISP 111 [BX] + DISP

Ha a MOD = 00 és R / M = 110, akkor az effektív cím DISP.Ez felel meg az egyszerű direkt címzési módnak.

Az indirekt hivatkozások négy regiszter a BX, BP, SI és DI segítségével valósíthatók meg. Egy utasítás csak egy bázis-, vagy egy index-, vagy egy bázis- és egy indexregiszterre való hivatkozást tud kezelni.

15ASSEMBLY.DOC 09/05/2023

Page 17: Az INTEL 8088/8086users.atw.hu/kandolev/programozas/Assembly/TAV_program... · Web viewAz INTEL 8088/8086 mikroprocesszor assembly nyelve Kandó Kálmán Muszaki Foiskola Készítette

Kandó Kálmán Mûszaki Fõiskola Assembly segédletSzámítógéptechnikai Intézet

Az abszolút cím számítása a következőképpen történik :

eltolás DISP +bázisregiszter BX vagy BP +indexregiszter SI vagy DI +szegmensregiszter CS, DS, ES vagy SS-------------------fizikai cím

Az adatok elérése leggyakrabban a DS regiszteren keresztül történik.

A szegmensregiszterek hozzárendelése

Ha a bázisregiszterként a BX-et használjuk, akkor más kijelölés hiányában a DS regiszter játszik szerepet a fizikai cím kiszámításában.Ha a BP-t használjuk, akkor más kijelölés hiányában az SS szegmensregiszter játszik szerepet a fizikai cím kiszámításában.Ha a bázis- és index regisztert is használjuk, akkor a bázisregiszter a meghatározó. Ha csak az indexregisztert használjuk, akkor a DS játszik szerepet a fizikai cím kiszámításában.

Szegmenskijelölő

Az alapértelmezés szerinti szegmensregiszter hozzárendeléseket felülírhatjuk egy szegmenskijelölő utasítás segítségével. Ez a szegmenskijelölő prefix módosítja - egy utasítás erejéig - az alapértelmezés szerint figyelembe veendő regisztert. Az utasítás felépítése :

0 0 1 sr sr 1 1 0

ahol sr. ( szegmensregiszter ) : értékek jelentésük00 ES 01 CS 10 SS 11 DS

Bizonyos esetekben az alapértelmezés szerinti szegmenskijelölés nem változtatható meg. Ezek az esetek :

- Utasításmutató által kijelölt utasításhoz tartozó CS regiszter (A kód mindig CS - sel érhető el).

- SP csak a SS - hez viszonyított eltolásként szerepel ( A stack mindig SS -sel érhető el ).- Azok a stringutasítások, amelyek az ES regisztert használják, nem használhatnak helyette

más szegmensregisztereket.( A szegmenskijelölő mindig a következő utasítás adathivatkozására vonatkozik ).

16ASSEMBLY.DOC 09/05/2023

Page 18: Az INTEL 8088/8086users.atw.hu/kandolev/programozas/Assembly/TAV_program... · Web viewAz INTEL 8088/8086 mikroprocesszor assembly nyelve Kandó Kálmán Muszaki Foiskola Készítette

Kandó Kálmán Mûszaki Fõiskola Assembly segédletSzámítógéptechnikai Intézet

Az input és output

Az INTEL 8086/8088 processzor sok részével kiviteli és beviteli portokon keresztül kommunikál, illetve vezérli azokat.

A portok olyan kapuk, amelyeken keresztül az információ áthalad, mialatt egy bemeneti/ kimeneti (input /output, vagy röviden I/O ) berendezés felé halad, vagy onnan indul el.

A portok azonosítása egy 16 bites sorszámmal történik. Ennek értéke 0 - 65 535 közé esik.

Az adatátvitelt az IN és OUT utasításokkal kezdeményezhetjük.

Az IN utasítás a címvezetékre teszi a kiválasztott port számát. Amint az adatbájt, vagy adatszó visszatért az adatbuszon akkor az akkumulátorba AL-be, vagy AX-be kerül.

Az OUT utasítás a címvezetékre teszi a megfelelő port számát és az adatbuszra teszi az AL-ben, vagy AX-ben levő adatot.

Jegyezzük meg, hogy az IN és OUT utasítások csak kezdeményezik az adatátvitelt. A periféria feladata azt felismerni, hogy megcímezték.

Az egyes portok használatát a hardver tervezői határozzák meg. A portok használóinak ismerniük kell a portok számát, használatukat és jelentésüket.

Megszakítások kezelése

Valahányszor egy hardver berendezésnek vagy egy programnak a CPU közreműködésére van szüksége, egy megszakításnak nevezett jelet, vagy utasítást küld a mikroprocesszornak. A jel egyben azonosítja a végrehajtandó taszkot is.

Amikor a mikroprocesszor megkapja a megszakításjelet, általában befejezi minden más tevékenységét és elindítja a megszakításhoz tartozó megszakítás kezelő szubrutint. Miután a megszakítás kezelő befejezte feladatát, a gép onnan folytatja tevékenységét, ahol a megszakítás bekövetkezésekor tartott.

17ASSEMBLY.DOC 09/05/2023

Page 19: Az INTEL 8088/8086users.atw.hu/kandolev/programozas/Assembly/TAV_program... · Web viewAz INTEL 8088/8086 mikroprocesszor assembly nyelve Kandó Kálmán Muszaki Foiskola Készítette

Kandó Kálmán Mûszaki Fõiskola Assembly segédletSzámítógéptechnikai Intézet

A megszakításoknak három fajtája létezik:

- amit a számítógép áramkörei generálnak, ha valami történik ( pl. a billentyű leütése) Ezeket a megszakításokat a megszakítás vezérlő kezeli és sorrendbe állítja, mielőtt a CPU felé tavábbítaná.

- amit a CPU generál. Ezek a programban fellépő váratlan esemény következményei (pl nullával végzett osztás).

- amit a program szándékosan idéz elő, ily módon hív meg egy RAM-ban, vagy ROM-ban tárolt szubrutint. Ezeket nevezik szoftver megszakításoknak. (Ezek a ROM-BIOS és DOS szolgáltatások részei).

Bármilyen módon keletkezik is a megszakítási kérelem, a megszakítást kérő forrásnak nem kell ismernie a kért megszakítás vezérlő címét; elég a megszakítás sorszámát ismernie. Ez a szám a memória legalacsonyabb címein tárolt táblázatra mutat. A táblázat a megszakítás kezelő szubrutinok szegmentált címeit tartalmazza.

A megszakítás kezelő szubrutinok címeit megszakítási vektornak nevezzük, a táblázatot pedig megszakítási vektorok táblázatának. A táblázat a BIOS vagy a DOS felügyelete alatt áll.

A megszakítás vezérlő hívásakor a szegmentált cím a program futását vezérlő regiszterekbe töltődik: azaz a CS (kódszegmens) és az IP (utasításszámláló) regiszterekbe.

A megszakítások automatikusan a verembe mentik a kódszegmens regiszternek (CS) és az utasításszámlálónak (IP) az értékét, ez biztosítja, hogy a gép ott tudja folytatni a futást, ahol a megszakítás bekövetkezett. Ezen kívül mentik a flag - regisztert és nullára állítja az I flag-et, ezzel ideiglenesen betiltja a további megszakításokat.

Megszakítási szubrutinból speciális utasítással az IRET utasítással célszerű visszatérni (Ez megfelel a RET-nek és helyreállítja a jelzőket).

A megszakítási vektorok táblázatának feltöltése a bekapcsolási eljárás során megy végbe a ROM-ban tárolt megszakítás vezérlő címek alapján.Minden cím két szót foglal el: az első a relatív cím, a második a szegmenscím. (A bájtok tárolása fordított sorrendben történik az egyes címeken ).

18ASSEMBLY.DOC 09/05/2023

Page 20: Az INTEL 8088/8086users.atw.hu/kandolev/programozas/Assembly/TAV_program... · Web viewAz INTEL 8088/8086 mikroprocesszor assembly nyelve Kandó Kálmán Muszaki Foiskola Készítette

Kandó Kálmán Mûszaki Fõiskola Assembly segédletSzámítógéptechnikai Intézet

Adatábrázolás

A számítógépes adatok kiindulópontja, és az információ lehetséges legkisebb egysége a bit. A bitek azok az építőkockák, amelyekből a nagyobb méretű és jelentéstartalmú információcsomagok felépíthetők.

A bitek legfontosabb és legérdekesebb csoportja a bájt és a szó. Számítógépeink többnyire bájtokkal és bájt párokkal (szavakkal) dolgoznak. Egy bájt 8 bitből áll és 256 különböző értéket, vagy bitkombinációt ábrázolhat. Egy szó 16 bitből áll és 65536 különböző értéket ábrázolhat.

Ha egy bájton, vagy szón belül egy bitet akarunk vizsgálni, akkor valamilyen módon meg kell tudnunk mondani, hogy melyik is az a bit. Az egyes biteket úgy jelöljük meg, hogy jobbról balra haladva sorban megszámozzuk őket úgy, hogy a jobb szélső bit száma 0 lesz (amit a nulladik bitnek nevezünk ), majd balra haladva 1, 2,..., 7 sorszámmal látjuk el őket bájt esetén, illetve 15-ig sorszámozunk szó esetén.

Egy bájtról, vagy bájtok csoportjáról nem állapítható meg, hogy számokat, vagy szöveget ábrázolnak. Azt, hogy a bájtok mit jelentsenek, a feldolgozás dönti el. Ha számításokat akarunk végezni, akkor a bájtokat számoknak tekinti, viszont ha karakterekből álló szöveges információval dolgozunk, akkor a bájtok a szöveg karaktereit jelentik. Alapvetően ugyanazt a bájtot számnak, vagy karakternek is tekinthetjük, attól függően, hogy a feladat az adott pillanatban mit igényel. Így például ugyanaz a bitminta jelentheti az A betűt, és a 65 számot is attól függően, hogy hogyan kezeljük az illető bájtot.

Számítógépeink memóriájának és lemezegységeinek kapacitását kifejező fogalmak a következők:

1 kilobájt - 210 = 1 024 bájt

1 megabájt - 220 = 1 048 576 bájt

1 gigabájt - 230 = 1 073 741 824 bájt

1 terabájt - 240 = 1 099 511 627 776 bájt

Ha a számítógépünkben lévő adatokat egzakt formában akarjuk leírni, akkor valamilyen módon minden egyes bitet ábrázolnunk kell. Ez a bináris számrendszerben elég hosszadalmas. A hexadecimális megjelenítés tulajdonképpen a bináris jelölés rövidítése, amelynél egy hexa számjegy 4 bináris számjegyet ábrázol. A hexadecimális számjegyek a 0, 1,..., 9, A,..., F.

Számábrázolások

A PC természetes képességeinél fogva csak egész számokkal képes dolgozni, itt is csak viszonylag kis számokkal. A matematikai műveletek vonatkozásában a PC-k valamennyi vele született képessége csak egy 8 bites bájtra, vagy egy 16 bites (2 bájtos szóra terjed ki). Programok segítségével a PC nagyobb számokkal is tud dolgozni. Ehhez azonban speciális

19ASSEMBLY.DOC 09/05/2023

Page 21: Az INTEL 8088/8086users.atw.hu/kandolev/programozas/Assembly/TAV_program... · Web viewAz INTEL 8088/8086 mikroprocesszor assembly nyelve Kandó Kálmán Muszaki Foiskola Készítette

Kandó Kálmán Mûszaki Fõiskola Assembly segédletSzámítógéptechnikai Intézet

szoftver szükséges. Egy egész szám mérete bájtos, vagy szavas lehet. Az egész számok mindkét méretben kétféle módon értelmezhetők, attól függően, hogy megengedjük-e a negatív számok ábrázolását vagy sem.

Az ábrázolható egész számok 4 különböző tartományát a következő táblázat mutatja:

1 bájt 2 bájt

Előjel nélküli egész számok 0-tól 255-ig 0-tól 65535-ig

Előjeles egész számok -128-tól +127-ig -32768-tól +32767-ig

A PC-kben levő mikroprocesszor az összes alapvető matematikai műveletet - összeadás, kivonás, szorzás, osztás - csak ezen négy számtartományon belüli egész számokon tudja elvégezni.(A PC - n belül a negatív egész számokat az ún. kettes komplemens módon ábrázolják.)

Kettes komplemens kód

Negatív számok ábrázolását úgy kell megoldani, hogy az összevonásra használt szabályok itt is alkalmazhatók legyenek, azaz

a + (-a) = 0legyen.

Egy „a” szám kettes komplemensének nevezzük az „a” szám (-1)-szeresét.

Komplemens képzése:- képezzük a negáltját, majd ehhez hozzáadunk 1-et.- az alacsonyabb helyértékektől indulva változatlanul leírjuk a számjegyeket az első

egyesig (még azt is) és onnan minden bitet negálunk.

Pl. „a” szám: 0101 1100„a” negáltja 1010 0011

0000 0001--------------

„a” komplemense 1010 0011

Ezek után az a+(-a) összevonás eredménye:„a” 0101 1100„a” komplemense 1010 0011

------------- 1 0000 0000 zérus

20ASSEMBLY.DOC 09/05/2023

Page 22: Az INTEL 8088/8086users.atw.hu/kandolev/programozas/Assembly/TAV_program... · Web viewAz INTEL 8088/8086 mikroprocesszor assembly nyelve Kandó Kálmán Muszaki Foiskola Készítette

Kandó Kálmán Mûszaki Fõiskola Assembly segédletSzámítógéptechnikai Intézet

Számításaink többségéhez nem elegendőek a PC - k természetes sajátjaként tekinthető egész számok.A szám legelső bitje az előjel bit. Ha ez 0, akkor a szám pozitív, ha 1, akkor a szám negatív.

Az aritmetikai műveletek a jelző biteket állítják. Az összeadás során a következőképpen alakulnak a jelzőbitek:- a legmagasabb helyértéken keletkezett átvitelt a CF tárolja. - a legmagasabb helyértéken levő bit az eredmény előjelét jelöli, ezt az SF jelzőbit

tartalmazza.- az eredmény zérus voltát a ZF jelzőbit mutatja.

- két pozitív szám összege negatívvá, vagy két negatív szám összege pozitívvá válik, akkor ezt az OF jelzőbit mutatja. Ezt a jelenséget túlcsordulásnak nevezzük.

A 8086-os processzor a bájtos adat mellett szavas egész számokat is használ. Ezek ábrázolása a memóriában fordított bájt sorrendben történik, azaz az alacsonyabb helyértékű bájt van az alacsonyabb címen, a magasabb helyértékű bájt van a magasabb címen. Ez az ábrázolás néha nehezen olvashatóvá teszi a memóriatérképet, ahol többek között 2 vagy 4 bájtos címek is így helyezkednek el. Ez mindaddig nem okoz problémát, amíg az adatot ugyanolyan módon olvassuk ki a memóriából, mint ahogy oda azt eltároltuk. Ha viszont a szó alacsonyabb helyértékű bájtjára van A PC két lehetőséget nyújt arra, nagyobb számtartományban dolgozzunk.

- Egyszerűen hosszabb egész számokat képezünk - Lebegőpontos ábrázolásmódot használunk.

Ezekkel a kibővített formátumokkal matematikai műveleteket két módon tudunk végezni.

- Legáltalánosabb a szoftveres megoldás, és szinte minden valamilyen számítást végző program tartalmaz olyan rutinokat, amelyek képesek arra, hogy műveleteket végezzenek a lebegőpontos számokon, vagy a hosszúformátumú egész számokon. Ezek a szubrutinok építőkockákként a PC-k alapvető aritmetikai és logikai képességeit használják ahhoz, hogy elvégezzék azokat a bonyolult műveleteket, amelyeket ezek a számformátumok igényelnek. Ez azonban időigényes megoldás.

- A hardveres megoldás, az INTEL 87 aritmetikai társprocesszor család tagjainak használata. A társprocesszorok képesek 4 bájtos és 8 bájtos egész számokkal, speciális decimális egész formátumokkal (18 decimális számjegy ), és lebegőpontos (10 bájt, azaz 18 számjegy) számokkal dolgozni.

Egészek ábrázolása BCD kódban

Bár a processzor mindent binárisan ábrázol, a tízes számrendszer megszokottsága miatt elterjedt a BCD (Binary Coded Decimal) – binárisan kódolt decimális - számárázolás. Ennek az a lényege, hogy a decimális számjegyeket (0, …, 9) négy biten ábrázoljuk.

21ASSEMBLY.DOC 09/05/2023

Page 23: Az INTEL 8088/8086users.atw.hu/kandolev/programozas/Assembly/TAV_program... · Web viewAz INTEL 8088/8086 mikroprocesszor assembly nyelve Kandó Kálmán Muszaki Foiskola Készítette

Kandó Kálmán Mûszaki Fõiskola Assembly segédletSzámítógéptechnikai Intézet

A BCD ábrázolásnak két formáját támogatja a 8086/8088 processzor. Ezek a következők:- tömörített- zónázott.Tömörített ábrázolásnál egy bájt két decimális számjegyet tartalmaz. Zónázott esetben csak egyet, mégpedig az alsó négy biten, ilyenkor a felső négy bit tartalma tetszőleges lehet, de a leggyakrabban nulla.Például a 1948 a következő módon ábrázolható:

19H 48H tömörítve,

01H 09H 04H 08H zónázva.

A zónázott alakot akkor célszerű használni, ha a decimális számokat karakteresen tároljuk, mivel ezek kódja 30H,…39H, tehát a felső négy bitre ilyenkor 3 kerül.

Szöveges adatok

A szöveges adatok egyedi karakterekből állnak. Mindegyik betűt egy bitminta azonosít, és egy bitminta egy bájtot foglal el a tárban. Egy bájton összesen 256 különböző karaktert tárolhat.

A PC karakter készlete két részre osztható:- a 0 - 127 kódú karakterek az ASCII karakterkészlet ( American Standard Code for

Information Interchange : Az infomációcsere amerikai szabványos kódja ).- a 128 - 255 kódú karaktereket kiterjesztett ASCII karaktereknek nevezzük.

Az ASCII karakterkészlet két része :- Vezérlőkarakterek - ABC betűi, számjegyek, különböző írásjelek.

A kiterjesztett ASCII karakterkészlet részei :-Az idegen nyelvek karakterei

- Európai nyelvek betűi- Fizetőeszközök jelei - Különleges írásjelek az egyes nyelvekben

- Rajzolókarakterek- Tudományos célú karakterek

A karakter képernyőn, illetve nyomtatón való megjelenítéséről karaktergenerátor gondoskodik.

22ASSEMBLY.DOC 09/05/2023

Page 24: Az INTEL 8088/8086users.atw.hu/kandolev/programozas/Assembly/TAV_program... · Web viewAz INTEL 8088/8086 mikroprocesszor assembly nyelve Kandó Kálmán Muszaki Foiskola Készítette

Kandó Kálmán Mûszaki Fõiskola Assembly segédletSzámítógéptechnikai Intézet

Az INTEL/8088 mikroprocesszor assembly nyelvének alapelemei

A gépi kódú utasítások ismeret után megismerkedünk az assembly nyelvvel. Az assembly nyelv nagyon közel áll a gépi kódhoz, csak a könnyebb megjegyezhetőség kedvéért az egyes utasításokra mnemonikus kódokkal hivatkozhatunk, annak bináris kódja helyett. Nyilvánvaló, hogy ahhoz, hogy az ilyen módon leírt programból gép által érthető és végrehajtható program legyen, egy átalakítást kell végeznünk. Ezt az átalakítást a fordító program végzi, pontosabban az assembler.Az assembly nyelv formátumát az assembler határozza meg. A PC-ken különböző operációs rendszerek léteznek. Ezek közül a legelterjedtebb a DOS. A továbbiakban a programok DOS alatt történő fejlesztésével és futtatásával foglalkozunk és a MASM által definiált assembly nyelvvel foglakozunk.

Az assembly nyelv a gépi kódú programozáshoz képest az alábbi előnyökkel rendelkezik:

1 Az utasítások kódja helyett a művelet nevének rövidítését – mnemonikját – használhatjuk (pl. MOV).

2 A címzési módokat szimbolikusan jelölhetjük (pl. [BX]3 Az adatok címe helyett az nevét – változónév) használhatjuk (pl. AZON TOMB)4 Az utasítások címe helyett azok nevét – címkéjét – használhatjuk.

Az assembly tehát egy programozási nyelv, amelyben adatokat, címkéket – közös néven szimbólumokat – definiálhatunk és használhatunk. Az assembly nyelvben írhatunk olyan utasításokat, amelyekből a fordító gépi kódú utasítást generál és amelyet a processor végre tud hajtani, illet ve olyan utasításokat, amelyek az assemblernek szólnak és amelyeknek feldolgozása fordítási időben történik.

Az utasításokat a processzor utasításkészlete határozza meg, a direktívák alapvetően a program szerkezetének és szimbólumainak a definiálására szolgálnak. A makroassembler (MASM) biztosít olyan direktívákat is, amelyek adatstruktúrák deklarálására, ismétlődő programrészek megadására, valamint feltételektől függő fordításra adnak lehetőségetAz utasítások és direktívák tetszőleges sorrendben követhetik egymást a program igényeinak megfelelően, de mindegyiket külön sorba kell írni. A sorok formátuma a következő:

[szimbólum műveleti kód [operandusok] [megjegyzés][szimbólum direktíva [operandusok] [megjegyzés]

A szimbólum jelölhet adatot vagy utasítást, ennek a sor elején kell kezdődnie. A műveleti kód vagy direktíva minden sornak kötelező eleme. Az egyes mezőket egymástól legalább egy szóközzel vagy tabulátorjellel választhatjuk el. A megjegyzéseket pontosvesszővel kell kezdenünk.

23ASSEMBLY.DOC 09/05/2023

Page 25: Az INTEL 8088/8086users.atw.hu/kandolev/programozas/Assembly/TAV_program... · Web viewAz INTEL 8088/8086 mikroprocesszor assembly nyelve Kandó Kálmán Muszaki Foiskola Készítette

Kandó Kálmán Mûszaki Fõiskola Assembly segédletSzámítógéptechnikai Intézet

Az assembler működése

Az assembler feladata a forrásnyelvű program gépi kódra fordítása. Ahhoz, hogy ezt végre tudja hajtani, ismernie kell:

1 A direktívákat2 Az utasításokhoz tartozó kódokat3 A szimbólumokhoz rendelt értékeket, amelyeket a szimbólumtáblában tart nyilván.

Az assemblerek (MASM is) általában kétmenetesek, ami azt jelenti, hogy a forrásprogramot kétszer olvassák végig. Az assemblerek az első menetben alakítják ki a szimbólumtáblát, amelyben a programban előforduló szimbólumokat és hozzájuk tartozó értékeket tárolják. (A post-definit szimbólumok kezelése miatt van szükség a második menetre). A szimbólumok értékének meghatározásánál nagy szerepe van az elhelyezés számlálónak.A második menetben a szimbólumtábla birtokában generálja a gépi kódú utasításokat.

A PC processzora szegmensszervezésű, azaz memóriája aximum 64kB méretű fizikai szegmensekre osztható. Ezeket a szegmensregiszterek révén lehet megcímezni. Az assembly program alkalmazkodik ehhez: az assembler fordítási alapegysége a logikai szegmens, amelyet a SEGMENT … ENDS direktívákkal határolunk.Az assembler a szegmens kezdetén nullázza az elhelyezésszámlált, majd minden utasítást, direktívát követően megnöveli értékét a lefoglalt bájtok számától fügően (illetve beállítja az ORG direktívában megadott kifejezés szerint), ezáltal a következő sorban szereplő szimbólum értéke határozódik meg. Tehát, ha az új sorban címkét vagy adatot definiálunk, akkor a szimbólum ezzel az értékkel kerül be a szimbólumtáblázatba. Ennek alapján kerül meghatározásra a gépi kódú utasításban DISP-pel jelölt rész.

24ASSEMBLY.DOC 09/05/2023

Page 26: Az INTEL 8088/8086users.atw.hu/kandolev/programozas/Assembly/TAV_program... · Web viewAz INTEL 8088/8086 mikroprocesszor assembly nyelve Kandó Kálmán Muszaki Foiskola Készítette

Kandó Kálmán Mûszaki Fõiskola Assembly segédletSzámítógéptechnikai Intézet

Az assembly nyelvű program előállításának folyamata

A megírt assembly nyelvű forrásprogramot először valamilyen módon rögzíteni kell, azaz háttértárolón egy fájlban kell elhelyezni. Ezt a műveletet szövegszerkesztő programok segítségével lehet elvégezni. A szövegszerkesztővel rögzített szimbolikus forráskód fordításának mechanikus munkáját az assembler végzi.

Az assembler

bemenete: -0 a forrásfile: (kiterjesztése.ASM)

kimenete:-1 az object file: mely a gépi kódú utasításokat tartalmazza.-2 lista file: mely a forráskódot, az assembler-generálta tárgykódot, a hibaüzeneteket

és a szimbólum táblát tartalmazza. (Kiterjesztése:.LST)-3 hivatkozás file: olyan információkat tartalmaz, amelynek alapján a CREF

hivatkozáskészítő listát tud előállítani a programban definiált és hivatkozott szimbólumokról (kiterjesztése:.CRF).

A MASM indítása az alábbi paranccsal történik:

>MASM

Ezután interaktívan bekéri a fordítás során használt állományok neveit. (Rendre a forrásfájl, az object fájl, a lista fájl és a hivatkozáskészítő fájlok neveit. Tanácsos a forrásfájl nevével azonos neveket adni, hiszen a kiterjesztések úgyis megkülönböztetik az egyes fájlokat.)

A MASM meghívható egyetlen parancssorral is, ilyenkor a paramétereket vesszővel elválasztva kell megadnunk.

A több különböző fordítási egységből keletkezett OBJ fájlokat, - modulokat - a LINK szerkesztőprogrammal lehet egy programmá összeszerkeszteni. A LINK feladata egyrészt a modulok egymás közötti hivatkozásainak feloldása, másrészt a szegmensek relatív elhelyezéséből adódó módosítások elvégzése. A módosítandó szavakat az assembler R betűvel jelzi a fordítási listán.

A szerkesztőprogram

bemenete:

-4 az assembler által generált tárgymodul(ok) (kiterjesztése:.OBJ) több modul esetén + jellel kell összekapcsolni a modulokat.

kimenete: -5 a végrehajtható program (kiterjesztése:.EXE)-6 lista file, amelybe a szerkesztési lista kerül (kiterjesztése:.MAP)-7 Könyvtár- fájlok: (a LIB által kezelt tárgymodulkönyvtár, több modul esetén +

jellel összekapcsolva

A LINK indítása az alábbi paranccsal történik:

25ASSEMBLY.DOC 09/05/2023

Page 27: Az INTEL 8088/8086users.atw.hu/kandolev/programozas/Assembly/TAV_program... · Web viewAz INTEL 8088/8086 mikroprocesszor assembly nyelve Kandó Kálmán Muszaki Foiskola Készítette

Kandó Kálmán Mûszaki Fõiskola Assembly segédletSzámítógéptechnikai Intézet

>LINK

Ezután interaktívan bekéri a szerkesztés során használt állományok neveit.A LINK meghívható egyetlen parancssorral is, ilyenkor a paramétereket vesszővel elválasztva kell megadnunk.A szerkesztő program által létrehozott fájlt a töltőprogram helyezi el a memóriában. A töltőprogram feladata az abszolút címek kiszámítása és a program elindítása.

A program nyomkövetése

A program nyomkövetésére az AFD (Advanced Full Debug) teljes képernyős nyomkövető program kényelmesen használható. Ezt a programot lefordított, összeszerkesztett programok esetén használhatjuk. Segítségével folyamatosan látható a program utasításainak lépésenkénti vagy folyamatos végrehajtása közben

-8 a regiszterek tartalma,-9 a soron következő utasítás assembly kódja,-10 a flag-ek tartalma,-11 a stack teteje és-12 két kiválasztott memóriaterület.

A leggyakoribb parancsok az F1-F10 funkciógombokkal hajthatók végre. Jelentésük a következő:

F1 lépésenkénti végrehajtásF2 CALL, INT, REP végrehajtása egy lépésben.F7 - F10 kurzor mozgatása a képernyő mezői között. A kurzor helyén levő regiszter, cím, jelzőbit

vagy memóriatartalom módosítható A memóriatérképek szegmenscímei csak CS, DS, SS, ES vagy a kizárólag nyomkövetési célokra definiált FS és HS regiszterek írhatók.

F5 nyomkövetés definiálása. Maximum 8 töréspont adható meg, amelyek elérésekor megszakad a program végrehajtása, kiértékelődnek a törésponthoz megadott feltételek, és ha az előfordulások száma(Occur) egyenlő az általunk megadottal (Count), végrehajtódik a definiált művelet : TRACE ON [NI] - TRACE OFF - STOP -... A nyomkövetés bekapcsolása alatt ( TRACE ON, OFF között) minden utasítást követő állapot egy pufferbe kerül (NI esetén INT után a megszakítási alprogramban nem ), amely STOP után F1-gyel megnézhető. F4-re a használat módja megjelenik segítségként.

F$ segítségként kiírja a kód feletti mezőben megadható parancsokat. Lapozni szóközzel, a végrehajtáshoz visszatérni ENTER-rel lehet.

26ASSEMBLY.DOC 09/05/2023

Page 28: Az INTEL 8088/8086users.atw.hu/kandolev/programozas/Assembly/TAV_program... · Web viewAz INTEL 8088/8086 mikroprocesszor assembly nyelve Kandó Kálmán Muszaki Foiskola Készítette

Kandó Kálmán Mûszaki Fõiskola Assembly segédletSzámítógéptechnikai Intézet

Forrásprogram gépelése

szövegszerkesztővel

A létrehozott file kiterjesztése:.ASM

Ajánlott

szövegszerkesztő:

Norton Editor (NE)

A forrásprogram lefordítása

assemblerrel

A létrehozott file kiterjesztése:.OBJ

és LST

Az assembler neve:

MASM

Az object file vagy file-ok szerkesztése

szerkesztőprogrammal

A létrehozott file kiterjesztése: EXE

A szerkesztő neve: LINK

A kész program betöltése és

indítása

A töltőprogram:

EXE2BIN

6. ábra

Assembly nyelvű program előállításának folyamata

27ASSEMBLY.DOC 09/05/2023

Page 29: Az INTEL 8088/8086users.atw.hu/kandolev/programozas/Assembly/TAV_program... · Web viewAz INTEL 8088/8086 mikroprocesszor assembly nyelve Kandó Kálmán Muszaki Foiskola Készítette

Kandó Kálmán Mûszaki Fõiskola Assembly segédletSzámítógéptechnikai Intézet

Az INTEL/8088 assembler jellemzői

1. A nyelv erősen tipizált. Ez azt jelenti, hogy ellenőrzést végez a változókon és címkéken. Az assembler az ellenőrzéshez azokat a jellemzőket használja, amelyeket akkor kapnak a változók, vagy a címkék, amikor azokat definiáljuk. Az assembler megvizsgálja, hogy a további utasításokban a szimbólum minden hivatkozása megfelel-e a definíciónak. A típusellenőrző mechanizmust és megkerülésének eszközeit a későbbiekben részletesebben tárgyaljuk. Ez az ellenőrzés különleges védelmet jelent a mulasztásból vagy következetlenségből eredő hibák ellen.

2. A korábbi assembly nyelvekhez hasonlítva, ennek a nyelvnek az adatdefinícióban és feldolgozásban jelentősen javult a rugalmassága, ami nagymértékben egyszerűsítheti a kódolást.

-0 A hatékony stringutasítások megengedik a közvetlen átvitelt memóriából a memóriába.

-1 Ezeket a stringműveleteket elláthatjuk ismétlési operátorral, a többszöri végrehajtásra számlálóval vagy feltétel vizsgálattal.

-2 Ezek a műveletek automatikusan növelik vagy csökkentik a memória megfelelő indexét (SI-t, vagy DI-t), az irányflag-től (DF: direction flag) függően. Ugyancsak automatikusan dekrementálják a számláló regisztert ( CX: counter regiszter) minden ismétlés után. Ez implicit módon ellenőrzi az ismétlések számát azáltal, hogy CX=0 esetén megszakítja a műveletet.

-3 Erősen támogatja a mikroprocesszor címzési módjait, lehetővé téve összetett kifejezéseket, beleértve a többszörös indexelést és a mező eltolást.

-4 A hatékony EQU lehetőség megengedi, hogy egyszerű szinonimákat használjunk olyan bonyolult kifejezések helyett, amelyek egy modulban többször előfordulnak.

3. Támogatja az eljárásokat és a makrodefiniciókat, valamint a moduláris programfejlesztést. Ez a tulajdonság megkönnyíti, hogy a feladatot olyan, külön programozható részekre szabdaljuk, amelyeket könnyebb fejleszteni, tesztelni és módosítani. Ha egyszer megalkotjuk általános rutinként, akkor más csoporttagok és más projektek is használhatják. Létrehozhatunk programkönyvtárat, amelyben az általános rutinjainkat elhelyezzük.

4. Számos operátort lehet különböző kifejezésekben használni. Ez segíti a jó programozási gyakorlatot, a kódolás általánosságát és a programjavítás könnyítését. Lehetővé teszi a változókra, címkékre utalást, vagy ennek megváltoztatását anélkül, hogy azokat ténylegesen kódolnánk.

28ASSEMBLY.DOC 09/05/2023

Page 30: Az INTEL 8088/8086users.atw.hu/kandolev/programozas/Assembly/TAV_program... · Web viewAz INTEL 8088/8086 mikroprocesszor assembly nyelve Kandó Kálmán Muszaki Foiskola Készítette

Kandó Kálmán Mûszaki Fõiskola Assembly segédletSzámítógéptechnikai Intézet

Az assembly nyelv szintaktikai elemei

Az assembly nyelvű forrásprogram legkisebb, önálló jelentéssel bíró egysége a jelkép. Elválasztót használunk két szomszédos jelkép elkülönítésére.

Elválasztó jel: a blank, vagy a vízszintes vonal. (bármilyen nem megengedett karakter is elválasztónak minősül.)Határolók: olyan speciális karakterek, amelyek egy jelkép végének jelölését szolgálják, de önmagukban is külön jelentésük lehet.

Határoló jel:, + [ ] .

A jelképeknek alapvetően két fajtáját különböztetjük meg, a konstansokat és az azonosítókat.

Konstansok

A konstansok az assembly idő alatt ismert értékek, amelyek nem változnak a végrehajtás során.

Numerikus konstansok:

bináris : 0-1 értékek sorozata, amelyeket B betű követ.Példák: 0B, 1B, 01101010101B, -000101Boktális : 0-7 értékek sorozata, amelyeket O vagy Q betű követ.Példák: 0B, 1B, 01101010101B, -000101Bdecimális:0-9 értékek sorozata, amelyeket D betű követ.Példák: -000101B1234750, -30, 100000D, -6D, 5535Dhexadecimális: 0-9, A-F értékek sorozata, amelyeket H betű követ.Példák: 1H, -600H, 0FFH, -0AAAH

Egy konstansnak mindig számjeggyel kell kezdődnie. Ha a konstans mögött semmilyen betűjel nincs, akkor az assembler a konstanst decimálisnak tekinti.

Karakterstringek

Egy karakterstring aposztrófok (‘ ‘) közé zárt nyomtatható ASCII karakterekből áll. Üres karakterek és kérdőjelek megengedettek a stringben, de a kocsi vissza és a soremelés nem. Az assembler a karakterstringet a string karaktereinek ASCII kódját tartalmazó bájtok sorozataként ábrázolja.

Példák: 'ACDEFG' 'Ez egy string'Az egy hosszúságú stringeket egyszerű bájtos, a kettő hosszúságúakat egyszerű szavas értéknek fordítja az assembler.

Példa: 'A' egyenlő 41H-val'Ag' egyenlő 4167H-val

A két karakternél hosszabb stringeket csak tárolási hely inicializálásához használhatjuk. Az egy karakteres stringeket bárhol használhatjuk, ahol egybájtos közvetlen konstanst

29ASSEMBLY.DOC 09/05/2023

Page 31: Az INTEL 8088/8086users.atw.hu/kandolev/programozas/Assembly/TAV_program... · Web viewAz INTEL 8088/8086 mikroprocesszor assembly nyelve Kandó Kálmán Muszaki Foiskola Készítette

Kandó Kálmán Mûszaki Fõiskola Assembly segédletSzámítógéptechnikai Intézet

használhatunk; a két karakter hosszú stringeket mindenütt, ahol egyszavas közvetlen értéket használhatunk.

Azonosítók

Az azonosítók olyan karaktersorozatok, amelyek az assembler számára speciális, szimbolikus jelentéssel bírnak. Az azonosítók a következő szabályoknak kell, hogy eleget tegyenek:

1. Az első karakternek alfabetikusnak kell lennie (A...Z, a...z), vagy valamelyik speciális karakternek, @,-, $, vagy ?. (a ? önmagában nem állhat azonosítóként).

2. A többi karakter lehet az 1. pontban felsorolt karaktereknek egyike, vagy numerikus (0,1,...,9).

3. Az azonosítóknak az első 31 karakteren különbözniük kell.

Példák:Érvényes azonosító: A

WORDFFFH@ változó_sorszám

Érvénytelen azonosító: Első$idFFFFH

Kulcsszavak

A kulcsszó egy olyan azonosító, amelynek az assembler számára előre meghatározott jelentése van.

Példa. MOVENDWORD

Szimbólum

A szimbólum a felhasználó által definiált azonosító, bizonyos memóriahelyek, adatok, kifejezések, adat- vagy kódszerkezetek jelölésére. A szimbólumokat a következő kategóriákba soroljuk:

-5 Változók-6 Címkék-7 Számok-8 Egyéb (szegmensek, csoportok, rekordok, rekordmezők, makro kódok, formális

paraméterek).

Minden szimbólum hordoz bizonyos tulajdonságokat, amelyek lehetővé teszik, hogy az assembler a szimbólumot a kívánt jelentéssel és szándékunk szerint használja.

30ASSEMBLY.DOC 09/05/2023

Page 32: Az INTEL 8088/8086users.atw.hu/kandolev/programozas/Assembly/TAV_program... · Web viewAz INTEL 8088/8086 mikroprocesszor assembly nyelve Kandó Kálmán Muszaki Foiskola Készítette

Kandó Kálmán Mûszaki Fõiskola Assembly segédletSzámítógéptechnikai Intézet

Változók

Változókat használunk olyan adatok azonosítására, amelyek bizonyos memóriahely(ek)en helyezkednek el. Minden változónak három jellemzője van:

-9 Szegmens (melyik szegmensben dolgoztunk amikor a változót definiáltuk).

-10 Eltolás (hány bájt van a szegmens kezdete és a szimbólum helye között).

-11 Típus (hány adatbájttal dolgozunk, amikor erre a változóra hivatkozunk).

Egy szegmens bármilyen 64K-s szegmenshatáron (paragrafus) kezdődhet. Az egyik ilyen érték szerepel a változó definíciójának szegmens részében (bár ez a szám nem biztos, hogy elérhető az assembly időben). A szimbólum eltolása 0 és 64K-1 közötti érték lehet.

A változó típusa:

BYTE 1 bájt hosszúWORD 2 bájt hosszúDWORD 4 bájt hosszúQWORD 8 bájt hosszúTENBYTES 10 bájt hosszú

Példa változó definiálására:

változó_1 DB 0változó_2 LABEL BYTEváltozó_3 EQU másik-változó

Címkék

A címkék olyan memóriahelyeket jelölnek, amelyek utasításkódot tartalmaznak és ugrásoknál, hívásoknál hivatkozásként szolgálnak. Minden címkének négy jellemzője van:-12 Szegmens (melyik szegmensben dolgoztunk, amikor a címkét definiáltuk).

-13 Eltolás (hány bájt van a szegmens kezdete és a címke helye között).

-14 Távolság (azt jelzi, hogy a címke elérhető-e két bájtos eltolással, vagy egy szegmens-eltolás pár (4bájt) szükséges az eléréséhez).

-15 CS-kijelölő: megadja, hogy mi volt kijelölve a CS regiszterrel, amikor a címkét definiáltuk).

A címkék szegmens és eltolás jellemzője hasonló a változókéhoz. A címkék távolsága a következő két érték valamelyike lehet:

NEAR : e címke hivatkozásai csak egy kétbájtos "önrelatív" értéket használnak, azaz csak az IP-t kell megváltoztatni ennek a helynek az eléréséhez, a CS regiszter tartalmát nem.FAR : ennek a címkének a hivatkozásai megkövetelik IP és CS változtatását egyaránt, és így minden hívás, vagy ugrás erre a címkére új értéket kell, hogy adjon mindkettőnek.

31ASSEMBLY.DOC 09/05/2023

Page 33: Az INTEL 8088/8086users.atw.hu/kandolev/programozas/Assembly/TAV_program... · Web viewAz INTEL 8088/8086 mikroprocesszor assembly nyelve Kandó Kálmán Muszaki Foiskola Készítette

Kandó Kálmán Mûszaki Fõiskola Assembly segédletSzámítógéptechnikai Intézet

A NEAR és FAR közti választás attól függ, hogy a címkét használjuk-e olyan ugrásoknál, vagy hívásoknál, amelyek CS feltételezése különbözik a címke CS jelölésétől. Ez általában a címkét definiáló kódszegmensen (vagy csoporton) kívülről történő hívást vagy ugrást jelent.

Ha minden hivatkozás ugyanazt a CS-t használja, akkor a címke távolság jelzőjét NEAR-nek deklarálhatjuk, egyébként FAR-nak. Ha semmit nem mondunk, akkor a feltételezés NEAR.

A NEAR választásával azt mondjuk az assemblernek, hogy a címkére történő ugrás mindig elérhető egy legfeljebb 16 bites önrelatív eltolással, míg a FAR megkövetel a hivatkozásnál egy második szót, amely megadja a címke szegmensét, amelyre az eltolás értelmezendő. Így a CS-kijelölő fontos az assembler számára annak meghatározásában, hogy milyen fajta ugrást, vagy hívást követel meg az adott címkére történő vezérlésátadás.

Példa a címkék definiálására:

1. Cimke_1: ADD BX,AX2. Cimke_2: LABEL FAR3. Cimke_3: EQU E2_NEAR4. Cimke_4: PROC Cimke_4: ENDP

Számok

Szimbólumot definiálhatunk arra a célra, hogy egyszerű számot, egy regisztert, vagy egy memóriahelyet képviseljen. Ha a szimbólumot számként való használatra definiáltuk, akkor az egyszerűen egy 16 bites értéket jelöl. Ha a szimbólumot használjuk, ugyanaz, mintha közvetlenül leírtuk volna azt a számot, amit jelöl.

Példa:

1. SZAM_5 EQU 5 MOV AL,SZAM_5 ;annyi, mintha azt írnánk: MOV AL,5

2. Kezdőbetűk EQU 'AB`MOV AX, Kezdőbetűk ;annyi, mintha azt írnánk: MOV AX,4142H

Egyéb szimbólumok

Egyéb szimbólumokat is megadhatunk, hogy nevet adjunk egy assembler direktívának. Azok a direktívák, amelyek megkívánják ezeket a szimbólumokat:

SEGMENT/ENDSGROUPRECORDMACROEQU

32ASSEMBLY.DOC 09/05/2023

Page 34: Az INTEL 8088/8086users.atw.hu/kandolev/programozas/Assembly/TAV_program... · Web viewAz INTEL 8088/8086 mikroprocesszor assembly nyelve Kandó Kálmán Muszaki Foiskola Készítette

Kandó Kálmán Mûszaki Fõiskola Assembly segédletSzámítógéptechnikai Intézet

Egy assembly nyelvű forrásprogram elemei

Az assembly nyelvű forrásprogram olyan állítások sorozatának tekinthető, amely összességében egy adott funkció megvalósítását szolgálja.

Az állításokat két típusba soroljuk:

Utasítások: Ezeket az assembler gépi utasításokká fordítja, melyek a 8088-at bizonyos műveletek elvégzésére utasítják.

Direktívák: Ezeket az assembler nem fordítja le gépi utasításkóddá, hanem az assembler hajt végre bizonyos nyilvántartási funkciókat. (meg kell jegyezni, hogy a tárolást kezdeményező direktívák hatására az információ a 8088-as memóriájába kerül, amikor a programot betöltjük, de ezeket adatként kívánjuk használni és nem szándékozunk ezeket végrehajtani.)

Az utasítások lehetnek :

- az assembler számára előre definiáltak- a felhasználó által MACRO direktívával definiáltak.

Az utasítások mnemonikjai változtathatók, bővíthetők és újradefiniálhatók. A direktívák az assembler állandó, beépített jellemzői. Direktívát nem lehet sem létrehozni, sem eltörölni.

Általában egy állítás egy sort foglal el a fájlban. Egy "sor" egy terminátorral (kocsi vissza/ soremelés) lezárt karaktersorozat. Egy állítás folytatódhat, ha a terminátor utáni első karakter: &. Szabályok a sorok írásával kapcsolatban:

-16 A szimbólumok nem törhetők meg folytatósorral.

-17 A karakterstringek nem folytatódhatnak folytatósorokon keresztül.( a stringet le kell zárni egy aposztróffal az egyik sorban és utána újra megnyitni egy aposztróffal a folytatósorban, közé beszúrva egy ", " (vesszőt).

-18 megjegyzést a terminátorral befejezettnek tekintünk. (Ha a megjegyzés folytatódik, akkor a " & " jelet követő első nem üres karakternek " ; " -nek kell lennie.)

Az UTASÍTÁS állítás formátuma

címke kijelölő mnemonic(műv.kód) Operandus(ok) megjegyzés

A mezők megadása:

címke: egy szimbólum, amit " : " követ; definiál egy címkét az aktuális szegmensben az elhelyezésszámláló aktuális értékén (Használata opcionális)kijelölő: bizonyos gépi utasítások csak más utasítások kijelölőiként (prefixként) használhatók (pl. LOCK, REP) (Opcionális)mnemonik: egy szimbólum, amelyet előzőleg Macro direktívával definiáltunk (akár az assembler, akár a felhasználó. (Opcionális, de ha nincs, akkor operandusok sem szerepelhetnek). Az assembler által az adott pillanatban értelmezhető utasítás-mnemonikok halmazát az assembler utasításkészletének nevezzük.

33ASSEMBLY.DOC 09/05/2023

Page 35: Az INTEL 8088/8086users.atw.hu/kandolev/programozas/Assembly/TAV_program... · Web viewAz INTEL 8088/8086 mikroprocesszor assembly nyelve Kandó Kálmán Muszaki Foiskola Készítette

Kandó Kálmán Mûszaki Fõiskola Assembly segédletSzámítógéptechnikai Intézet

Operandus(ok) Az utasítás mnemonikjától függően 0, 1 vagy 2 operandus megadására van szükség. A MACRO-n keresztül a felhasználó definiálhat olyan utasítást, amelynek kettőnél több operandusa van.Megjegyzés ha egy karakterstringen kívül bárhol megjelenik egy ";", akkor az a megjegyzés kezdetét jelzi. Megjegyzéseket dokumentálásra és a programok olvashatóságának növelésére használunk.

Példák utasítás állításokra:

START: MOV AX,ADATMOV DS,AXINC SIAAAINT 21HDEC DI ;DI=DI-1

A DIREKTIVA állítás formátuma:

Név Direktíva Operandus(ok) Megjegyzés

A mezők definíciója:

Név: egy direktíva név mezőjét TILOS ÖSSZEKEVERNI az utasítás címke mezőjével. Ezt a nevet sohasem zárja le ":".Néhány direktíva megköveteli az elnevezést (pl. SEGMENT/ENDS...)A tárolást kijelölő direktívák megengedik az opcionális névhasználatot.

Direktíva az assembler által definiált kulcsszavak egyike, amely különböző funkciókat valósít meg, hogy segítsen a programozónak a tárkiosztásban, a modulközi kommunikációban és a szimbólumok kezelésében.

Operandus(ok) megfelel az utasításmnemonik operandusainak. Néhány direktíva tetszőleges operanduslistát megenged (pl. DB, DW, PUBLIC stb.). Mások megengednek speciális kulcsszavakat, hogy bizonyos tulajdonságokat közöljünk az éppen definiált dolgokról (pl. SEGMENT, PROC).Ezek az operandusok szükségesek, vagy szükségtelenek a direktívától függően.

Megjegyzés pontosan ugyanaz, mint az utasítás állításnál

A makro definíció formája : Név MACRO operandus(ok) ;megjegyzés

.

.ENDM

Bizonyos direktívák megkövetelik más direktívák jelenlétét. Ezek a megfelelő párok:SEGMENT/ENDSPROC/ENDP MACRO/ENDM

34ASSEMBLY.DOC 09/05/2023

Page 36: Az INTEL 8088/8086users.atw.hu/kandolev/programozas/Assembly/TAV_program... · Web viewAz INTEL 8088/8086 mikroprocesszor assembly nyelve Kandó Kálmán Muszaki Foiskola Készítette

Kandó Kálmán Mûszaki Fõiskola Assembly segédletSzámítógéptechnikai Intézet

DIREKTÍVÁK

A direktívák az assemblert vezérlik a tárgykód generálásakor. Az egyes direktívák hatására az assembler jól meghatározott funkciót hajt végre, pl. tárterület inicializálása, helyfoglalás, tárkiosztás, stb. A funkciók alapján a direktívákat az alábbi csoportokba sorolhatjuk.

Változók definiálása és memóriahelyek inicializálása

DB, DW, DD, DQ, DT, RECORD

Elhelyezésszámláló és szegmentálás vezérlése

SEGMENT/ENDS, ORG, GROUP, ASSUME, PROC/ENDP, LABEL

Programszerkesztés

PUBLIC, EXTRN, END

Szimbólumok definiálása

EQU, PURGE

Fordításvezérlő direktívák

INCLUDE, .RADIX, %OUT, NAME, TITLE, SUBTTL, PAGE

A továbbiakban ezeket a direktívákat tárgyaljuk részletesen, példákkal illusztrálva.

Változók definiálása, memóriahelyekek inicializálása

Változókat definiálni, illetve memóriahelyet inicializálni a következő direktívákkal lehetséges:

DB (Define Bájt)DW (Define Word)DD (Define Double-Word)DQ (Define Quad-Word)DT (Define Tenbájts)

A változókat három dologgal jellemezhetjük. Ezeket a jellemzőket az assembler a változók deklarálásakor a szimbólumtáblában a változó nevén kívül feljegyzi. Ezek a jellemzők a következők:

SEGMENT szegmensOFFSET eltolásTYPE típus

A változó szegmensjellemzőjét az határozza meg, hogy melyik szegmensben voltunk, amikor az adott változót definiáltuk.

A változó eltolását az assembler számítja ki. Az eltolás a szegmenskezdettől való távolság. Ezt az értéket az assembler az elhelyezésszámláló aktualizálásával tudja számítani.

35ASSEMBLY.DOC 09/05/2023

Page 37: Az INTEL 8088/8086users.atw.hu/kandolev/programozas/Assembly/TAV_program... · Web viewAz INTEL 8088/8086 mikroprocesszor assembly nyelve Kandó Kálmán Muszaki Foiskola Készítette

Kandó Kálmán Mûszaki Fõiskola Assembly segédletSzámítógéptechnikai Intézet

A változó típusát a direktíva adja meg, a következő módon:

Változó típusa lefoglalt bájtok száma

Direktíva

BYTE 1 DBWORD 2 DW

DWORD 4 DDQUADWORD 8 DQTENBYTES 10 DT

Abban az esetben, ha a változó egy tömböt jelöl, a típusa azoknak a bájtoknak a száma lesz, amelyek a változó egy egyszerű elemében vannak.

Példa:

TABLE_DATA SEGMENTTABLE DW 12

DW 34NUM1 DB 5TABLE_TWO DW 67

DW 89DW 1011

NUM2 DB 12RATES DW 314OTHER_RATES DD 1718TABLE_DATA ENDS

A változók jellemzőit az alábbi táblázat tartalmazza:

Azonosító Szegmens Eltolás Típus

TABLE TABLE_DATA 0 2

NUM1 TABLE_DATA 4 1

TABLE_TWO TABLE_DATA 5 2

NUM2 TABLE_DATA 11 1

RATES TABLE_DATA 12 2

OTHER_RATES TABLE_DATA 14 4

A DB, DW, DD, DQ és DT direktívák a memória inicializására is szolgálnak. A DQ és DT direktívákat főként a társprocesszor használata esetén indokolt használni. A DQ-val hosszú egész számokat, a DT-vel pedig pakolt decimális (max. 18 jegyű) számokat tudunk definiálni.

36ASSEMBLY.DOC 09/05/2023

Page 38: Az INTEL 8088/8086users.atw.hu/kandolev/programozas/Assembly/TAV_program... · Web viewAz INTEL 8088/8086 mikroprocesszor assembly nyelve Kandó Kálmán Muszaki Foiskola Készítette

Kandó Kálmán Mûszaki Fõiskola Assembly segédletSzámítógéptechnikai Intézet

A direktíva jobb oldalán kifejezés is állhat. Ennek az a hatása, hogy a memória egy egysége a kifejezés értékére inicializálódik. A memóriaegység DB esetén egy bájt, DW esetén egy szó, DD esetén duplaszó, DQ esetén 8 bájt és DT esetén 10 bájt.

Kifejezések

A kifejezések használhatók a tárolási hely inicializálására.

Kétféle kifejezés van: numerikus és címkifejezés.

Numerikus kifejezés például: 5, vagy 4*50.

Címkifejezés lehet egy változó, vagy egy címke. Címkifejezéssel csak a DW vagy DD direktívával lehet inicializálni tárolási helyet.

A DW direktíva a memória egy szavát inicializálja a változó szegmensbeli eltolódásával. A DD a memória két szavát inicializálja a változó szegmens címével és eltolódásával.

Példa:FOO SEGMENT AT 55HZERO DB O ;EGY BÁJT: OONE DW ONE ;EGY SZó:OOO1HTWO DD TWO ;ALACSONYABB SZó:OOO3H

;MAGASABB SZó:OO55H FOUR DW FOUR+5 ;EGY SZó:OOOCHSIX DW ZERO-TWO ;EGY SZO:OFFFDHATE DB 5*6 ;EGY BÁJT:OO1EHFOO ENDS

A TWO változó a TWO szimbólum abszolút címét jelzi.

Nincs inicializálás

A ? kulcsszó az assembly nyelvben azt jelenti, hogy nem számít, számunkra közömbös, hogy az assembler milyen értékkel inicializálja ezt a helyet.

Példa:DB ?DW ?DD ?

Ezekben a példákban egy, kettő, ill. négy bájt van lefoglalva, de nincs inicializálva.

37ASSEMBLY.DOC 09/05/2023

Page 39: Az INTEL 8088/8086users.atw.hu/kandolev/programozas/Assembly/TAV_program... · Web viewAz INTEL 8088/8086 mikroprocesszor assembly nyelve Kandó Kálmán Muszaki Foiskola Készítette

Kandó Kálmán Mûszaki Fõiskola Assembly segédletSzámítógéptechnikai Intézet

A DUP lehetőség

A DUP lehetővé teszi, hogy a tárolásnál speciális kezdő értékkel (vagy értékek sorozatával) inicializáljunk, és megadhatjuk ezen értékek ismétlési tényezőjét is.

Formája:

kifejezés DUP (tétel)

Ahol a kifejezés egy szám, (nullánál nagyobb). A tétel lehet egy kifejezés (cím típusú, vagy numerikus), kérdőjel, adatok listája, vagy több DUP ismétlés. A tételt zárójelbe kell tenni.

Példa:DB 100 DUP (0) ;100 BÁJT 0DW 10 DUP (?) ;10 SZÓ ISMERETLEN ÉRTÉK FOODD 50 DUP (FOO) ;50-SZER AZ FOO ABSZOLUT

,CIME(AZAZ ELTOLÓDÁS ÉS ;SZEGMENS)

DB 10 DUP (1O DUP(O)) ;0-NAK 100-SZORI ISMÉTLÉSEDW 35 DUP (FOO,0,1) ;HÁROM SZÓNAK AZ ISMÉTLÉSE

Listák

Tételeknek egy zárójelezett listája ismételhető a tárolási hely inicializálására. Minden ami előfordulhat önmagában, előfordulhat úgy is, mint egy listának egy tagja.

Példa:

DB 5 DUP (1, 2, 4 DUP (3), 2 DUP (1,0) )

Ez a DB direktíva 5O bájtot inicializál, azaz ötször ismétli a következő bájtokat:

1, 2, 3, 3, 3, 3, 1, 0, 1, 0

ALPHA DW 2 DUP (3 DUP(1,2 DUP(4,8),6),0)

Ez a DW direktíva 36 szót inicializál. Két példányban a következő értékeket felvevő bájtokat:

1, 4, 8, 4, 8, 6, 1, 4, 8, 4, 8, 6, 1, 4, 8, 4, 8, 6, 0

Egy egyszerű lista, amely nem használja a DUP lehetőséget, állhat zárójel nélkül is. A következő lista ugyanazt az eredményt szolgáltatja, mint az előző:

DW 1,4,8,4,8,6DW 1,4,8,4,8,6DW 1,4,8,4,8,6,0

38ASSEMBLY.DOC 09/05/2023

Page 40: Az INTEL 8088/8086users.atw.hu/kandolev/programozas/Assembly/TAV_program... · Web viewAz INTEL 8088/8086 mikroprocesszor assembly nyelve Kandó Kálmán Muszaki Foiskola Készítette

Kandó Kálmán Mûszaki Fõiskola Assembly segédletSzámítógéptechnikai Intézet

Karakterláncok elhelyezése

Ha karaktereknek akarunk helyet inicializálni, akkor a karaktereket aposztrofok közé kell helyezni. Két karakteresnél hosszabb stringek elhelyezésére csak a DB direktíva használható.

Példák:

PART-1 DB 'THANKS'PART2 DB 'LOT'BUFFER DB 128 DUP('') ; 128 bájtot üresnek inicializál.LINES DB 80 DUP (72 DUP (''),ODH,OAH); 80 sort inicializál

DD (Define double-word)

Hatása: változó definiálására, vagy terület inicializálására használják. 2 szót (4 bájt) foglal el.

Példa:

DBPTR DD TABLA ; 16 BITES OFFSET UTÁNA; ; 16 BITES SZEGMENS BÁZIS ÉRTÉKLIST DD `XY`,2 DUP (?)FELSŐ DD 4294967295 ; MAXIMUMALSO DD -4294967295 ; MINIMUMSEC_PER_NAP DD 60*60*24 ;FORDITÁSKOR HAJTJA

;VÉGRE AZ ASSEMBLER

DQ (Define Quad-word)

Hatása: változónevet definiál, illetve 8 bájtos memóriahelyet inicializál az operandus zónában megadott numerikus kifejezésnek megfelelő értékre.

DT (Define tenbytes)

Hatása: változónevet definiál, illetve 10 bájtos memóriahelyet inicializál az operandus zónában megadott decimális szám értékére. A számot pakolt decimális formában ábrázolja.Az értékek elhelyezése az egyes direktíváknál úgy történik, hogy az értékek magasabb helyiértékű részei magasabb címekre kerülnek.

Elhelyezésszámláló és szegmentálás vezérlése

Ebbe a csoportba a következő direktívák tartoznak:

SEGMENT/ENDSORGGROUPASSUMEPROC/ENDPLABEL

A SEGMENT és ENDS direktívák

39ASSEMBLY.DOC 09/05/2023

Page 41: Az INTEL 8088/8086users.atw.hu/kandolev/programozas/Assembly/TAV_program... · Web viewAz INTEL 8088/8086 mikroprocesszor assembly nyelve Kandó Kálmán Muszaki Foiskola Készítette

Kandó Kálmán Mûszaki Fõiskola Assembly segédletSzámítógéptechnikai Intézet

A szegmens definiálása a következő formában történik:

NEV1 SEGMENT (követési-típus) (kombináció típus) ('osztálynév')

Egy ilyen SEGMENT direktíva után minden utasítás, vagy adat (kivéve a beágyazott szegmenseket), a NEV1 szegmensbe tartozik egészen addig, amíg egy

NEV1 ENDS

formájú direktíva meg nem jelenik.

Mindkét direktívában ugyanazt a szegmensnevet kell használni. A szegmensnév értéke a paragrafusszám lesz. A SEGMENT után a paramétereknek a fent leírt sorrendben kell állniuk. A paraméterek megadása nem kötelező! A direktívában három szabadon választható paraméter van, amelyek a szegmens jellemzőit írják elő:

-0 követési típus-1 kombináció típus-2 osztálynév maximum 40 karakterig, amelyik egy általunk választott tetszőleges név lehet,

aposztrófok közé téve.

A követési típus lehet:PARABYTEWORDPAGEINPAGE

Az öt követési típus az adott szegmens elhelyezését befolyásolja. Az assembler által lefordított programban minden cím, ami egy szegmensben van, relatív a szegmens kezdetéhez, azaz a paragrafus-számhoz. Amikor a töltőprogram elhelyezi a programunkat a memóriában, az egymást követő szegmenseket úgy tölti be, hogy azok kezdetének relatív eltolódása a paragrafus-számhoz viszonyítva 0 legyen, azaz eltolódás nélkül. Lehet néhány kihasználatlan bájt az előző szegmens vége és a következő kezdete között. A veszteség 0 és 15 bájt között van, mivel minden 16 bájtban kezdődik paragrafus. Ez történik az alapértelmezés szerint, azaz ha nem mondunk semmit, vagy, ha a PARA-t adjuk meg követési típusként a SEGMENT direktívában.

Az assembler lehetővé teszi, hogy a programból utasítást adjunk a töltőprogramnak arra vonatkozóan, hogy a kódot másképpen helyezze el a memóriában.

PARA azt specifikálja, hogy a szegmens egy szakaszhatáron (16 bájttal osztható címen) kezdődjön. Azaz, a cím legkisebb hexa jele: 0H).

BYTE a szegmens aktuális kezdete közvetlenül az előzőleg elhelyezett szegmens vége utáni első bájt lesz. Ebben az esetben a szegmens eltolódásával kell számolnunk! A szegmens paragrafus-száma a legközelebbi paragrafus határ lesz, amely megelőzi a szegmenst. Mivel a szegmens nem paragrafus határon kezdődik, ennek a kezdetnek is van egy eltolódása. Ez az eltolódás a kiválasztott (legközelebbi alacsonyabb) paragrafus-számtól való távolság bájtokban kifejezve. A töltőprogram előállítja a szegmens kezdetnél a paragrafus-számot és az eltolódást, majd a szegmens eltolódását hozzáadja minden olyan helynek az eltolódásához, amelyre abban a szegmensben hivatkoztunk. Így elérjük, hogy minden olyan címnek az eltolódása, amelyet ebben a szegmensben használunk, ennek a szegmensnek a paragrafus-számától

40ASSEMBLY.DOC 09/05/2023

Page 42: Az INTEL 8088/8086users.atw.hu/kandolev/programozas/Assembly/TAV_program... · Web viewAz INTEL 8088/8086 mikroprocesszor assembly nyelve Kandó Kálmán Muszaki Foiskola Készítette

Kandó Kálmán Mûszaki Fõiskola Assembly segédletSzámítógéptechnikai Intézet

való eltolódás lesz.

WORD hatása ugyanaz, mint a BÁJTé, csak a szegmens az őt megelőző szegmenst követően szóhatáron kezdődik.

PAGE előírja, hogy laphatáron kezdődjön a szegmens. (azaz olyan címen, amely 256-tal osztható).

INPAGE A szegmens hossza nem lehet 256 bájtnál nagyobb.

A kombinációs típus lehet:PUBLICCOMMONAT kifejezésSTACKMEMORY

A SEGMENT direktívában levő kombináció típus arról ad információt, hogy ez a szegmens hogyan kapcsolódhat a többihez, szerkesztés és abszolút címekre való helyezés után.

PUBLIC Ha a PUBLIC-ot adtuk meg, akkor a szegmens a többi modullal való összeszerkesztés során összeláncolódik az ugyanilyen nevű többi szegmenssel, azaz az összes ilyen nevű szegmens összefüggő lesz. A sorrendjüket egy szerkesztési parancs határozza meg.

COMMON: COMMON megadása azt eredményezi, hogy ez a szegmens az összes többi ugyanilyen nevű más modulokból származó szegmensekkel azonos memóriaterületre kerül. Ez azt jelenti, hogy különböző címkék, vagy változónevek (különböző modulokból) vonatkozhatnak ugyanarra a címre.

Például programok egy moduljában (MODULE1) definiálunk egy szegmenst:

GLOBAL_DATA SEGMENT COMMONPARAM1 DB 34HASSOC1 DB 82HPARAM2 DB 61HASSOC2 DB 75HGLOBAL_DATA ENDS

Azután egy másik modulban (MODULE2), ami külön van fordítva, GLOBAL_DATA-t a következőképpen definiáljuk.

GLOBAL_DATA SEGMENT COMMON

ITEM1 DW ?ITEM2 DW ?

GLOBAL_DATA ENDS

Ekkor pontosan 4 bájt foglalódik a memóriában a GLOBAL_DATA-nak, de az, hogy hogyan érjük el őket, az attól függ, hogy melyik névvel hivatkozunk rájuk.

Minden név csak a saját moduljában ismert, kivéve, hogyha PUBLIC és EXTRN direktívákat használunk.

41ASSEMBLY.DOC 09/05/2023

Page 43: Az INTEL 8088/8086users.atw.hu/kandolev/programozas/Assembly/TAV_program... · Web viewAz INTEL 8088/8086 mikroprocesszor assembly nyelve Kandó Kálmán Muszaki Foiskola Készítette

Kandó Kálmán Mûszaki Fõiskola Assembly segédletSzámítógéptechnikai Intézet

AT kifejezés A szegmens annál a paragrafusnál kezdődik, amit az assembler a kifejezés értékére kiszámít. A számpár, ami a szegmens abszolút címét fejezi ki (paragrafus szám, 0) lesz, azaz nincs eltolódás. Amennyiben eltolódást is akarunk, akkor a következő sorban ORG direktívát kell szerepeltetnünk.

STACK Ennek a szegmensnek a hozzáférési módja LIFO (LAST-IN, FIRST-OUT, azaz utolsónak be, elsőnek ki). A felhasználható assembly utasítások: PUSH, POP, CALL, INT, IRET, POPF, PUSHF, RET.A szerkesztő program megköveteli, hogy legalább egy STACK szegmens legyen definiálva. Ennek a kombinációtípusnak a hatására a szegmens összekapcsolódik azokkal a szegmensekkel, amelyek más modulokban vannak, de ugyanaz a nevük. Inkább fedik egymást, mint összekapcsolódnak. Ez azt jelenti, hogy nem ott kezdődik az egyik, ahol az utolsó befejeződött, hanem mindegyik ugyanazon a báziscímen kezdődik.A stack szegmensek a magasabb memóriacímen kezdődnek.

Például tegyük fel, hogy az egyik modulban a következőket írja:

STACK_SEG SEGMENT STACKDW 20 DUP (?)

STACK_TOP LABEL WORDSTACK_SEG ENDS

és egy másikban:

STACK_SEG SEGMENT STACKDW 14 DUP(?)

TOP_STACK LABEL WORDSTACK_SEG ENDS

00000H

STACK_REG

STACK

STACK_TOP

34 szó SS

SP

0FFFFH

MEMORYA MEMORY a COMMON-hoz hasonlóan műkődik, de a szegmens az összes többi fölé helyeződik a memóriában.Az együtt szerkesztendő modulok minden csoportjában csak egy szegmens lesz ilyen kombináció típussal.

42ASSEMBLY.DOC 09/05/2023

Page 44: Az INTEL 8088/8086users.atw.hu/kandolev/programozas/Assembly/TAV_program... · Web viewAz INTEL 8088/8086 mikroprocesszor assembly nyelve Kandó Kálmán Muszaki Foiskola Készítette

Kandó Kálmán Mûszaki Fõiskola Assembly segédletSzámítógéptechnikai Intézet

ORG Direktíva

Az assembler a fordítás során állítja a címszámlálót. A címszámláló értéke minden szegmens kezdetekor 0 lesz és minden bájthozzárendelésnél eggyel nő. Az aktuális címszámláló értéket az ORG direktívával megváltoztathatjuk.

GROUP direktíva

Ez a direktíva közli az assemblerrel, hogy az operandus listában megnevezett szegmenseket ugyanabban a 64K memóriában kívánjuk elhelyezni. A csoportnak van egy neve, amelyet ugyanúgy használhatunk, mint egy szegmens nevet.

A csoportok definiálásának az az előnye, hogy a csoporton belüli ugrásokhoz csak 16 bit szükséges még akkor is, ha másik szegmensbe ugrunk át. Ez a direktíva nem befolyásolja, hogy a betöltő program a szegmenseket hova töltse be, erre a SEGMENT direktívában lévő osztálynév ad utalást.

A direktíva formája:

NEV GROUP SEGNAM1,SEGNAM2,.....

Ahol SEGNAM1, SEGNAM2, stb. vagy egy SEGMENT direktíva névmezője, vagy a "SEG VALTOZONEV" kifejezés, vagy olyan "SEG CIMKENEV", ami visszavezet abba a szegmensbe, amelyikben ezt a nevet definiáltuk. Ez főleg az előre utaló, vagy külső neveknél fontos.

A csoport nevét szokás az ASSUME direktívában szegmens kijelölésénél megadni. Csoportok esetében minden cím a csoport kezdetéhez relatív.

ASSUME direktíva:

Formája:

ASSUME SEGREG:SEGNAM (,SEGREG:SEGNAM,...) vagy

ASSUME NOTHING

Ahol SEGREG a DS, ES, CS, SS egyikét jelenti és SEGNAM tetszőleges szegmensnév tetszőleges előzőleg definiált csoportnév a SEG változónév kifejezés, vagy SEG címkenév, vagy a NOTHING kulcsszó. Példa:

ASSUME DS: DATA WORDS_SEGMENT_NAME,& ES: STRING_SEGMENT_NAME,& SS: NOTHING,CS:CODE_SEG_NAME

Lényeges dolog, hogy az assembler ismerje azt a környezetet, amelyben a végrehajtás során a generált utasítások futni fognak. Ez a környezet mind a négy szegmensregiszter várható tartalmából áll. Az ASSUME mondja meg az assemblernek, hogy milyen címek lesznek ott. Az assembler ennek alapján ellenőrzi, hogy vajon azok a változók, amelyre hivatkozunk, címezhetők-e a kijelölt szegmensregisztereken keresztül, és hogyha szükséges, akkor PREFIX BÁJTokat generáljon a változóknak.

43ASSEMBLY.DOC 09/05/2023

Page 45: Az INTEL 8088/8086users.atw.hu/kandolev/programozas/Assembly/TAV_program... · Web viewAz INTEL 8088/8086 mikroprocesszor assembly nyelve Kandó Kálmán Muszaki Foiskola Készítette

Kandó Kálmán Mûszaki Fõiskola Assembly segédletSzámítógéptechnikai Intézet

Az assembler által generált utasítások ezektől a várható tartalmaktól függnek. Minden memóriacím egy 16 bites számokból álló számpár, az eltolódás és szegmens báziscíme. Majdnem mindegyik utasítás, amelyik a memóriára hivatkozik, csak az eltolódást használja, arra számítva, hogy a szegmens báziscímet megkapja a szegmensregiszterből. Ezért egy ASSUME direktívát kell használni a szegmensregiszterek használata előtt, és programunk azon pontjai előtt, ahol a futás során megváltozott szegmensregiszter megjelenik.

Amikor az assemblert a szegmensregiszter futáskori tartalmáról informáljuk, az ASSUME direktíva azt is lehetővé teszi, hogy az explicit szegmens prefix bájtok kódo1ását nagy részben elkerüljük. ASSUME direktíva hiányában minden adatra való memória hivatkozásnál explicit meg kell nevezni azt a szegmensregisztert, amelyet, mint báziscímet használunk ezen adathoz való hozzáférésnél. Ezt a következő példákkal szemléltetjük.

GLOBAL SEGMENTSOURCE DW ?DEST DW ?GLOBAL ENDSPARAMS SEGMENTFILL DW ?PARAMS ENDSCODE SEGMENT

ASSUME CS:CODEMOV AX,PARAMSMOV DS,AXMOV AX,GLOBALMOV ES,AX

MOV AX,ES:DESTSUB AX,ES:SOURCEINC AXMOV DS:FILL,AX .

CODE ENDS

Minden változóra való hivatkozásnál szükséges a szegmensregiszter kijelölése. (Az SS és CS is hasonlóan). A fenti példával ekvivalens a következő:

GLOBAL SEGMENTSOURCE DW ?DEST DW ?GLOBAL ENDSPARAMS SEGMENTFILL DW ?PARAMS ENDSCODE SEGMENT

ASSUME CS:CODE,DS:PARAMS,ES:GLOBALMOV AX,PARAMSMOV DS,AXMOV AX,GLOBALMOV ES,AX

MOV AX,DESTSUB AX,SOURCEINC AXMOV FILL,AX

Ha helyesen használjuk az ASSUME-t, akkor nem kell gondoskodnunk szegmens prefix bájtokról, ezt az assembler megteszi helyettünk.

44ASSEMBLY.DOC 09/05/2023

Page 46: Az INTEL 8088/8086users.atw.hu/kandolev/programozas/Assembly/TAV_program... · Web viewAz INTEL 8088/8086 mikroprocesszor assembly nyelve Kandó Kálmán Muszaki Foiskola Készítette

Kandó Kálmán Mûszaki Fõiskola Assembly segédletSzámítógéptechnikai Intézet

Az assembler a változóra vagy címkére való hivatkozásoknál az alábbi ellenőrzést végzi el:

-0 melyik szegmens tartalmazza ezt a hivatkozást-1 szerepel-e ez a szegmens, vagy az őt tartalmazó csoport egy szegmensregiszterre (DS,

ES, CS vagy SS-re) vonatkozó ASSUME-ban-2 ha nem, akkor egy hibaüzenet jön, hacsak az adatra való hivatkozásnak nincsen explicite

kódolt szegmens prefix bájtja-3 ha igen, akkor megvizsgálja, hogy ez az a szegmensregiszter, amit az aktuális hardver

utasítás normális esetben használ-4 ha igen, akkor generálja a kódot-5 ha nem, akkor áttörhető-e az alapértelmezés-6 ha igen, akkor generál egy szegmens prefix bájtot, azért, hogy a helyes

szegmensregisztert használja és azután generálja a kódot-7 egyébként hibát jelez.

Alapértelmezés szerint az alábbi módon használja a szegmensregisztereket:

Bármilyen hivatkozás a memóriára vagy a STACK-re a DS, ES, vagy az SS regisztereket fogja használni. Ezeknek a regisztereknek tehát elő kell fordulniuk egy ASSUME-ben, megelőzve azt a kódot, ami memóriát ér el. Hasonlóan, az utasításcímkék (beleértve a procedúra neveket is) implicite használják a CS regisztert, ami tehát elő kell, hogy forduljon egy ASSUME utasításban, ami megelőz bármely olyan kódot, ami a címkére hivatkozik. Ha egy szegmensregisztert nem fogunk használni egy modulban vagy egy szegmensben, akkor erre a regiszterre megadhatjuk az ASSUME NOTHING-ot.

Ez a direktíva különösen a CS esetében lényeges, mert azoknak a címeknek az eltolódásai, amelyek az utasításokat tartalmazzák, mindig CS relatívak.

LABEL direktíva

A LABEL direktíva nevet hoz létre az assembly aktuális helye számára, ami adat vagy utasítás lehet.

A direktíva formája:

Név LABEL típus

Ezt a direktívát arra használjuk, hogy egy helyhez hozzákapcsoljunk egy második nevet úgy, hogy ezután különböző módon a PTR operátor használata nélkül hivatkozhassunk rá. Például, ha ugyanazt a memóriaterületet bájt és szó típusú tömbként is kezelnünk kellene, akkor a tömb definíciója a következő lehetne:

VECTORB LABEL BYTEVECTOR DW 1OOO DUP(O)

Ha BÁJTként hivatkozunk a tömb elemeire:

ADD AL,VECTORBHa szóként, akkor:

ADD AX,VECTOR

45ASSEMBLY.DOC 09/05/2023

Page 47: Az INTEL 8088/8086users.atw.hu/kandolev/programozas/Assembly/TAV_program... · Web viewAz INTEL 8088/8086 mikroprocesszor assembly nyelve Kandó Kálmán Muszaki Foiskola Készítette

Kandó Kálmán Mûszaki Fõiskola Assembly segédletSzámítógéptechnikai Intézet

A PTR operátort használva:ADD AL, BYTE PTR VECTOR

Példa egy címke távolság attribútumának megváltoztatására:

PROCESS-ITEMS LABEL FARLOCAL-NAME: MOV AX,FIRST-ITEM ;tetsz.utasitás

Erre akkor van szükségünk, ha egy címkére szegmensen belülről és szegmensen kívülről is hivatkozunk.

A PROC direktíva

Az utasításokat a program áttekinthetősége érdekében célszerű jól meghatározott funkciók szerint blokkokba csoportosítani. Ennek a megvalósítása a PROC direktíva segítségével történik.

Procedura_név PROC NEAR/FAR..RET

.Procedura_név ENDP

A PROC-cal azonosított blokkot többféle módon végre lehet hajtani -8 IN-LINE,-9 rá lehet ugrani, -10 vagy CALL utasítással lehet indítani.

Amikor egy procedúrát hívunk (CALL procedúra_név), mielőtt a vezérlés átkerülne rá, a következő utasítás címe eltárolódik a STACK-ben. Ezzel válik lehetővé, hogy a procedúra végén RET hatására a vezérlés visszatérjen a hívást követő utasításra. A RET a stack tetején lévő érték alapján tér vissza a hívási helyre.Amennyiben a procedúrára in-line adódott rá vezérlés, vagy ugró utasítással tértünk rá, természetesen a RET utasításnak nincs értelme. A RET a CALL utasítással összhangban használható.

Programszerkesztési direktívák

A direktíváknak ebbe a csoportjába a következő direktívák tartoznak:

PUBLIC EXTRNEND

A moduláris programfejlesztés és az áthelyezhetőség lehetővé teszi, hogy programjainkat több külön álló modulból állítsuk össze, külön írjuk, teszteljük, majd a hibátlan modulokat szerkesztés során egyetlen programmá kapcsoljuk össze. Fontossá válik, hogy ezek a különálló modulok információt adjanak át egymásnak. A programszerkesztési direktívák feladata, hogy ez a kommunikáció létrejöhessen.

46ASSEMBLY.DOC 09/05/2023

Page 48: Az INTEL 8088/8086users.atw.hu/kandolev/programozas/Assembly/TAV_program... · Web viewAz INTEL 8088/8086 mikroprocesszor assembly nyelve Kandó Kálmán Muszaki Foiskola Készítette

Kandó Kálmán Mûszaki Fõiskola Assembly segédletSzámítógéptechnikai Intézet

PUBLIC direktíva

A PUBLIC direktíva hatására minden, az operandus listában felsorolt szimbólum elérhető a többi modul számára.Formája:

PUBLIC szimbólumok listájaPélda:

PUBLIC SIN, COS, TAN, SQRT

EXTRN direktíva

Az EXTRN direktíva segítségével adjuk át az assembler számára azoknak a szimbólumoknak a listáját, amelyre egy adott modulban hivatkozunk, de amelyeket egy másik modulban definiáltunk.

Formája:

EXTRN EXTREF1, EXTREF2,...

ahol minden EXTREF a következő formájú:NÉV: TIPUS

Az EXTRN-ben megadott típus ugyanaz kell, hogy legyen, mint a definícióban. A típus megadása szükséges (BYTE, WORD, DWORD, NEAR, FAR, vagy ABS lehetséges). EXTRN a programmodulban bárhova írható. Egy név nem szerepelhet PUBLIC és EXTRN direktíva operandus zónájában egyidőben.

Példa:EXTRN NTRY:BYTE,ADDTR:FAR,BEGIN:WORD,NUMBER:ABS

ahol ABS egy számot jelent.

END direktíva

Az END direktíva azonosítja a forrásprogram végét és hatására az assembler befejezi a működését.

Formája:

END választható címke

Egy forrásprogramban csak egy END direktíva lehet. A választható címke a program végrehajtásakor kezdőcímül szolgál. Ha nincs kezdőcím, akkor feltételezzük, hogy nem ez a főmodul. Amikor több különálló programmodul van, és összekapcsoljuk őket, akkor csak egyetlen egyet láthatunk el program kezdőcímmel. A kezdő címmel ellátott modul lesz a főmodul.

47ASSEMBLY.DOC 09/05/2023

Page 49: Az INTEL 8088/8086users.atw.hu/kandolev/programozas/Assembly/TAV_program... · Web viewAz INTEL 8088/8086 mikroprocesszor assembly nyelve Kandó Kálmán Muszaki Foiskola Készítette

Kandó Kálmán Mûszaki Fõiskola Assembly segédletSzámítógéptechnikai Intézet

Szimbólumdefiniálás

A direktíváknak ebbe a csoportjába az

EQU és aPURGE

direktíva tartozik.

EQU direktíva

Az assembler amikor változót vagy címkét definiálunk, ezekhez mindig az elhelyezésszámláló aktuális értékét rendeli. Az EQU direktívával olyan szimbólumot definiálhatunk, amelyhez az assembler az operandus zónában meghatározott kifejezéshez tartozó értéket rendeli.

Formája:

név EQU kifejezés

A definiált értékek az assembly időben végig élnek, hacsak nem töröljük azokat.Nem lehet újradefiniálni az EQU-val definiált szimbólumokat.

Példa:

EGYESEK EQU 0FFHMOVAL,25 AND EGYESEK

Az is lehetséges, hogy pótneveket használjunk bonyolultabb kifejezésekre.

Példák:A EQU ARRAY[BX][SI]B EQU (ARM*7+44) AND EGYESEKSUMMA EQU ARRAY-SUMMA

Ezek után az EQU definíciók után A-t és B-t úgy használhatjuk, mint a fent látott kifejezések szinonímáit. Ezzel időt takaríthatunk meg és hibákat kerülhetünk el. Ez megjavítja a programok olvashatóságát, olyan neveket definiálhatunk, amelyeknek a jelentése segít az alkalmazásnál.

PURGE direktíva

Ennek a direktívának a segítségével nevet törölhetünk az assembler szimbólumtáblájából. Ha egy nevet töröltünk, akkor azt újradefiniálhatjuk és a korábbi alkalmazástól eltérő módon használhatjuk. Ha tőrölt, de újra nem definiált címkére hivatkozunk, akkor az assembler hibát jelez.

Formája:

PURGE nev1,nev2,...nevn

48ASSEMBLY.DOC 09/05/2023

Page 50: Az INTEL 8088/8086users.atw.hu/kandolev/programozas/Assembly/TAV_program... · Web viewAz INTEL 8088/8086 mikroprocesszor assembly nyelve Kandó Kálmán Muszaki Foiskola Készítette

Kandó Kálmán Mûszaki Fõiskola Assembly segédletSzámítógéptechnikai Intézet

Fordításvezérlő direktívák

Az ebbe a csoportba tartozó direktívák a forrás, tárgy-, lista- és referencia-fájlok kezelését vezérlik. Ezek a következők:

INCLUDERADIX%OUTNAMETITLESUBTTLPAGE

INCLUDEA forráskódba fájl bemásolását írhatjuk elő a segítségével. Formája:

INCLUDE fájlnév

RADIXA forrásfájlban előforduló számok számrendszerének implicit alapját írhatjuk elő a következőképpen:

.RADIX kifejezés

ahol a kifejezés értéke egy 2 és 16 közötti szám lehet.

%OUT Szöveg írható ki fordítás közben az alábbi direktívával:

%OUT szöveg

TITLE, SUBTTL

A fordítási listák fejléceinek előírására való direktívák:TITLE szöveg ; a modul listájának tetejére kerülő címSUBTTL szöveg ; a következő lap tetejére kerülő alcím

PAGE

A listafájl lapkezelését írja elő:PAGE hossz, szélesség (hossz: 10-255, szélesség: 60-132; implicit: 50,80)

NAME direktíva

A NAME direktíva egy nevet rendel az ezen assembly által generált tárgymodulhoz.

Formája:

NAME MODULNÉV

A modulnévre több modul összeszerkesztésekor van szükség, a modulok sorrendjének meghatározásához.

49ASSEMBLY.DOC 09/05/2023

Page 51: Az INTEL 8088/8086users.atw.hu/kandolev/programozas/Assembly/TAV_program... · Web viewAz INTEL 8088/8086 mikroprocesszor assembly nyelve Kandó Kálmán Muszaki Foiskola Készítette

Kandó Kálmán Mûszaki Fõiskola Assembly segédletSzámítógéptechnikai Intézet

Utasítások

Az utasításokat funkciójuk alapján az alábbi csoportokba sorolhatjuk:adatmozgató utasításokaritmetikai műveletekkorrekciós utasításoklogikai utasításokléptetési utasításokösszehasonlítást végző utasításokvezérlő utasításokI/O utasítások

A gép által végrehajtható utasítások mindegyike funkcióját tekintve valamelyik csoportba besorolható, mégis szokás még két csoportról, a

stringműveletek és akorrekciós utasítások

csoportjáról beszélni.

Ezek az utasítások annyira speciális és hasonló mechanizmus alapján működnek, hogy célszerű ebben a csoportosításban tárgyalni ezeket.

Adatmozgató utasítások

Ezeknek az utasításoknak a segítségével lehet adatokat mozgatni memóriából regiszterbe, regiszterből memóriába, vagy egyik regiszterből a másikba, illetve feltölteni konstans értékkel memóriát, vagy regisztert. Ebbe a csoportba a következő utasítások tartoznak:

MOV, LEA, XCHG, LAHF, SAHF

MOV (Move)

A programozás során talán leggyakrabban használt utasítás a MOV. Adatmozgatást végez regiszterből regiszterbe, regiszterből memóriába, vagy memóriából regiszterbe. Különböző típusai léteznek, ami azt jelenti, hogy az operandustól függően más és más az utasítás gépi kódja. Az alábbiakban ezt látjuk részletesen.

1. típus : memóriába akkumulátorból 2. típus : akkumulátorba memóriábólMOV ADATSZO, AX MOV AX, BETAMEMMOV GAMMABYTE, AL MOV AL, GAMMABYTE

3. típus : szegmensregiszterbe memó- 4.típus : memóriába, vagy regiszterbe riából, vagy regiszterből szegmensregiszterbőlMOV ES, DX MOV DX, DSMOV DS, AX MOV BETAWORD, DSMOV ES, SS : NEW-WORD[DI] MOV GAMMA, CS

CS nem lehet ! CS legális!

50ASSEMBLY.DOC 09/05/2023

Page 52: Az INTEL 8088/8086users.atw.hu/kandolev/programozas/Assembly/TAV_program... · Web viewAz INTEL 8088/8086 mikroprocesszor assembly nyelve Kandó Kálmán Muszaki Foiskola Készítette

Kandó Kálmán Mûszaki Fõiskola Assembly segédletSzámítógéptechnikai Intézet

5.típus 6.típus 7.típusa./regiszterből regiszterbe közvetlen érték regiszterbe közvetlen érték memóriábaMOV CX, DX MOV AX, 77 MOV

MEMWORD, 66MOV DI, 618 MOV BYTE PTR[DI], 66

b./memóriából regiszterbeMOV AX, MEMVALUE

c./regiszterből memóriábaMOV ARRAY[DI], DX

LEA ( Load effective adress)

Ez az utasítás az operandusban megjelölt változó, vagy címke offsetjét tölti be egy regiszterbe. Ez általában megegyezik az assembler által előállított offsettel, de nem mindig!Példák:

LEA BX, VALTOZOLEA DX, BETA[BX][SI]

XCHG (Exchange)

Megcseréli az operandusokban specifikált regiszterek, illetve memóriaszó és regiszter tartalmát.

1. típus : az AX és egy regiszter tartalmát cseréli fel.XCHG BX, AX

2. típus : egy regiszter illetve memóriaszó és regiszter tartalmát cseréli fel.XCHG BETAWORD, CXXCHG DH, ALPHABYTEXCHG BL, AL

XLAT[[AL] + [BX]] -> [AL]

LAHF[F0-7] -> AH

SAHFAH -> [F0-7]

LDS reg, mem[mem] -> reg[mem+2] -> DS

LES[mem] -> reg[mem+2] -> ES

51ASSEMBLY.DOC 09/05/2023

Page 53: Az INTEL 8088/8086users.atw.hu/kandolev/programozas/Assembly/TAV_program... · Web viewAz INTEL 8088/8086 mikroprocesszor assembly nyelve Kandó Kálmán Muszaki Foiskola Készítette

Kandó Kálmán Mûszaki Fõiskola Assembly segédletSzámítógéptechnikai Intézet

Aritmetikai utasítások

Az ebbe a csoportba tartozó utasítások segítségével a négy alapművelet végezhető el (összeadás, kivonás, szorzás és osztás), valamint inkrementálás, dekrementálás és negáció. A műveleteket csak bájtokkal, illetve szavakkal végezhetjük. A műveletekegy vagy két operandussal rendelkeznek. Amennyiben két operandusúak, akkor típusuknak egyezniük kell.

Ezek az utasítások a művelet eredményétől függően állítják a jelzőbiteket a következőképpen:CF = 1, ha a legmagasabb helyiértéken átvitel keletkezett;SF = 1, ha az eredmény negatív ( legmagasabb helyiértékű bitje 1);OF= 1, ha az eredmény túlcsordult, nem ábrázolható (CF XOR SF);ZF = 1, ha az eredmény 0;

PF = 1, ha az eredmény alacsonyabb helyértékű bájtjában a beállított (1 értékű ) bitek száma páros;

AF = 1, ha a 3. bitről a 4.-re átvitel keletkezett.

Addítiv műveletekADD (ADDition)ADC (Addition with Carry)SUB (Substruction)SBB (SuBstruction with carry)

Ezek mindegyike két operandussal rendelkező művelet. Az eredmény mindig az első operandusban keletkezik. Ebből következik, hogy az első operandus csak regiszter, vagy memóriacím lehet, a második operandus viszont lehet közvetlen érték is.Ezek közül részletesen csak az ADC utasítással foglakozunk, a többi értelemszerűen ugyanígy működik.

ADC ( ADd with Carry )

Ez az utasítás két operandussal rendelkezik A két operandus által meghatározott értéket és a carry flag tartalmát összeadja és az eredményt elhelyezi az első operanus által meghatározott helyen., azaz

op1 + op2 + (CF) ?op1

Típusai1./ regiszter és regiszter összege

ADC AX, SIADC DI, BXADC CH, BL

b./ regiszter és memória c./ regiszter és regiszterADC DX, MEMWORD ADC BETA[DI], BXADC CX, ALPHA[BX][SI] ADC MEMWORD, AX

52ASSEMBLY.DOC 09/05/2023

Page 54: Az INTEL 8088/8086users.atw.hu/kandolev/programozas/Assembly/TAV_program... · Web viewAz INTEL 8088/8086 mikroprocesszor assembly nyelve Kandó Kálmán Muszaki Foiskola Készítette

Kandó Kálmán Mûszaki Fõiskola Assembly segédletSzámítógéptechnikai Intézet

2./ Közvetlen érték akkumulátorbaADC AL, 3ADC AX, 333

3./ a./ Közvetlen érték memóriához b./ közvetlen érték regiszterhezADC BETA[SI], 4 ADC DH, 65ADC MEMLOC, 7455 ADC CX, 545

Inkrementálás, dekrementálás és negálás

INC (Incrementation)DEC (Decrementation)NEG (Negation)

Ezek az utasítások egy operandussal rendelkeznek és speciális műveleteket végeznek. Az operandus értékét eggyel növelik, eggyel csökkentik, illetve negálják.Példa:

INC DXDEC MEMNEG AX

53ASSEMBLY.DOC 09/05/2023

Page 55: Az INTEL 8088/8086users.atw.hu/kandolev/programozas/Assembly/TAV_program... · Web viewAz INTEL 8088/8086 mikroprocesszor assembly nyelve Kandó Kálmán Muszaki Foiskola Készítette

Kandó Kálmán Mûszaki Fõiskola Assembly segédletSzámítógéptechnikai Intézet

Multiplikatív műveletek

MUL (Multiplication)IMUL (Multiplication DIV (Division)IDIV (Division)

-11 Ezek az utasítások látszólag egy operandussal rendelkező utasítások, ugyanis a másik operandus (szorzandó, vagy osztandó) helye rögzített.

-12 Az operandusok lehetnek előjelesek, vagy előjel nélküliek, ennek megfelelően kell választanunk a fenti műveletek közül.

-13 A műleletek operandusa csak regiszter, vagy memóriacím lehet (konstans nem).

A következőkben csak a MUL és DIV utasítást ismertetjük, ugyanis az IMUL és IDIV utasítások hasonlóan működnek, mint ezek, csak az operandusokat előjelesnek tekintik.

MUL ( Multiply accumulator by register -or- memory )

Az utasítás az AL, vagy AX regiszter tartalmát szorozza az utasításban specifikált regiszter, vagy memória tartalmával ( előjel nélkül ! ) Ha az operandus bájt, akkor a művelet bájtosan, ha szó, akkor a művelet szavasan megy végbe.

-14 Bájtos műveleteknél az AL tartalmát szorozza az operanussal. Az eredmény AX-ben keletkezik

-15 Szavas műveleteknél az AX tartalmát szorozza az operandussal. Az eredmény DX-ben és AX-ben keletkezik

Azaz, ha op. bájtos, akkor (AL) * op -> AX

ha op. szavas, akkor (AX) * op -> DX, AX DX-ben a magasabb, AX-ben az alacsonyabb helyiértékú rész

Ha az eredmény felső fele 0, akkor CF és OF flag = 0,egyébként (CF)=1, és (OF) = 1

Példák : a./ MOV AL, OP1 MUL OP2 eredmény AX-ben b./ MOV AX, OPER1

MUL OPER2 eredmény DX, AX-ben

c./ MOV AL, ADATBYTE CBW MUL ADATSZÓ

DIV ( Division )

54ASSEMBLY.DOC 09/05/2023

Page 56: Az INTEL 8088/8086users.atw.hu/kandolev/programozas/Assembly/TAV_program... · Web viewAz INTEL 8088/8086 mikroprocesszor assembly nyelve Kandó Kálmán Muszaki Foiskola Készítette

Kandó Kálmán Mûszaki Fõiskola Assembly segédletSzámítógéptechnikai Intézet

Az utasítás az operandus típusától függően bájtosan, vagy szavasan hajtódik végre. Bájtos osztásnál az AX, szavas osztásnál pedig a DX, AX regiszterek tartalmát elosztja az operandussal. bájtos műveletnél az eredmény az AL-ben, maradék az AH-ban, szavas műveletnél pedig az eredmény az AX-ben, a maradék a DX-ben keletkezik. Ha az eredmény nem fér el a kijelölt helyen (FF-nél, vagy FFFF-nél nagyobb) akkor 0 típusú szoftver interrupt keletkezik, aminek eredménye :

Flag regiszter ® stack(IF) = 0 (TF)=0(SP)=(SP)-2 (CS)®(SP) (2)®(CS)(SP)=(SP)-2 (PC)®(SP) (0)®(PC)

Példák :

a./ szót bájttal osztunk

MOV AX, NUMSZODIV DIVBYTE

b./ dupla szót szóval osztunk

MOV DX, NUMHIWORDMOV AX, NUMLOWORDDIV DIVSZO

c./ szót szóval osztunkMOV AX, SZOCBDDIV DIVSZO

IDIV

U.a., mint a DIV, de előjeles osztást hajt végre. ( Eredmény 7FH-nál, vagy 7FFFH-nál nagyobb, akkor szoftver IT jön létre ).

55ASSEMBLY.DOC 09/05/2023

Page 57: Az INTEL 8088/8086users.atw.hu/kandolev/programozas/Assembly/TAV_program... · Web viewAz INTEL 8088/8086 mikroprocesszor assembly nyelve Kandó Kálmán Muszaki Foiskola Készítette

Kandó Kálmán Mûszaki Fõiskola Assembly segédletSzámítógéptechnikai Intézet

Korrekciós utasítások

Gyakran a számok nem bináris formában állnak rendelkezésünkre, hanem a leggyakrabban ASCII kódban fordulnak elő pl. input művelet eredményeként. Ilyenkor, ha aritmetikai műveleteket akarunk rajtuk végrehajtani, akkor ASCII kódú decimális formáról bináris alakra kell átalakítanunk őket, hogy a bináris aritmetika segítségével a műveletet helyesen el tudjuk végezni, majd ismét egy átalakításra van szükségünk -binárisról ASCII kódú decimálisra - hogy az eredményt valamilyen output periférián meg tudjuk jeleníteni. Ez elég hosszadalmas művelet. Ez az átalakítás, vagy másnéven konverzió elkerülhető, ha használjuk a korrekciós utasításokat.

A korrekciós utasítások használata esetén lehetőség van arra, hogy az aritmetikai műveleteket ASCII kódú, vagy ahhoz közel álló formátumú pakolt decimális alakú számokkal végezzük, majd, hogy az eredmény az ASCII kódhoz, vagy a pakolt decimális alakhoz közelálló alakban álljon rendelkezésünkre az eredményen korrekciót hajtunk végre.

Ennek megfelelően két csoportra oszthatók a korrekciós utasítások:

-16 decimális adatokon végrehajtandó korrekció-17 pakolt decimális alakon végrehajtandó korrekció

AAA összeadás után (ASCII adjust for addition )

ha 0L(ALL)L9 és (AF)=0 ? (ALH)=0

ha 9<(ALL), vagy (AF)=1 ? (AL)=(AL)+6(AH)=(AH)+1(AF)=1 (CF)=(AF)(ALH)=0

Példa : AX tartalma: 0535H, (BL) : 39H

ADD AL, BLAAA

AAS (ASCII adjust for substraction)

ha 0L(ALL)L9 és (AF)=0 ? (ALH) = 0

ha 9<(ALL), vagy (AF)=1 ? (AL)=(AL)+6(AH)=(AH)+1(AF)=1 (CF)=(AF)(ALH)=0

56ASSEMBLY.DOC 09/05/2023

Page 58: Az INTEL 8088/8086users.atw.hu/kandolev/programozas/Assembly/TAV_program... · Web viewAz INTEL 8088/8086 mikroprocesszor assembly nyelve Kandó Kálmán Muszaki Foiskola Készítette

Kandó Kálmán Mûszaki Fõiskola Assembly segédletSzámítógéptechnikai Intézet

AAM(ASCII adjust for multiply)

A szorzatot módosítja, feltételezve, hogy a szorzás operandusa két páratlan BCD szám volt.

(AH) = AL / 0AH(AL) = (AL) % 0AHBeállított flag-ek : PF, SF, ZF

AAD (ASCII adjust for division )

Ezt az utasítást az osztást megelőzően használjuk.

(AL) = (AH)*0AH+(AL)(AH) = 0Beállított flagek : PF, SF, ZF

DAA(Decimal adjust for division)

Korrekciót hajt végre AL-en, amelyben két pakolt decimális operandus összege van.

Ha (AF) = 1, vagy 9<(ALL) ? (AL)=(AL)+6 ; (AF) = 1

Ha (CF) = 1, vagy 9<(ALH) ? (AL)=(AL)+60 ; (CF) = 1

Beállított flag-ek : AF, CF, PF, SF, ZF

DAS(Decimal adjust for substraction)

Korrekciót hajt végre AL-en, amelyben két pakolt decimális szám különbsége van.

Ha (AF) = 1, vagy 9<(ALL) ? (AL)=(AL)-6 ; (AF) = 1

Ha (CF) = 1, vagy 9<(ALH) ? (AL)=(AL)-60 ; (CF) = 1

Beállított flag-ek : AF, CF, PF, SF, ZF

CBW, ha (AL)<80H ? (AH)=0, agyébként (AH)=FFHCWD, ha (AX)<8000H ? (DX)=0, egyébként (DX)=FFFFH

57ASSEMBLY.DOC 09/05/2023

Page 59: Az INTEL 8088/8086users.atw.hu/kandolev/programozas/Assembly/TAV_program... · Web viewAz INTEL 8088/8086 mikroprocesszor assembly nyelve Kandó Kálmán Muszaki Foiskola Készítette

Kandó Kálmán Mûszaki Fõiskola Assembly segédletSzámítógéptechnikai Intézet

Logikai utasítások

Ezek az utasítások két operandussal rendelkeznek. Az utasítások a két operandussal bitenként végzik el a megadott logikai műveletet. Az eredmény az első operandus helyén keletkezik.

AND (AND: és művelet)OR (OR: vagy)XOR (XOR: kizáró vagy)NOT (nem

ezek az utasítások bitek törlésére

bitek 1-gyel való töltésérebitek megfordítására szolgálnak

TEST

Ez az utasítás ugyanazt végzi, mint az AND, csak nem változtatja meg az első operandus értékét, hanem csak a flag-eket állítja.

Maszk: az a konstans érték, amely szerint egy operandust vizsgálhatunk, vagy értékét állíthatjuk.

58ASSEMBLY.DOC 09/05/2023

Page 60: Az INTEL 8088/8086users.atw.hu/kandolev/programozas/Assembly/TAV_program... · Web viewAz INTEL 8088/8086 mikroprocesszor assembly nyelve Kandó Kálmán Muszaki Foiskola Készítette

Kandó Kálmán Mûszaki Fõiskola Assembly segédletSzámítógéptechnikai Intézet

Léptetési utasítások

Az ebbe a csoportba tartozó utasítások két operandussal rendelkezhetnek. A léptetendő adat meghatározására tetszőleges címzési módot használhatunk. A léptetések száma azonban korlátozott, értéke 1, vagy a CL regiszterben lévő érték lehet.

A léptetési utasítások két csoportba sorolhatók :

- logikai- aritmetikai

léptetések.

Logikai léptetések

Ezekre az léptetésekre az jellemző, hogy a valamilyen irányba történő léptetésnél az adott irányban kilépő bitek a másik irányban belépő bitek lesznek. Az utoljára kilépő bit a Carry flag-ben is megjelenik. Az ebbe a csoportba tartozó utasítások:

RCL (Rotate through Carry Left)RCR (Rotate through Carry Right)ROL (ROtate Left)ROR (ROtate Right)

RCR, RCLEzeknél az utasításoknál a Carry flag eredeti tartalma is részt vesz a körforgásban.

A kilépő bit ->Carry flagCarry flag eredeti tartalma ->® belépő bit

ROL, ROREzeknél az utasításoknál az utoljára kilépő bit belép a másik oldalon és egyúttal a Carry flag is felveszi a kilépő bit értékét.

a kilépő bit -> Carry flag, belépő bit

Aritmetikai léptetések

Ezeknél a léptetéseknél az egyik oldalról kilépő bitek helyett a másik oldalról vagy nullák lépnek be, vagy az előjel bit ismétlődik a léptetések számának megfelelő számú biten. Az ebbe a csoportba tartozó utasítások:

SAL (Shift Aritmatical Lleft)SAR (Shift Arithmetical Right)SHL (Shift Left)SHR (Shift Right)

59ASSEMBLY.DOC 09/05/2023

Page 61: Az INTEL 8088/8086users.atw.hu/kandolev/programozas/Assembly/TAV_program... · Web viewAz INTEL 8088/8086 mikroprocesszor assembly nyelve Kandó Kálmán Muszaki Foiskola Készítette

Kandó Kálmán Mûszaki Fõiskola Assembly segédletSzámítógéptechnikai Intézet

Összehasonlítást végző utasítás

CMP ( CoMPare two operands)

Ez az utasítás összehasonlítást végez. A kivonás műveletének megfelelően állítja a flag-eket.

1. típusa./ regisztert regiszterrel CMP AX, DXb./ memóriát regiszterrel CMP MEMWORD, SIc./ regisztert memóriával CMP AX, GAMMA[BX][SI]

2. típusa./ közvetlen értéket akkumulátorral CMP AL, 66

3. típusa./ Közvetlen értéket regiszterrel CMP BH, 7b./ Közvetlen értéket memóriaszóval CMP MEMWORD, 6ACEH

CMP MEMWORD, 6AH

Flag-eket kezelő utasítások

Carry flag CLC (Clear Carry)STC (Store Carry)CMC

D flag CLD (Clear D flag)STD (Store D flag)

Interrupt flag CLI (Clear I flag)STI (Store I flag)

60ASSEMBLY.DOC 09/05/2023

Page 62: Az INTEL 8088/8086users.atw.hu/kandolev/programozas/Assembly/TAV_program... · Web viewAz INTEL 8088/8086 mikroprocesszor assembly nyelve Kandó Kálmán Muszaki Foiskola Készítette

Kandó Kálmán Mûszaki Fõiskola Assembly segédletSzámítógéptechnikai Intézet

Stack-et használó utasítások

PUSH op

Ez az utasítás 2-vel csökkenti SP-t és az SP által megcímzett memóriahelyre kiírja az operandusban specifikált szót.Pl. PUSH BETA

PUSH BETA[BX]

POP op

Ez az utasítás egy szót tölt az SP által megcímzett helyről a megjelölt operandusba, majd 2-vel növeli SP-t. Pl. POP BX

POP SS POP CS nem megengedettPOP ALPHA

PUSHF, POPHF a flageket írja ki és állítja vissza

Stack segmens használataMENTES SEGMENT STACK

DW 14DUP(?)STP LABEL WORDMENTES ENDSADAT SEGMENTELSO DB 11,22,33,44,55,66MASODIK DB 4,5,6HARMADIK DB 94,98EREDMDW ?ADAT ENDSKOD SEGMENT

ASSUME CS:KOD, DS:ADAT, SS:MENTESSTART : MOV AX, ADAT

MOV DS, AXMOV AX, MENTESMOV DS, AXMOV SP, OFFSET STP

MOV AX, OFFSET ELSOPUSH AXMOV AX, SIZE ELSOPUSH AXCALL OSSZADMOV EREDM, AX..MOV AX, OFFSET MASODIKPUSH AX.

KOD ENDS

STKOD SEGMENTASSUME CS:STKOD, DS:DATA, SS:MENTES

OSSZAD PROC FARPUSH BP

61ASSEMBLY.DOC 09/05/2023

Page 63: Az INTEL 8088/8086users.atw.hu/kandolev/programozas/Assembly/TAV_program... · Web viewAz INTEL 8088/8086 mikroprocesszor assembly nyelve Kandó Kálmán Muszaki Foiskola Készítette

Kandó Kálmán Mûszaki Fõiskola Assembly segédletSzámítógéptechnikai Intézet

MOV BP, SPPUSH BXPUSH CXPUSH CX,[BP+6]PUSH BX,[BP+8]MOV AX, 0

CIM : ADD AL,[BX]ADC AH, 0INC BXLOOP CIMPOP CXPOP BXPOP BPRET 4

OSSZAD ENDPSTKOD ENDS

END START

62ASSEMBLY.DOC 09/05/2023

Page 64: Az INTEL 8088/8086users.atw.hu/kandolev/programozas/Assembly/TAV_program... · Web viewAz INTEL 8088/8086 mikroprocesszor assembly nyelve Kandó Kálmán Muszaki Foiskola Készítette

Kandó Kálmán Mûszaki Fõiskola Assembly segédletSzámítógéptechnikai Intézet

Stringműveletek

LODS (LoaD byte or word String )

Az SI-vel megcímzett forrásstringből egy bájtot, vagy egy szót tölt az AL, vagy AX regiszterbe. SI inkrementálódik, vagy dekrementálódik eggyel, vagy kettővel.

SI=(SI)+k, ha (DF)=0SI=(SI)-k, ha (DF)=1k=1,ha W=0, k=2, ha W=1

Példa :CLD ;DF=0MOV SI, OFFSET BYTESTRINGLODS BYTE STRINGSTDMOV SI, OFFSET WORDSTRINGLODS WORDSTRING ;LODSW

STOS (STOre byte or word String)

Az utasítás az AL-ből, vagy AX-ből a DI-vel megcímzett operandusba átvisz egy bájtot, vagy egy szót.

DI=(DI)+k ;ha (DF)=0DI=(DI)-k ;ha (DF)='

k=1, ha W=0, k=2, ha W=1

MOV DI, OFFSET BYTESTRINGMOV AL, BYTESTOS BYTESTRING ;STOSB

MOVS (MOVe byte string or move word String)

Az utasítás string mozgatását végzi egyik memóriahelyről a másikba. Az utasítás kiadása előtt a source string DS-beli offsetje SI-ben, a destination string ES-beli offsetje DI-ben kel, hogy legyen. A DF flag tartalmától függően SI és DI automatikusan inkrementálódik (ha DF=0), vagy dekrementálódik(ha DF=1).

Példa : MOV SI, OFFSET SOURCEMOV DI, OFFSET DESTMOV CX, LENGHT SOURCE

REP MOVS

CMPS ( CoMPare byte string, compare word String)

MOV SI, OFFSET STRING1MOV DI, OFFSET STRING2CMPS STRING1, STRING2

Ismétlő string műveletek

63ASSEMBLY.DOC 09/05/2023

Page 65: Az INTEL 8088/8086users.atw.hu/kandolev/programozas/Assembly/TAV_program... · Web viewAz INTEL 8088/8086 mikroprocesszor assembly nyelve Kandó Kálmán Muszaki Foiskola Készítette

Kandó Kálmán Mûszaki Fõiskola Assembly segédletSzámítógéptechnikai Intézet

REP/REPZ/REPE/REPNE/REPNZ (Repeat string operation)

Ezek az utasítások az egyszerű string utasításokat annyiszor hajtják végre, amíg a CX regiszter értéke 0 nem lesz. Prefix utasítások, hatásuk csak a következő utasításra terjed ki

Példák

1. REP MOVS DEST, SOURCE

Ha a primitív művelet CMPS, vagy SCAC

2. REPE CMPS DEST, SOURCE

Ugrás lesz, ha CX=0, vagy ZF = 0, azaz, ha a DI által megcímzett bájt egyenlő az SI által megcímzett bájttal. A bájt ® AL.

3. REPNZ SCAS DEST

Addig hajtja végre, amíg CX = 0, vagy ZF = 1 nem lesz (AL) ® DEST

4. REP STOSB

64ASSEMBLY.DOC 09/05/2023

Page 66: Az INTEL 8088/8086users.atw.hu/kandolev/programozas/Assembly/TAV_program... · Web viewAz INTEL 8088/8086 mikroprocesszor assembly nyelve Kandó Kálmán Muszaki Foiskola Készítette

Kandó Kálmán Mûszaki Fõiskola Assembly segédletSzámítógéptechnikai Intézet

Vezérlésátadó utasítások

Ha az utasításokat nem sorrendben akarjuk végrehajtani, akkor el kell ugranunk egy másik memóriacímre. Erre szolgálnak a vezérlésátadó, vagy más néven az ugró utasítások. A vezérlésátadó utasításoknak két fajtáját különböztetjük meg:

-18 feltétlen vezérlésátadás-19 feltéteteles vezérlésátadás.

Feltétlen vezérlésátadás

Ezt a funkciót a JMP utasítás valósítja meg. A JMP utasítás operandusa által specifikált címre adódik a vezérlés az utasítás végrehajtása után. Ez a cím lehet az adott szegmensen belül és lehet másik szegmensben. Eszerint beszélhetünk közeli és távoli ugrásokról, attól függően, hogy a címke amely a JMP utasítás operandus zónájában van az adott szegmensen belül, vagy egy másik szegmensben került definiálásra. Ha az operandus nem címke, hanem egy változó, vagy egy egy memóriacím, akkor indirekt ugrásról beszélünk, amely szintén lehet közeli és lehet távoli ugrás.A feltétlen vezérlésátadó utasítások közé soroljuk a CALL és RET utasításokat, amelyek a procedúrák hívásában játszanak szerepet, de jelentőségük miatt a következő pontban külön tárgyaljuk ezeket.

Feltételes vezérlésátadás

A feltételes ugrások előtt be kell állítanunk a feltételbiteket. Erre bármelyik aritmetikai művelet alkalmas. A leggyakrabban azonban a feltételbitek beállítását az összehasonlító utasítással végezzük (a kivonásnak felel meg). Egy feltételes vezérlésátadás csak akkor hajtódik végre, ha a megjelölt feltétel igaz, egyébként a soron következő utasítás hajtódik végre.

A feltételes vezérlésátadásokat az alábbi csoportokba sorolhatjuk:

Előjel nélküli mennyiségek hasonlítása után használatosak:

JA címke : ugrás a címkére, ha op1 op2 felett (above) vanJB címke : ugrás a címkére, ha op1 op2 alatt (bellow) vanJE címke : ugrás a címkére, ha op1= op2 (equal) van

illetve ezek összetételéből és tagadásából:JAE, JBE, JNA, JNB, JNE, JNAE, JNBE.

Előjeles mennyiségek hasonlítása után használatosak:

JG címke : ugrás a címkére, ha op1> op2 (greater) vanJL címke : ugrás a címkére, ha op1< op2 (less vanJE címke : ugrás a címkére, ha op1= op2 (equal)

illetve ezek összetételéből és tagadásából:JGE, JLE, JNG, JNL, JNE, JNGE, JNLE.

65ASSEMBLY.DOC 09/05/2023

Page 67: Az INTEL 8088/8086users.atw.hu/kandolev/programozas/Assembly/TAV_program... · Web viewAz INTEL 8088/8086 mikroprocesszor assembly nyelve Kandó Kálmán Muszaki Foiskola Készítette

Kandó Kálmán Mûszaki Fõiskola Assembly segédletSzámítógéptechnikai Intézet

Közvetlenül valamelyik feltételbit értékétől függő

JC címke : ugrás a címkére, ha CF=1JS címke : ugrás a címkére, ha SF=1JO címke : ugrás a címkére, ha OF=1

JZ címke : ugrás a címkére, ha ZF=1JP címke : ugrás a címkére, ha PF=1JPE címke : ugrás a címkére, ha PF=1

valamint ezek tagadásából:JNC, JNS, JNO, JNZ, JNP, JPO (odd:páratlan, even: páros).

LOOP

Nagyon sokszor szükségünk van arra, hogy utasítások egy sorozatát ismétlődően végrehajtsunk. Ezt rendszerint loop ciklussal valósítjuk meg.A LOOP utasítás speciális feltételes vezérlésátadó utasítás, amely a CX regiszter tartalmától függően adja rá a vezérlést az operandus zónában megjelölt címre, vagy a LOOP-ot követő utasításra.

Amikor ciklust akarunk szervezni, a következőképpen járjunk el! Töltsük fel a CX regiszter tartalmát azzal az értékkel, amely meghatározza, hogy a ciklust hányszor akarjuk végrehajtani. Ezután írjuk le azokat az utasításokat, amelyeket ismételten végre akarunk hajtani, majd írjuk le a LOOP utasítást. A LOOP utasítás operandusában megadott címke azonosítja az ismételten végrehajtandó utasítássorozat kezdetét.

Példa:Két 10 elemű mező megfelelő elemeinek összegzése.

MOV SI,0MOV CX,10

AGAIN:MOV AL,ARRAY [SI]ADD ARRAY[SI],ALINC SILOOP AGAIN

66ASSEMBLY.DOC 09/05/2023

Page 68: Az INTEL 8088/8086users.atw.hu/kandolev/programozas/Assembly/TAV_program... · Web viewAz INTEL 8088/8086 mikroprocesszor assembly nyelve Kandó Kálmán Muszaki Foiskola Készítette

Kandó Kálmán Mûszaki Fõiskola Assembly segédletSzámítógéptechnikai Intézet

Feltételes vezérlésátadó utasítások összefoglaló táblázata

Utasítás mnemonikus kódja

Feltétel az ugráshoz Értelmezés

JE, JZJL, JNGEJLE, JNGJB, JNAE, JC

JBE, JNAJP, JPEJOJSJNE, JNZJNL, JGEJNLE, JGJNB, JAE, JNC

JNBE, JAJNP, JPOJNOJNSJCXZ

ZF = 1(SF XOR OF) = 1((SF XOR OF) XOR OF) = 1CF = 1

(CF XOR ZF) = 1PF = 1OF = 1SF = 1ZF = 1(SF XOR OF) = 0((SF XOR OF) XOR OF) = 0CF = 0

(CF XOR ZF) = 0PF = 0OF = 0SF = 0ZF = 0

"egyenlő" vagy "zero""kisebb" vagy "nem nagyobb vagy egyenlő""kisebb" vagy egyenlő" vagy " nem nagyobb""alatta" vagy "nem felette vagy egyenlő"vagy "carry""alatta vagy egyenlő" vagy "nem felette""páros parítás""túlcsordulás""előjel bit""nem egyenlő" vagy "nem zérus""nem kisebb" vagy "nagyobb vagy egyenlő""nem kisebb vagy egyenlő" vagy "nagyobb""nem alatta" vagy "felette vagy egyenlő"vagy "nem carry""nem alatta vagy egyenlő" vagy "felette""páratlan parítás""nincs túlcsordulás""nincs előjel""CX regiszter zero"

A LOOP utasítás változatai

Utasítások mnemonikus kódja

Művelet

LOOP CX=CX-1, ha CX nem =0,akkor ugrás, egyébként folytatás

LOOPELOOPZ

CX=CX-1, ha CX nem =0 ésZF=1, akkor ugrás, egyébként folytatás

LOOPNELOOPNZ

CX=CX-1, ha CX nem =0 és ZF=0, akkor ugrás, egyébként folytatás

67ASSEMBLY.DOC 09/05/2023

Page 69: Az INTEL 8088/8086users.atw.hu/kandolev/programozas/Assembly/TAV_program... · Web viewAz INTEL 8088/8086 mikroprocesszor assembly nyelve Kandó Kálmán Muszaki Foiskola Készítette

Kandó Kálmán Mûszaki Fõiskola Assembly segédletSzámítógéptechnikai Intézet

Procedúrák szervezése

CALL (Call a procedure)

Program írása közben nagyon gyakran szükségünk van a program különböző pontjain ugyanannak az utasítássorozatnak a kódolására. Ilyenkor, hogy ne kelljen többször leírnunk ezt az utasítássorozatot, célszerű ezt kiemelni és egyszer leírni. Amikor szükség van rá a vezérlést ráadni, majd onnan visszatérni és folytatni a programot. Ezt procedúrák szervezésével tehetjük meg. formailag a procedúrák felépítése a direktíváknál leírtak szerint történik. A meghívásuk peddig a CALL utasítással, a procedúrákból való visszatérés pedi a RET utasítással valósítható meg. A következőkben a CALL utasítás működését nézzük meg.

.SUBROUTINE PROC

CALL SUBROUTINE

RETSUBROUTINE ENDP

Ez az utasítás egy procedúra hívását valósítja meg. A visszatérési címet a stack tetején menti el.Ha a hívott procedúra közeli, akkor egy szóban az IP értékét, ha a hívott procedúra távoli, akkor két szóban az IP és CS értékét.Az utasítás a következőket váltja ki távoli procedúra hívás esetén:

1. (SP) = (SP) - 2 (SP) ¬ CS (CS) ¬ (SEG)2. (SP) = (SP) - 2 (SP) ¬ (PC). (PC) = DEST

1. Direct intra-segmentCALL NEARLABELCALL NEARPROC DEST = (IP) + disp.

2. Direct inter-segmentCALL FARLABELCALL FARPROC DEST = offset, SEG=seg

3. Indirect intra-sgementDEST = (EA)

CALL MEMWORDCALL BXCALL WORD PTR[BX]CALL WORD PTR[BX][SI]CALL WORD VARIABLENAME

4. Indirekt inter-segmentDEST = (EA)

CALL DWORD PTR[BX]CALL MEM DOUBLE WORDCALL DWORD PTR VARIABLE NAME[SI]

68ASSEMBLY.DOC 09/05/2023

Page 70: Az INTEL 8088/8086users.atw.hu/kandolev/programozas/Assembly/TAV_program... · Web viewAz INTEL 8088/8086 mikroprocesszor assembly nyelve Kandó Kálmán Muszaki Foiskola Készítette

Kandó Kálmán Mûszaki Fõiskola Assembly segédletSzámítógéptechnikai Intézet

RET (Return from procedure)

Ez az utasítás a procedúrából való visszatérést teszi lehetővé. A következő módon hajtódik végre:-0 Stack tetejéről egy szó ® PC-1 SP-t inkrementálja 2-vel

Ha interszegmensből tér vissza, akkor a fentieken kívül még az alábbiakat is végrehajtja:-2 Stack tetejéről egy szó ® CS-3 SP - t inkrementálja 2-vel.

Ha valamilyen érték volt a RET operandus zónájában, akkor az hozzáadódik még az SP-hezRET 2RET 4

Közeli procedúra hívásánál, illetve a procedúrából való visszatérésnél a következőképpen alakul a stack tartalma:

STACK SEGMENT STACK SEGMENT

SP 03 0301 01 IP=0103H

SP

69ASSEMBLY.DOC 09/05/2023

CODE SEGMENT OFFSETADDRESS

CALL SUBR1 CALL 0100HMOV AL,5 OPERANDUS 0102H

OPERANDUS 0103HMOV

SUBR1 PROC NEAR

0300H

IP=0300H

RETSUBR1 ENDP

Page 71: Az INTEL 8088/8086users.atw.hu/kandolev/programozas/Assembly/TAV_program... · Web viewAz INTEL 8088/8086 mikroprocesszor assembly nyelve Kandó Kálmán Muszaki Foiskola Készítette

Kandó Kálmán Mûszaki Fõiskola Assembly segédletSzámítógéptechnikai Intézet

CALL RET

70ASSEMBLY.DOC 09/05/2023

Page 72: Az INTEL 8088/8086users.atw.hu/kandolev/programozas/Assembly/TAV_program... · Web viewAz INTEL 8088/8086 mikroprocesszor assembly nyelve Kandó Kálmán Muszaki Foiskola Készítette

Kandó Kálmán Mûszaki Fõiskola Assembly segédletSzámítógéptechnikai Intézet

Makrók szervezése

A MASM egy olyan assembler, amely lehetové teszi makrók definiálását. A makrók a procedúrákhoz hasonlóan a programozási folyamatot meggyorsíthaták, a készítendo programot áttekinthetobbé és jobb minoséguvé tehetik.

A makrókkal kapcsolatban beszélhetünk a makrók definiálásáról, a makrohivatkozásról és a makro kifejtésrol.

A makró definiálását a MACRO direktíva segítségével végezhetjük el. a következoképpen:

név MACROformális paraméterlista.utasítások ; az itt lévo utasítások alkotják a makró törzsét.ENDM

A makróban az utasítások által elvégzendo muveleteket a formális paraméterek segítségével írjuk le. Híváskor ezek helyébe az aktuális paraméterek helyettesítodnek.

A makró hívása a következoképpen történik:

név aktuális paraméterlista

Azaz a programban úgy, mint egy beépített utasítást jelenítjük meg az utasításkód oszlopban, majd az operandusok oszlopában felsoroljuk a makró aktuális paramétereit. Ezt makro hivatkozásnak nevezzük.

Az assembler a makro hivatkozások helyére bemásolja a makro törzsét úgy hogy a makro formális paraméterei helyére rendre az aktuális paramétereket helyettesíti.

A következokben nézzük meg, hogyan dolgozza fel az assembler a makrókat!Az assembler az elso menetben készít egy makro definíciós táblázatot, amely a következoket tartalmazza

-0 a makro neve-1 a makro formális paraméterei-2 a makro törzse

Amikor az assembler egy makro definícióval találkozik, akkor nem fordítja le az utasításait, csak feljegyzi azokat mechanikusan a makro definíciós táblázatába. A makro meghívása a makro nevével történik. Ha tehát az assembler a muveleti kód mezoben nem egy utasítás vagy direktíva nevét találja,

71ASSEMBLY.DOC 09/05/2023

Page 73: Az INTEL 8088/8086users.atw.hu/kandolev/programozas/Assembly/TAV_program... · Web viewAz INTEL 8088/8086 mikroprocesszor assembly nyelve Kandó Kálmán Muszaki Foiskola Készítette

Kandó Kálmán Mûszaki Fõiskola Assembly segédletSzámítógéptechnikai Intézet

akkor tovább keresi azt a makro definíciós táblázatában is, és csak akkor jelez hibát, ha ott sem találja.Egy korábban definiált makro meghívásakor, annak definícióbeli törzse a táblázatból bemásolódik a forrásszövegbe, miközben a formális paraméterek helyébe behelyettesítodnek az aktuális paraméterek. Ezt a makro kifejtésének nevezzük. Az assembler a kifejtett sorokat megkülönbözteti a többitol.

Szabályok makrók alkalmazásakor:-3 a makrokat hívásuk elott kell definiálni, mivel a kifejtést az assembler

az elso menetben végzi.-4 a makro törzsének utasításai minden kifejtéskor bekerülnek a

forrásszövegbe, így használatuk csak a programozási munkát csökkenti, a tárgykód méretét nem

-5 makrok alkalmazásakor nem kell a vezérlés átadásáról gondoskodni.-6 makrok alkalmazásakor nem kell a paraméterek átadásáról

gondoskodni, csak feltüntetni, hogy mik lesznek a paraméterek.-7 címkék használatával vigyázni kell, mert többszöri kifejtéskor

ismétlodnek a címkék. Ennek elkerülésére a makroban definiált címkét a makróra nézve lokálissá kell tenni.. Ezt a LABEL direktívával tehetjük meg. Formája:LOCAL címke1,címke2,…

-8 Egyébként a címkét formális paraméterlistára is felvehetjük, pl.: MACRO címke.

A következo makro két 8 jegyu pakolt decimális szám különbségét képezi:

LPDEC EQU 8OPPU1 DB LPDEC*2+1 DUP (0)OPPU2 DB LPDEC*2+1 DUP (0)OPPU3 DB LPDEC*2+1 DUP (0)

CSUB MACRO KIV, KIVONANDO, KULONB, HOSLOCAL AKICLCMOV SI,HOS

AKI: MOV AL, KIV [SI-1]SBB AL, KIVONANDO [SI-1]DASMOV KULONB [SI-1], ALDEC SIJNE AKIENDM

Struktúrák

A struktúrák olyan makrók, amelyekkel ismétlődő adatszerkezeteket írhatunk le. Definiálásuk:

72ASSEMBLY.DOC 09/05/2023

Page 74: Az INTEL 8088/8086users.atw.hu/kandolev/programozas/Assembly/TAV_program... · Web viewAz INTEL 8088/8086 mikroprocesszor assembly nyelve Kandó Kálmán Muszaki Foiskola Készítette

Kandó Kálmán Mûszaki Fõiskola Assembly segédletSzámítógéptechnikai Intézet

név STRUCadatdefiniáló direktívák

név ENDS

A struktúra deklarációja nem generál kódot, csak a mezők neveit definiálja a struktúrán belüli eltolásukkal. Helyfoglalás számukra csak akkor történik, ha a kifejtés megtörténik. Híása a következőképpen történik:

név <par1, par2,...>

Példa:S SEGMENTLISELEM STRUCSZAM DB 1TOMB DW 5 DUP (?)ELOZO DD 0LISELEM ENDS..L1 LISELEM <> ;ennek hatására egy L1 nevű LISELEM típusú ; struktúra keletkezikL2 LISELEM <2, , 0FFH> ;ennek hatására egy L2 nevű LISELEM típusú ; struktúra keletkezikS ENDS

Hivatkozás a struktúra elemeire:MOV CX,L1.SZAMLEA DX,L1.TOMBSHL L1.TOMB[2],1JMP L1.ELOZO

Megjegyzések a paraméterekkel kapcsolatban:1 Az aktuális paramétereket <> között kell megadni.2 Ha valamelyik paramétert nem aktualizáljuk, akkor annak a struktúra deklarációjakor

megadott implicit értéke marad érvényben.3 Nem adható aktuális paraméter a felsorolással vagy DUP operátorral deklarált

mezőnek. Kivételt képeznek a sztringek.

Rekordok

A rekordok max. 16 bites adatszerkezetek definiálására alkalmasak, amelyeknek a struktúrához hasonlóan mezoi lehetnek Rekord deklarálása:

név RECORD mezonév:szélesség [=kezdoérték]...

A rekord számára helyfoglalás csak annak – a makrohoz hasonló – kifejtésekor történik:

73ASSEMBLY.DOC 09/05/2023

Page 75: Az INTEL 8088/8086users.atw.hu/kandolev/programozas/Assembly/TAV_program... · Web viewAz INTEL 8088/8086 mikroprocesszor assembly nyelve Kandó Kálmán Muszaki Foiskola Készítette

Kandó Kálmán Mûszaki Fõiskola Assembly segédletSzámítógéptechnikai Intézet

Név <par1, par2,...>

Példaként nézzük a dátum tárolására alkalmas struktúrát. A dátum felépítése legyen a következo:

Mezo hosszúság bitben

kezdoérték

EV 7 88HO 4 -NAP 5 1

74ASSEMBLY.DOC 09/05/2023

Page 76: Az INTEL 8088/8086users.atw.hu/kandolev/programozas/Assembly/TAV_program... · Web viewAz INTEL 8088/8086 mikroprocesszor assembly nyelve Kandó Kálmán Muszaki Foiskola Készítette

Kandó Kálmán Mûszaki Fõiskola Assembly segédletSzámítógéptechnikai Intézet

S SEGMENTDATUM RECORD EV:7=88, HO:4, NAP:5=1D1 DATUM <86,1>D2 DATUM < ,1,2>S ENDS

A mezők kezelésére használatos operátorok: MASM és WIDTH. Példa a használatukra:MOV AX,D1AND AX,MASK HO ;a rekord egy mezőjét szeparáljukMOV CL, WIDTH NAP ; a NAP bitjeinek száma ->CLSHR AX,CL

Kódismétlő makrok (REPT IRP és IRPC)

Segítségükkel a makrohoz hasonlóan definiálhatjuk az ismétlődő programrészt. Ezeket a makrokat nem lehet meghívni, a kifejtés a deklarációjuk helyén közvetlenül megtörténik.

REPT funkciója. Egyszerű ismétlés. FormájaREPT ismétlési számTörzsENDM

Példa:S SEGMENTKEZD EQU $

REPT 8DB $-KEZDENDS

Ennek hatására a következő fejtődik ki:00 DB$-KEZD01 DB$-KEZD

.07 DB$-KEZD

ENDM

IRP funkciója: hasonló mint a REPT-nek, csak ez konkrét értékeket generál. Formája:IRP PAR, <par1,par2,...>TörzsENDM

Példa:IRP SZAM, <0,1,2,3,4,5,6,7>DBSZAMENDS

Az eredmény ugyanaz, mint az előző példánál.

IRPC funkciója: hasonló, mint az IRP-nek, csak itt egy sztring karakterei kerülnek bemásolásra az ismétlődő helyettesítésekkor:

IRPC PAR, sztringTörzs

ENDM

75ASSEMBLY.DOC 09/05/2023

Page 77: Az INTEL 8088/8086users.atw.hu/kandolev/programozas/Assembly/TAV_program... · Web viewAz INTEL 8088/8086 mikroprocesszor assembly nyelve Kandó Kálmán Muszaki Foiskola Készítette

Kandó Kálmán Mûszaki Fõiskola Assembly segédletSzámítógéptechnikai Intézet

Egy program megoldása Az alábbi feladat egy összetett program. Található benne procedúra és makro. A program két modulból áll. A modulok adatszegmensei COMMON típusúak. A BEOLVAS és a PAKOL procedúra, illetve a PLUSZ makro az aktuális könyvtárban helyezkednek el, rendre a BEOLVAS.ASM, PAKOL.ASM és MAKRO.ASM nevu file-okban. A programból ezekre hivatkozás INCLUDE direktívával történik.BEOLVAS PROCISMET: MOV AH,1

INT 21HCMP AL,0DHJE VEGEMOV [BX],ALINC BXLOOP ISMET

VEGE: SUB CX,16NEG CXRET

BEOLVAS ENDP

PLUSZ MACRO OP1,OP2,ERED,HOSSZLOCAL IDE,KIMOV CX,HOSSZMOV SI,HOSSZCLCPUSHF

IDE: POPFMOV AL,OP1[SI-1]ADC AL,OP2[SI-1]AAAPUSHFOR AL,30HMOV ERED[SI],ALDEC SILOOP IDEPOPFMOV AL,0ADC AL,ALOR AL,30HMOV ERED[SI],AL

KI: NOPENDM

PAKOL PROC;

PUSH BPMOV BP,SP

;PUSH SIPUSH DIPUSH CXPUSH AX

;

76ASSEMBLY.DOC 09/05/2023

Page 78: Az INTEL 8088/8086users.atw.hu/kandolev/programozas/Assembly/TAV_program... · Web viewAz INTEL 8088/8086 mikroprocesszor assembly nyelve Kandó Kálmán Muszaki Foiskola Készítette

Kandó Kálmán Mûszaki Fõiskola Assembly segédletSzámítógéptechnikai Intézet

MOV SI,[BP+6]MOV CX,[BP+8]MOV DI,[BP+4]

;ADD SI,CXADD DI,[BP+6]DEC SIDEC DISTD

REP MOVSB;

MOV CX,[BP+4]SUB CX,[BP+8]MOV AL,30H

REP STOSB;

POP AXPOP CXPOP DIPOP SIPOP BP

;RET

PAKOL ENDP

ADAT SEGMENT COMMONPUBLIC OSSZAD

;OPER1 DB 0,0,0,0,0,0,0,0,0,0,0,1,4,5,6,7OPER2 DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,9ERED DB 17 DUP ('0'),'$'H EQU 16ADAT ENDS

KOD SEGMENT ASSUME CS:KOD,DS:ADAT

;INCLUDE MAKRO.ASM

;KEZD: MOV AX,ADAT

MOV DS,AXCALL FAR PTR OSSZADMOV AH,4CHINT 21H

OSSZAD PROC FARPLUSZ OPER1,OPER2,ERED,HRET

OSSZAD ENDP;KOD ENDS

END

ADAT SEGMENT COMMONEXTRN OSSZAD:FAR

ADAT1 DB 6 DUP (0)ADAT2 DB 16 DUP (0)EREDM DB 17 DUP (0),'$'HOSSZ EQU 16ADAT ENDS

77ASSEMBLY.DOC 09/05/2023

Page 79: Az INTEL 8088/8086users.atw.hu/kandolev/programozas/Assembly/TAV_program... · Web viewAz INTEL 8088/8086 mikroprocesszor assembly nyelve Kandó Kálmán Muszaki Foiskola Készítette

Kandó Kálmán Mûszaki Fõiskola Assembly segédletSzámítógéptechnikai Intézet

CODE SEGMENTASSUME CS:CODE,DS:ADAT,ES:ADAT IND: MOV AX,ADAT

IND: MOV DS,AXMOV ES,AXLEA BX,ADAT1MOV CX,HOSSZCALL BEOLVASPUSH CXMOV AX,OFFSET ADAT1PUSH AXMOV AX,HOSSZPUSH AX CALL PAKOLLEA BX,ADAT2MOV CX,HOSSZCALL BEOLVASPUSH CXMOV AX,OFFSET ADAT2PUSH AXMOV AX, HOSSZPUSH AX CALL PAKOLCALL FAR PTR OSSZADLEA DX,EREDMMOV AH,9INT 21HMOV AH,4CHINT 21H

;INCLUDE BEOLVAS.ASMINCLUDE PAKOL.ASM

;CODE ENDS

END IND

78ASSEMBLY.DOC 09/05/2023

Page 80: Az INTEL 8088/8086users.atw.hu/kandolev/programozas/Assembly/TAV_program... · Web viewAz INTEL 8088/8086 mikroprocesszor assembly nyelve Kandó Kálmán Muszaki Foiskola Készítette

Kandó Kálmán Mûszaki Fõiskola Assembly segédletSzámítógéptechnikai Intézet

A felhasználói felületek

A programozó számára létfontosságú, hogy ismerje egyrészt a számítógép hardver felépítését, másrészt az adott gépen alkalmazott operációs rendszer lehetőségeit. A DOS és a BIOS legalapvetőbb rutinjai felhasználói programokból is hívhatók. A következőkben röviden az alábbi témakörökkel ismerkedünk meg:

1 A PC memóriaszervezése. Megszakítások kezelése. Megszakítási vektorok táblája. 2 A DOS operációs rendszer koncepciója. Parancsértelmezés, a DOS-szolgáltatások

filozófiája. Input-output szervezése assembly nyelvű programokban.3 A DOS lemez-szervezése. Input/output szervezése és fájlkezelési lehetőségek DOS

rutinok felhasználásával.4 BIOS szolgáltatások.5 Input-output szervezése portokon keresztül.

A PC memóriaszervezése

A Pc-nk belső munkájával kapcsolatos egyik leghasznosabb tudnivaló a számítógép memóriájának szervezése és használata. Ennek megértése megkönnyíti a számítógép működésének megértését. (Pl. 640 Kbájtos memóriakorlát, képernyős megjelenítés, stb.).

Valós üzemmódbeli működés!

1 millió bájtos címtartomány

Oka: a PC szegmensregisztereken keresztüli memóriacím-számítási mechanizmusa. Minden cím egy-egy bájtot azonosít.

Célszerű a teljes 1Mbájtos címtartományt 16, egyenként 64Kbájtos blokkra osztani. Ezeket a legmagasabb helyértékű hexa számjegyük szerint azonosíthatjuk.

A PC 1 Mbájtos memóriáját a felhasználása és a rendeltetése szempontjából ilyen blokkokba szervezték. (Ez nem jelenti azt, hogy a blokkok között valamilyen korlát lenne).

0-ás blokk 1. 64 K normál felhasználói memória 1-ás blokk 2. 64 K normál felhasználói memória 2-ás blokk 3. 64 K normál felhasználói memória 3-ás blokk 4. 64 K normál felhasználói memória 4-es blokk 5. 64 K normál felhasználói memória 5-ös blokk 6. 64 K normál felhasználói memória 6-os blokk 7. 64 K normál felhasználói memória 7-es blokk 8. 64 K normál felhasználói memória 8-as blokk 9. 64 K normál felhasználói memória 9-es blokk 10. 64 K normál felhasználói memória A blokk 11. 64 K video memória B blokk 12. 64 K video memória C blokk 13. 64 K kiterjesztett ROM terület D blokk 14. 64 K kiterjesztett ROM terület E blokk 15. 64 K rendszer ROM BIOS F blokk 16. 64 K rendszer ROM BIOS

79ASSEMBLY.DOC 09/05/2023

Page 81: Az INTEL 8088/8086users.atw.hu/kandolev/programozas/Assembly/TAV_program... · Web viewAz INTEL 8088/8086 mikroprocesszor assembly nyelve Kandó Kálmán Muszaki Foiskola Készítette

Kandó Kálmán Mûszaki Fõiskola Assembly segédletSzámítógéptechnikai Intézet

A memória fő munkaterülete a memóriának az a része, ahol a programjaink és az adataink elhelyezkednek: ez az első 10, 0-tól 9-ig sorszámozott blokk.

Ezt a részt gyakran felhasználói munkaterületnek nevezik, hogy megkülönböztessék azoktól a területektől, amelyeket így vagy úgy a saját céljaira használ.Az ezen a területen lévő memória írható olvasható tetszőleges hozzáférésű memória, amelyet RAM-nak nevezünk. (RAM: Random Access Memory)

A DOS-t alapvetően úgy tervezték, hogy a teljes címterület 16 blokkjából csak 10 blokkot képes fő munkaterületként használni. A memóriaterület 0. címétől kezdődő alsó része alapvető fontosságú a számítógép működésében.

A memória alsó részének szolgáltatásai:

1 rész: 1024 bájt (0-400h) megszakítási vektortábla - 256 megszakítási rutin kezdőcímét tárolja.

2 rész: 256 bájt (400h-500h)a ROM BIOS rutinok szolgálatára áll, a rutinok számára adatokat tároló terület (pl. billentyű leütésekor a lenyomott billentyű kódját tárolja, vagy feljegyzés a számítógép memóriának nagyságáról, a számítógéphez csatlakoztatott egységekről).

3 rész: 256 bájt (500h-600h) a DOS és a BASIC munkaterülete.Videomemória

A felhasználó memóriaterület után következik egy 128 Kbájtos terület, amelyet a videoképernyők használnak. Amit a képernyőn látunk, azt a memóriának ez a része tárolja. A legfelső része a memóriának az E és F blokkok, amelyek a számítógép beépített ROM-BIOS programjait tartalmazzák. (ROM: Read Only Memory)

Az itt lévő programok három fő típusa:

1 azok, amelyek a számítógép bekapcsolásakor futnak le.2 azok, amelyek vezérlik a számítógép különböző részeit, főleg az I/O perifériákat.3 beépített BASIC program (csak az eredeti IBM PC-ben).

Kiterjesztett ROM terület (ROM Extended Area)

Nincs egyértelműen meghatározott rendeltetése. Egyik felhasználási területük, hogy az E és F blokkban lévő BIOS rutinok bővítéseinek helyet adjanak. Ha valamilyen új eszközt csatlakoztatnak a számítógéphez és az eszköznek szoftver támogatásra van szüksége, akkor ezeket a ROM-BIOS rutinokat itt helyezik el. A másik felhasználási módja a kiterjesztett memória támogatása.

Megszakítások kezelése

Valahányszor egy hardver berendezésnek vagy egy programnak a CPU közreműködésére van szüksége, egy megszakításnak nevezett jelet vagy utasítást küld a mikroprocesszornak. A jel egyben azonosítja a végrehajtandó taszkot is.

Amikor a mikroprocesszor megkapja a megszakításjelet, általában befejezi minden más tevékenységét és elindítja a megszakításhoz tartozó megszakítás kezelő szubrutint. Miután a megszakítás kezelő befejezte feladatát, a gép onnan folytatja tevékenységét, ahol a megszakítás bekövetkezésekor tartott.

A megszakításoknak három fajtája:

80ASSEMBLY.DOC 09/05/2023

Page 82: Az INTEL 8088/8086users.atw.hu/kandolev/programozas/Assembly/TAV_program... · Web viewAz INTEL 8088/8086 mikroprocesszor assembly nyelve Kandó Kálmán Muszaki Foiskola Készítette

Kandó Kálmán Mûszaki Fõiskola Assembly segédletSzámítógéptechnikai Intézet

Hardver (8db 2,8,9,11-15)amit a számítógép áramkörei generálnak, ha valami történik (pl. egy billentyű leütése). Ezeket a megszakításokat a megszakítás vezérlő kezeli és sorrendbe állítja, mielőtt a CPU felé továbbítaná.

Processzoramit a CPU generál. Ezek a programban előforduló váratlan események következményei (pl. nullával való osztás).

0-ás interrupt: osztási túlcsordulás (az eredmény nem fér el a kijelölt helyen). Az interrupt-vektor normális esetben egy DOS rutint címez, amely abortálja az eseményt kiváltó programot.

1-es interrupt: lépésenkénti megszakítás. Ha a flag regiszter T bitjét 1-re állítottuk, akkor ez az interrupt minden egyes utasítás végrehajtása után aktiválódik. Ha ezt az interrupt-vektort úgy készítettük elő, hogy egy értelmes nyomkövető rutint címezzen, akkor ezt egy valódi hardver vezérelte nyomkövetésre használhatjuk.

Ezek az interruptok hardver úton és interrupt utasítások kiadásával nem válthatók ki.

Szoftver (5, 16-28, 72)amit a program szándékosan idéz elő, ily módon hív meg egy RAM-ban vagy ROM-ban tárolt szubrutint. (Ezek a ROM-BIOS és a DOS szolgáltatások részei). Szoftver megszakítást INT utasítás segítségével érhetünk el.

Az INT utasítás formája:INT interrupt-vektor pl. INT 21H

Bizonyos értelemben mi is produkálhatunk hardver meszakítást, hiszen az INT utasítás segítségével lehetőség nyílik ezek meghívására is.

Mit csinál a processzor, amikor egy interrupt érkezik?1. Befejezi azt az utasítást, amelyet éppen végrehajt.2. Elmenti a flag-regiszter tartalmát a stack-be.3. Elmenti a következő utasítás szegmens-címét a stack-be.4. Elmenti a következő utasítás offset-címét a stack-be.5. Meghatározza a megfelelő interrupt handler címét6. 0-ra állítja az I flag-et. (ezzel letiltja a további megszakításokat)7. Indítja az interrupt handler végrehajtását.

Az interrupt rendszer kialakítása IBM PC-n

A PC 256 féle program megszakítást ismer fel. A megszakítási vektorok táblája a memória első 1024 bájtját foglalja le. Ezt a táblát a számítógép indulásakor a BIOS tölti fel. Minden egyes megszakításhoz 2 szó tartozik (IP és CS). Következésképpen a táblában 256 ún. vektor szerepel.A megszakítási vektor első szava az offset-cím, a második szava a szegmens-cím.

Fogalmak áttekintéseInterrupt: egy esemény által kiváltott jel, ami azonnali figyelmet igényel.Interrupt vektor: egy szám, amely azonosítja az interruptot.Interrupt handler: egy procedúra, amely végrehajtódik, ha egy interrupt létrejön.Interrupt vektorok táblája:egy tábla, amely az interrupt-handlereknek a szegmentált címét

tartalmazza.

A DOS operációs rendszer koncepciója. Parancsértelmezés, a DOS-szolgáltatások filozófiája

81ASSEMBLY.DOC 09/05/2023

Page 83: Az INTEL 8088/8086users.atw.hu/kandolev/programozas/Assembly/TAV_program... · Web viewAz INTEL 8088/8086 mikroprocesszor assembly nyelve Kandó Kálmán Muszaki Foiskola Készítette

Kandó Kálmán Mûszaki Fõiskola Assembly segédletSzámítógéptechnikai Intézet

A program futtatása egy meghatározott környezetben történik, amely környezetet az operációs rendszer jelenti. A program futtatásának lépései:

1. a program betöltése a memóriába egy fájlbólperifériális eszközök biztosításavezérlés átadása a program belépési utasítására

2. program futása3. a programból való kilépés után visszatérés az operációs rendszerbe.

Általában egy operációs rendszer feladata: a számítógép belsejében lejátszódó nagy számú esemény vezénylését, koordinálását és ellenőrzését végzi.

A DOS tevékenysége három kategóriába sorolható:

1. A nyomtatók, lemezek, képernyők, billentyűzetek, stb irányításával kapcsolatos tevékenység .Ez parancsok küldését jelenti a megfelelő eszközökhöz és gondoskodást az általuk bejelentett bármely hibáról. Ez éppen a BIOS feladatkörének felel meg. Tágabb értelemben a PC-ken működő bármely operációs rendszer kulcsfontosságú összetevőként magában foglalja a BIOS-t.Az operációs rendszer munkájának döntő része a lemezeken az adattárolás módjának gyakorlati kivitelezése, az adatok tárolása, valamint gyors és megbízható visszakeresése.

2. A programok futtatásaBetöltés lemezről, a végrehajtásukhoz szükséges keretek biztosítása és az igényelt szolgáltatásokról való gondoskodás

3. Parancsok feldolgozásaEz a DOS és a felhasználó között fennálló közvetlen kapcsolatot jelenti.Valahányszor a C:\> promtjára begépelünk valamit, akkor mindig a DOS parancsfeldolgozó megjelenési formájával van dolgunk.

A DOS története és koncepciói

A PC olyan időszakban született, amikor a legtöbb számítógép 8 bites mikroprocesszort használt. Az ezeken a gépeken használt operációs rendszer a CP/M volt. Az IBM a PC-re is egy CP/M szerű operációs rendszert szándékozott kifejlesztetni. Oka : a 8 bites gépeken futó programok gyors adaptálhatósága, a felhasználók tapasztalata és jártassága a CP/M használatában.(Gary Kildall a CP/M megalkotója - Digital Research , az operációs rendszerek területén volt az uralkodó)

(Bill Gates a Microsoft elnöke - a Microsoft a programozási nyelvek területén volt az uralkodó)

(Gary Kildall repülése operációs rendszerének kényszerleszállása)

Első változata 1980-ban jelent meg. A Microsoft terméke.

Bár a CP/M vetélytársa, mégis a DOS kialakítása és működése nagymértékben a CP/M által biztosított lehetőségeken és a mögöttük húzódó elképzeléseken alapult. Ugyanakkor a Microsoft járatos volt a UNIX világában, amely általánosan elismert volt széleskörű szolgáltatásaiért. Így egy sor hatása érezhető a UNIX koncepciójának.

A CP/M befolyása az alábbiakban látható:

1 A prompt c:/>2 Egy felhasználós3 egy felhasználó egyetlen feladatot hajthat végre (nem újrahívható rutinok, nincs lehetőség

arra hogy újra meghívjuk a rendszert)

82ASSEMBLY.DOC 09/05/2023

Page 84: Az INTEL 8088/8086users.atw.hu/kandolev/programozas/Assembly/TAV_program... · Web viewAz INTEL 8088/8086 mikroprocesszor assembly nyelve Kandó Kálmán Muszaki Foiskola Készítette

Kandó Kálmán Mûszaki Fõiskola Assembly segédletSzámítógéptechnikai Intézet

UNIX-szerű hatások:

1 katalógusrendszer2 DOS belső szerkezete, a DOS szolgáltatásai3 az állományok kezelése

Az általunk használt DOS a CP/M és a UNIX stílusjegyeinek és kialakítási jellemzőinek egyfajta keveréke. Miközben a UNIX számos széles körű és előremutató lehetőségével rendelkezik, még mindig szenved kezdeti korlátozásaitól.

Próbálkozások a korlátozások meghaladásáraA DOS 1-es verziója merev felépítéssel rendelkezett, amely előre definiált módon az összes olyan eszközt, lemezformátumot és hasonló dolgot tartalmazott, amellyel együtt tudott működni. A PC család növekedésével azonban fontossá vált az, hogy egyrészt képesek legyünk a DOS-t az egyes számítógépek és számítógép-felhasználók igényeihez igazítani, másrészt pedig azt, hogy módunkban legyen az új perifériális eszközöket a DOS-szal elfogadtatni és ahhoz hozzáilleszteni, különösen, ami a PC-vel használatos lemezegységek sok eltérő változatát illeti. 2.0-ás verzióban a konfigurációs állomány kialakításával adaptálhatóvá tették. A konfigurációs állomány a DOS rugalmasságának és alkalmazkodóképességének a kulcsa. A DOS indulásakor megkeresi az indításhoz használt lemezen a CONFIG.SYS nevű állományt. Amennyiben talál ilyet, elolvassa és végrehajtja azokat a parancsokat, amelyek meghatározzák azt, hogy a DOS-nak miként kell az adott helyzetben kiépülnie és alkalmazkodnia.

Péda:buffers = 30fájls = 20device = c:\DOS\xmaem.sysdevice = c:\DOS\xma2em.sys frame = d000 p254 = c000 p255 = c400install = c:\fastopen.exe c: d:

Az első sor azt mondja meg a DOS-nak, hogy hány lemezszektort puffereljen. A device-os sorok eszközmeghajtókat integrálnak a DOS-hoz. Az install-os sorok automatikusan üzembe helyezik a hivatkozott programokat.

Vizuális parancsértelmezők

A DOS felhasználói felülete a C:\> parancs prompton valamint azon alapul, ahogyan a billentyűzeten a beírt parancsokat elfogadja. Egy programot képes egyszerre futtatni

Nem tudunk programokat felfüggeszteni azért, hogy egy másik programot elindíthassunk.

A vizuális parancsértelmezők olyan programok, amelyek lényegében körbefogják a DOS-t, és különféle olyan lehetőségeket biztosítanak, amelyekkel a DOS nem rendelkezik.

Vizuális parancsértelmezők:

Microsoft WindowsNorton Commander

83ASSEMBLY.DOC 09/05/2023

Page 85: Az INTEL 8088/8086users.atw.hu/kandolev/programozas/Assembly/TAV_program... · Web viewAz INTEL 8088/8086 mikroprocesszor assembly nyelve Kandó Kálmán Muszaki Foiskola Készítette

Kandó Kálmán Mûszaki Fõiskola Assembly segédletSzámítógéptechnikai Intézet

Paracsfeldolgozás

A DOS tevékenységei közül a parancsfeldolgozásról van legközvetlenebb tudomásunk. Ez a DOS-nak az a képessége, hogy parancsainkat elfogadja és azokat végrehajtsa.Ezt A COMMAND.COM néven ismert program végzi. A COMMAND.COM adja ki a parancs prompt-ot, majd arra vár, hogy bevigyünk egy parancsot. Mi is egy parancs? Valójában nem más, mint egy program futtatására vonatkozó kérés.

Azok a programok, amelyeket a parancsértelmező végre tud hajtani, a következő kategóriákba lehet sorolni:

belső parancsokkülső parancsok: EXE állományok

COM állományokBAT állományok (kötegelt feldolgozás)

A belső parancsok listája a DOS verzióval együtt változik. A parancsértelmező ezeknek a belső parancsoknak a táblázatát, valamint a végrehajtásukhoz szükséges programok kódját tartalmazza.

COM állományok jellemzői: a lemezen tárolt állomány pontosan megfelel annak, ami betöltődik a memóriába. Nem szükséges további előkészítés a futtatáshoz

EXE állomány: a betöltés után még bizonyos előkészítést kell tenni a futtatáshoz. Az EXE állományformátumhoz tartozik egy tábla, amely a program módosítandó részeit tartalmazza.

BAT, vagy kötegelt állományok

Ezek egyszerű ASCII szöveges állományok, amelyeknek, minden sora egy parancs, amelyeknek végrehajtására a parancsértelmező kísérletet tesz.

Létezik egy kötegelt parancsnyelv, amely képessé teszi a parancsértelmezőt arra, hogy logikai lépéseket hajtson végre, megismételje bizonyos programok végrehajtását, vagy kihagyjon egyes lépéseket, az előforduló hibáktól, a paraméterektől, vagy attól függően, hogy léteznek-e a nekünk szükséges állományok valójában.

84ASSEMBLY.DOC 09/05/2023

Page 86: Az INTEL 8088/8086users.atw.hu/kandolev/programozas/Assembly/TAV_program... · Web viewAz INTEL 8088/8086 mikroprocesszor assembly nyelve Kandó Kálmán Muszaki Foiskola Készítette

Kandó Kálmán Mûszaki Fõiskola Assembly segédletSzámítógéptechnikai Intézet

A beépített BIOS

A BIOS ( Basic Input/ Output System) a mindenkori számítógép állandó és megváltoztathatatlan része. A BIOS programjai a számítógép legalapvetőbb, alacsonyszintű és legbensőbb vezérlési és felügyeleti feladatait látják el. A BIOS egyszerűen ugyanolyan program, mint bármely másik, azonban funkcionálisan átmenet a hardver és a szoftver között. A fő tevékenysége a portok közvetlen programozása, ezen kívül a gondosan kialakított időzítések elvégzése.

A BIOS működése

bekapcsolás

önellenőrzés inicializálás a kiterjesztés inicializálása

betöltés lemezről

hardvermegszakítás

a program által kértszolgáltatások

A BIOS első része azoknak a rutinoknak a gyűjteménye, amelyek csak a számítógép bekapcsolásakor futnak le.

Két fő részre osztható:

önellenőrzés ( a számítógép rendben működik-e)

inicializálás (megszakításvektorok létrehozása, a számítógéphez tartozó berendezések beállítása. A BIOS ismeri mindazoknak a szabványos berendezéseknek a teljes körét, amelyekkel a számítógép rendelkezhet. Végigvizsgálja a BIOS- kiterjesztések területét. (Átadja a vezérlést, hogy a kiterjesztés végrehajtsa mindazt, ami a neki megfelelő berendezés inicializálásához szükséges és integrálja magát a BIOS többi részéhez. Pl. átírja a Megszakítási vektor-táblát egy új videó szolgáltatás esetén).

A betöltő rutin: a betöltő rekordot beolvassa a lemezről (a: vagy C: lemezegységről), majd átadja a vezérlést a betöltő rekordon található rövid programnak, amely betölti a DOS-t.

Hardver megszakítás-kezelő rutinok és szolgáltatásaik

85ASSEMBLY.DOC 09/05/2023

Hardvermegszakításkezelése

Szolgáltatások

Page 87: Az INTEL 8088/8086users.atw.hu/kandolev/programozas/Assembly/TAV_program... · Web viewAz INTEL 8088/8086 mikroprocesszor assembly nyelve Kandó Kálmán Muszaki Foiskola Készítette

Kandó Kálmán Mûszaki Fõiskola Assembly segédletSzámítógéptechnikai Intézet

A BIOS rutinok a rendszer és hardver megszakítások kezelőprogramjai. A BIOS végzi a rendszer hidegindítását, amely az F000:FFF0 címtől indul bekapcsoláskor. A RAM teszt után ilyenkor kapnak értéket a megszakításvektor elemei, inicializálódnak a perifériák, majd az A, illetve a C meghajtóról a BIOS megkísérli betölteni az operációs rendszert. Ha nem talál rendszerlemezt, akkor hibaüzenetet ír ki, egyébként pedig betölti az operációs rendszert és átadja a vezérlést.

BIOS programoknak úgy kell működniük, hogy a lehető legnagyobb rugalmasságot tegyék lehetővé, és az őt használó programokat a lehető legkisebb mértékben korlátozzák, ugyanakkor a lehető legnagyobb biztonságot garantálják.

A BIOS programok a lehető legrövidebb ideig tiltják le a megszakításokat.

Újraindíthatók - ezt úgy oldja meg, hogy az egymást követő szolgáltatáshívások valamennyi adat-és állapotinformációja egymástól elkülönítve kerül tárolásra.

A BIOS szolgáltatások moduláris felépítésűek.

Az I/O készülékek és egyéb elemek fizikai szintű kezeléséhez tartozó BIOS hívások a következő csoportokba vannak szervezve:

Megszakítás (hexa) Szolgáltatáscsoport

05 Képernyőtartalom nyomtatása10 Videoszolgáltatások11 Konfigurációs lista12 Tárkapacítás12 Lemezszolgáltatások14 Soros port szolgáltatások15 Vegyes rendszerszolgáltatások16 Billentyűzetszolgáltatások17 Párhuzamos port szolgáltatások18 ROM-BASIC19 A számítógép indítása1A Időszolgáltatások

Az egyes BIOS rutinok paraméterezése túl mutat ennek a segédletnek a keretein.

86ASSEMBLY.DOC 09/05/2023

Page 88: Az INTEL 8088/8086users.atw.hu/kandolev/programozas/Assembly/TAV_program... · Web viewAz INTEL 8088/8086 mikroprocesszor assembly nyelve Kandó Kálmán Muszaki Foiskola Készítette

Kandó Kálmán Mûszaki Fõiskola Assembly segédletSzámítógéptechnikai Intézet

DOS megszakítás-kezelő rutinok és szolgáltatásaik

A DOS az alábbi megszakításokat használja:

20H: visszatérés a DOS-hoz, CS PSP elejére kell, hogy mutasson21H: DOS hívások22H: az itt lévő címre kell a program befejezését követően ugrani23H: CTRL_BREAK esetén végrehajtandó rutin24H: kritikus hiba esetén végrehajtandó rutin25H: direkt lemezolvasás26H: direkt lemezírás27H: visszatérés a DOS-hoz

Ezeket a szoftver megszakításokat INT utasítás segítségével érhetjük el.

Az INT utasítás formája:INT interrupt-vektor pl. INT 21H

A fenti megszakítások közül a leggyakrabban a 21H-t használjuk. Ez alkalmas arra, hogy input output műveleteket hajtsunk végre, rendszerjellemzőket kezeljünk, folyamatokat kezeljünk, illetve fájlkezelést végezzünk.

Standard karakteres input/output műveletek

01: egy karakter olvasása a standard inputról (általában billentyűzetről). A beolvasott karakter az AL regiszterbe kerül

02: egy karakter írása a standard outputra (általában képernyőre). A kiírás a DL regiszterből történik03: egy karakter olvasása a soros vonalról. A beolvasott karakter az AL regiszterbe kerül04: egy karakter írása a soros vonalra . A kiírás a DL regiszterből történik05: egy karakter kiírása nyomtatóra. A kiírás a DL regiszterből történik.06: direkt konzol kezelése. DL= kiírandó karakter. Ha DL=FF, akkor beolvasás; kimenetként, ha ZF=0,

AL=karakter07: egy karakter olvasása a billentyűzetről, anélkül, hogy a képernyőn megjelenne. A beolvasott karakter az

AL regiszterbe kerül (ha ZF=0).08: egy karakter olvasása a standard inputról (általában billentyűzetről), anélkül, hogy a képernyőn

megjelenne. A beolvasott karakter az AL regiszterbe kerül.09: egy sztring írása a standard outputra (általában képernyőre). DS:DX a sztring címe, amely $-ral végződik.0A: pufferelt olvasás a standard inputról (általában billentyűzetről). DS:DX = a puffer címe, amelynek alakja:

0: puffer hossza bájtokban1: ténylegesen beolvasott bájtok száma2: beolvasott karakterek

A karakterek begépelése közbena DOS szerkesztési funkciók használhatók, a bevitel végét ENTER jelzi.

87ASSEMBLY.DOC 09/05/2023

Page 89: Az INTEL 8088/8086users.atw.hu/kandolev/programozas/Assembly/TAV_program... · Web viewAz INTEL 8088/8086 mikroprocesszor assembly nyelve Kandó Kálmán Muszaki Foiskola Készítette

Kandó Kálmán Mûszaki Fõiskola Assembly segédletSzámítógéptechnikai Intézet

Rendszerjellemzők kezelése

2A: dátum olvasása CX=év(1980-…), DH=hónap, DL=nap2A: dátum írása CX=év(1980-…), DH=hónap, DL=nap, AL=hibátlan2C: időpont olvasása CH=óra, CL=perc, DH=mp, DL= század mp2C: időpont írása CH=óra, CL=perc, DH=mp, DL= század mp, AL=hibátlan2E: írásellenőrzés állítása AL=0 kikapcsolás, AL=1 bekapcsolás54: írásellenőrzés beolvasása AL=0 kikapcsolva, AL=1 bekapcsolva30: DOS verziószám beolvasása AX=verziószám33 CTRL BREAK állítása/olvasása AL=0 olvasás, (DL=0 kikapcsolva, DL=1 bekapcsolva)

AL=1 írás (DL=0 kikapcsolás, DL=1 bekapcsolás)35: megszakítási vektorelem címének olvasása AL=IT szám, ES:BX=cím25: megszakítási vektorelem címének beállítása AL=IT szám, DS:BX=cím36: szabad lemezterület lekérdezése DL:meghajtószám (0=aktuális, 1=A,…)

ha AX=FFFF, akkor hiba, egyébkéntCX= bájtszám szektoronkéntAX=szektorszám clusterenkéntDX=lemezen lévő összes cluszter-számBX= lemezen lévő szabad cluster-szám

Folyamatok vezérlése

00: visszatérés a DOS-hoz (mint INT 20H)31: rezidens visszatérés a DOS-hoz (mint INT 27H, de CS állítása nem szükséges)

DS=rezidens paragrafus szám, AL= visszatérési kód48: memóriafoglalás; BX= kért paragrafusok száma

Kimenetként AX=hibakód, ha CF=1; ilyenkor BX=maximális paragrafus számEgyébként AX=0, akkor BX= lefoglalt memóriaterület kezdőcíme.

49: memória felszabadítás; ES=memóriaterület szegmenscíme.4B: program betöltése, futtatása

DS:DX= program nevére mutató pointerES:BX= paraméterblokk kezdőcímeAL=0 program végrehajtása =3 a program betöltése PSP nélkülParaméterblokk: környezeti szegmens címe (DW) parancssor címe, amely PSP+80H-ra kerül (DD) fájlnév címe, amely PSP+5CH-ra kerül (DD) fájlnév címe, amely PSP+6CH-ra kerül (DD)

4C: visszatérés programból; AL= visszatérési kód,(mint INT 20H, de CS állítása nem szükséges.4D: hívott program visszatérési kódjának lekérdezése

Kimenetként AL=kód, AH= kilépési kód (0:normál; 1:CTRL BREAK; 2:kritikus hiba)

A következőkben mielőtt a fájlkezelési szolgáltatásokra rátérnénk, a DOS lemezkezelését vizsgáljuk meg.

88ASSEMBLY.DOC 09/05/2023

Page 90: Az INTEL 8088/8086users.atw.hu/kandolev/programozas/Assembly/TAV_program... · Web viewAz INTEL 8088/8086 mikroprocesszor assembly nyelve Kandó Kálmán Muszaki Foiskola Készítette

Kandó Kálmán Mûszaki Fõiskola Assembly segédletSzámítógéptechnikai Intézet

A DOS lemezek logikai felépítéseA lemez fő részei:

1 rendszertartomány, amely a DOS saját adminisztrációját tartalmazzaadattartomány, ahol állományaink kapnak helyet

Rendszertartomány részei

2 BOOT rekord Rögzített helyen, mindig a lemez legelején van, hossza 512 bájt. Ez egy rövid programot jelent, amely a DOS betöltésének elindítását végzi. Ez a program vagy a rendszer betöltését végzi el, vagy azt írja ki, hogy a lemez nem tartalmaz betölthető operációs rendszert. Minden lemezen megtalálható, az olyanon is, amely nem tartalmaz DOS-t.

3 FAT (Fájl Allocation Table)Mérete 9 szektortól 256 szektorig terjedhet. Ez nagyon fontos tábla. Az állományok részére rendelkezésre álló terület foglaltságát tartja nyilván. (Adatterületre vonatkozik). Kétszer szerepel a lemezen, ezeket a DOS időnként összehasonlítja, hogy meggyőzödjön azonosságukról. Ennek nem teljesülése révén szerez a DOS tudomást arról, hogy hiba történt.

4 Gyökér katalógus (ROOT directory)Közvetlenül a FAT mellett helyezkedik el. A lemezen lévő állományok leírását tartalmazó 32 bájtos bejegyzések közönséges táblázataként funkcionál Ennek a mérete rögzített, de lemezenként változó. (Általában merevlemezen 512 bejegyzés fér el).

5 AdatterületA lemez hasznos területe, itt helyezkednek el az adatok. Az adatterületet a DOS clusterekre osztja. 1 cluster : 1, 2 vagy több szektor. Az adatok szektorokban tárolódnak, de a szektorok csak teljes clusterekben tartoznak az állományhoz. Az állományhoz rendelt utolsó clusterben kihasználatlan szektorok is lehetnek.

Katalógus bejegyzés

A fájl eléréséhez szükséges információkat tartalmazza. A lemezen lévő minden fájlhoz tartozik egy katalógus bejegyzés, melynek hossza 32 bájt és ez a gyökérkatalógusban, vagy egy alkatalógusban helyezkedik el. A gyökérkatalógus a lemez típusától függő, de rögzített helyen van és semmilyen különleges bejegyzést nem tartalmaz.

Az alkatalógusok önálló fájlként helyezkednek el a lemez adatterületén. Első két bejegyzése adminisztrációs célokra foglalt. Az első bejegyzés saját magára vonatkozik. A név mezőben egy "." helyezkedik el és tíz darab szóköz. A második bejegyzés saját magára vonatkozik. A név mezőben két ".." helyezkedik el és kilenc darab szóköz.

A katalógus bejegyzés

0-7 fájl név Balra igazítva, nagybetűvel, szóközzel kiegészítve)8-10 kiterjesztés11 attribútum12-21 lefoglalt terület22-23 keletkezési idő24-25 keletkezési dátum26-27 cluster (első FAT bejegyzés)28-31 fájlhossz (bájtokban)

89ASSEMBLY.DOC 09/05/2023

Page 91: Az INTEL 8088/8086users.atw.hu/kandolev/programozas/Assembly/TAV_program... · Web viewAz INTEL 8088/8086 mikroprocesszor assembly nyelve Kandó Kálmán Muszaki Foiskola Készítette

Kandó Kálmán Mûszaki Fõiskola Assembly segédletSzámítógéptechnikai Intézet

Fájl - attribútum:

x x a d v s h r/o

v volume label : a lemez kötetcímke bejegyzésről van szónem tartozik hozzá valódi fájl

d directory fájl: a szóban forgó tételt nem közönséges fájlként, hanem katalógusként kell kezelni.

nem törölhetjük paranccsal.r csak olvasható fájl: DOS művelettel nem lehet megváltoztatni vagy törölnia archív fájl: arra utal, hogy az állomány módosult a BACKUP és az XCOPY programok használják, a mentett fájlok atttributumát 0-ra állítják.

Minden változtatás után automatikusan 1-re állítja a rendszer.h rejtett (hidden) fájl: a legtöbb parancs számára láthatatlanná teszi a fájlts rendszer fájl: a legtöbb parancs számára láthatatlanná tezsi a rendszer.

a fájl programként nem indítható el. Törlésük lehetetlen.

Időt tartalmazó szó szerkezete

5 bit 6 bit 5 bit

óra perc 2 mp

Idő = Óra * 2048 + Perc * 32 + Mp/2

Dátumot tartalmazó szó szerkezete

7 bit 4 bit 5 bit

év hó nap

1980. január elsejétől 2099 végéig terjedő dátumok rögzítésére alkalmas.

Dátum = (Év-1980) * 512 + Hónap * 32 + Nap

Pl. 1984. december 25.

4 * 512+ 12 * 32 + 25

A bejegyzések első kbájtja két speciális értéket felvehet:1 0: ez a bejegyzés még soha nem volt használva2 E5: törölt állomány bejegyzése

ezen kívül a katalógus bejegyzésben semmi nem változik a FAT táblában az állományterület felszabadul

FAT (File Allocation Table)

Az adatterület foglaltságát mutatja.Az adatterület minden egyes clusteréhez tartozik egy FAT bejegyzés. A clusterek sorszámozása 2-ről indul. Az egyes clusterek FAT bejegyzésében mindig egy másik cluster azonosítási számát találjuk. Az összes clusterek száma meghatározza, hogy mekkora FAT táblára van szükség.

Kétféle FAT formátum létezik:

90ASSEMBLY.DOC 09/05/2023

Page 92: Az INTEL 8088/8086users.atw.hu/kandolev/programozas/Assembly/TAV_program... · Web viewAz INTEL 8088/8086 mikroprocesszor assembly nyelve Kandó Kálmán Muszaki Foiskola Készítette

Kandó Kálmán Mûszaki Fõiskola Assembly segédletSzámítógéptechnikai Intézet

1 16 bites bejegyzési mérettel

2 12 bites bejegyzési mérettel (ez ma már nem használatos, ezért ezzel nem foglalkozunk)

Ha egy FAT bejegyzés tartalma 0, akkor az azt jelöli, hogy az illető cluster szabad. Állományok adatait tartalmazó clusterek esetén a FAT bejegyzés vagy a rá következő cluster számát tartalmazza, vagy egy speciális számot, amely az állomány elhelyezési lánc végét jelöli. Egy adott állományhoz tartozó clusterek a FAT-ban tárolt numerikus kapcsolat révén láncolódnak össze.

Az állománykatalógus bejegyzése az első cluster számát jelöli, és valamennyi cluster a rá következőre mutat, vagy a lánc végét jelzi. 16 bites FAT-ban lévő számok egyszerűen 2 bájtos szavak listájaként tárolhatók. A lánc végét hexa FFFF jelzi. Hibás lemezterületek azonosítására a hexa FFF7 bejegyzés használatos.

A cluster logikai szektorszámmá alakítása:1. A cluster-számból vonjuk ki a 2-t.2. Az eredményt a clusteren belüli szektorok számával szorozzuk meg.3. Adjuk hozzá az adatterület kezdő címének a logikai szektorszámát.

Lemezen lévő fájlok kezelése DOS alattA DOS az assembly nyelven programozók számára egy sor funkciót biztosít, amelyeknek segítségével a lemezen lévő fájlokat kezelni tudjuk. Ehhez az INT 21H megszakítást használjuk, amely a DOS-nak adja át a vezérlést. A DOS a funkciókód alapján dönti el, hogy milyen feladatot kell elvégeznie. Általában a fájlokkal kapcsolatos feladatok a következők lehetnek:

1 fájl nyitása, vagy létrehozása2 fájl zárása3 olvasás a fájlból4 írás a fájlba5 pozícionálás a fájlon belül

Ezenkívül ugyancsak a fájlokkal kapcsolatos feladatokhoz soroljuk azokat, amelyek nem a fájl adataival, hanem az adminisztrációjával kapcsolatos adatokkal, azaz a katalógusokkal manipulálnak. Ilyen jellegű feladatok az alábbiak:

1 egy katalógus tartalmának kiírása2 egy fájl keresése egy adott katalógusban3 egy katalógus bejegyzés kiírása4 egy fájl adatainak megváltoztatása5 alkatalógusok kezelése6 katalógusok bejárása

FCB-s fájlkezelésnél tetszőleges lemezt választhatunk, de az adott lemez kurrens directory-jában végezhetünk csak műveleteket. Nem tudjuk kihasználni a DOS lemezek többszintű directory- struktúráját. CONFIG.SYS-ben a fájlokkal kapcsolatos információk:

FCBS = m,n m egyszerre nyitva tartható fájlok száma n hányat nem zárhat le a rendszer.Ha m fájlt már megnyitott, akkor a legrégebben megnyitottat lezárja egy újabb fájl megnyitása esetén. A megnyitási sorrend első n-jére igaz, hogy nem szabad lezárni.

91ASSEMBLY.DOC 09/05/2023

Page 93: Az INTEL 8088/8086users.atw.hu/kandolev/programozas/Assembly/TAV_program... · Web viewAz INTEL 8088/8086 mikroprocesszor assembly nyelve Kandó Kálmán Muszaki Foiskola Készítette

Kandó Kálmán Mûszaki Fõiskola Assembly segédletSzámítógéptechnikai Intézet

Hagyományos (CP/M - szerű) fájl kezelésHagyományos fájl kezelésen a CP/M operációs rendszer szabványai szerint működő fájl kezelési funkciókat értjük. Minden fájl kezeléséhez egy Fle Control Block-ot kell létrehoznunk és ki kell jelölnünk egy Disk Transfer Area-t. Tehát, ehhez a fájlkezelési módhoz két memóriaterületre van szükség:

1. FCB (Fájl Control Blokk) : Fájl ellenőrző blokk

2. DTA ( Data Transfer Area) : Lemez átviteli terület

A fájlok írása és olvasása szekvenciálisan és direkt módon is elérhető

A rekord fogalma különbözik a más rendszereknél megismert rekord fogalmától.

A rekord itt bájtok folytonos csoportja, hossza az FCB-ben a fájl megnyitása után tetszőlegesen adható meg, de menet közben már nem módosítható.. A kész fájlban többé már nem ismerjük fel, hogy milyen rekordhosszal írtuk fel.

Direkt elérés esetén a rekordhossz és a rekord sorszáma adja meg a fájl megfelelő bájtjait.Az átvitel a fájl és a DTA között megy végbe. Az adatok a fájlba rekordonként vívődnek át.A rekordok a lemezen blokkban tárolódnak. A rekordok a blokkban 0-tól 127-ig számozódnak.A blokkok sorszámozása 0-val kezdődik és egyesével nő minden következő blokk sorszáma.Ahhoz, hogy egy rekordot elhelyezzünk a fájlon belül, a DOS-nak ismernie kell a blokk sorszámát és a blokkon belül a rekord sorszámát.FCB: Ez tartalmazza a DOS által a fájlok eléréséhez szükséges információkat. Felépítése a következő:

00h 1 Lemez kódja ( 1-4, vagy A-D) * (0:kurrens drive,1:A)01h 8 Fájl név *09h 3 Fájl név kiterjesztése *0Ch 2 Kurrens blokk (DOS)0Eh 2 Rekord mérete (bájtokban) **10h 4 Teljes fájlméret (bájtokban) (DOS)14h 2 A létrehozás dátuma (DOS)16h 10 DOS által lefoglalt terület (DOS)20h 1 Kurrens rekord (0 - 127 ) (DOS)21h 4 Relatív rekord *** (0-127 után 0, +1 kurrens blokk)

(DOS)-szal jelölteket a rendszer tölti ki a fájl megnyitása után

*-gal jelölteket a programozó tölti ki a fájl megnyitása előtt**-gal jelöltet a programozó tölti ki a fájl megnyitása után*** bármikor módosítható. Random fájl kezelésnél használjuk.Kiterjesztett FCB

-7 -0FFh jelzi, hogy ez kiterjesztés-6 - 2 lefoglalt terület-1 attributum

Attribútum konstansok:1 csak olvasható 1 Rejtett fájl2 Rendszer fájl 2 Lemezcímke fájl3 Directory 3 Archív fájl

92ASSEMBLY.DOC 09/05/2023

Page 94: Az INTEL 8088/8086users.atw.hu/kandolev/programozas/Assembly/TAV_program... · Web viewAz INTEL 8088/8086 mikroprocesszor assembly nyelve Kandó Kálmán Muszaki Foiskola Készítette

Kandó Kálmán Mûszaki Fõiskola Assembly segédletSzámítógéptechnikai Intézet

Algoritmus:

1 Lemezegység kódja, fájl név, fájl kiterjesztés elhelyezése az FCB-be.2 Kurrens blokk és kurrens rekord 0-ra állítása szekvenciális olvasáshoz.3 OPEN funkció4 Rekordméret elhelyezése az FCB-be.5 DOS kitölti az FCB-t. Ezen a ponton a fájlt megnyitottnak mondjuk.6 A megnyitott fájlból olvashatunk, illetve oda írhatunk.7 A műveletek elvégzése után a fájlt le kell zárnunk.

DTA

Ez az a memóriaterület, amelyre, vagy amelyről minden lemez input/output művelet adatmozgatást végez. Ha egy lemezfájlból kérünk olvasást, az olvasott adatok a DTA-ba kerülnek, amikor gy lemezfájlba írunk, akkor feltételezzük, hogy a kiírandó adatok a DTA-ban vannak. Amikor indítás után a programunk megkapja a vezérlést a DOS-tól, a DTA a 80h címen helyezkedik el a PSP-n belül. A DTA-t újradefiniálhatjuk a SET DTA funkció felhasználásával. Biztosítanunk kell, hogy elegendő hely legyen a legnagyobb írandó vagy olvasandó adatblokk számára.

A legfontosabb funkciók:

Művelet Funkciókód

Paraméter Megjegyzés és visszaadott érték

SET DTA 1AH DX=DTA címe DTA definiálása

OPEN 0FH DX=FCB címe Fájl megnyitása AL=0, a fájl nyitása sikeresAL=0FFh, a fájlt nem találja

CREATE 16H

DX=FCB címe

Fájl létrehozásau.az, mint az OPEN, csak, ha a fájlt nem találja létrehozza.

CLOSE 10H DX=FCB címe Fájl zárása

SEQUENTIAL READ 14H DX=FCB címe A kurrens blokk és kurrens rekord mező által megcímzett rekord beolvasása a DTA-ra, majd ezek a mezők a következő rekordra mutatnak. AL= *

SEQUENTIAL WRITE

15H DX=FCB címe U.az, mint a SEQUENTIAL READ, csak a DTA-ból ír a fájlba. AL= *

RANDOM READ 21H DX=FCB címe A kurrens blokk és kurrens rekord mező által megcímzett rekord beolvasása a DTA-ra. AL= *

RANDOM WRITE 22H DX=FCB címe U.az, mint a RANDOM READ, csak írás a DTA-ból a fájlba.

RANDOM BLOCK READ

27H DX=FCB címeCX=rekordok száma

CX-ben megadott számú rekord beolvasása a fájlból a DTA-ra.

RANDOM BLOCK WRITE

28H AH=28hDX=FCB címeCX=rekordok száma

CX-ben megadott számú rekord írása a DTA-ból a fájlba.

AL = : 0, ha a művelet sikeres volt 1, ha fájl vége jel érkezett nem 0 és nem 1, akkor hiba volt.A DX-ben lévő cím DS relatív.

93ASSEMBLY.DOC 09/05/2023

Page 95: Az INTEL 8088/8086users.atw.hu/kandolev/programozas/Assembly/TAV_program... · Web viewAz INTEL 8088/8086 mikroprocesszor assembly nyelve Kandó Kálmán Muszaki Foiskola Készítette

Kandó Kálmán Mûszaki Fõiskola Assembly segédletSzámítógéptechnikai Intézet

Katalógus kezelésére szolgáló funkciók

Művelet Funkciókód

Paraméterek Megjegyzés és visszaadott érték

Fájl keresése (első megfelelő bejegyzés keresése)

11H DS:DX - FCB kezdőcíme, amely specifikálja a fájlt)

AL=0 találtAL=FFh nem találtAkkor célszerű használni, ha nem egyértelmű a fájl definíciója. Használhatjuk a * és a ? karaktereket.

A következő megfelelő bejegyzés keresése.

12HDS:DX - FCB kezdőcíme, amely specifikálja a fájlt)

AL=0 találtAL=FFh nem talált A katalógus bejegyzések bemásolódnak a DTA-ra. Ez megegyezik az FCB-vel, csak bővül a drive kódjával. Átmásolható az FCB-be fájlművelet céljából.

Fájl törlése 13H DS:DX - FCB kezdőcíme, amely specifikálja a fájlt)

Az FCB kezdőcíme határozatlan fájlnevet is tartalmazhat.

Fájl átnevezése 17H DS:DX FCB kezdőcíme, amely speciálisan van kitöltve.FCB eleje: régi fájl névFCB+17: új fájl név? karakter helyén megmarad a régi fájl név karaktere.

Norton 254. Oldal

94ASSEMBLY.DOC 09/05/2023

Page 96: Az INTEL 8088/8086users.atw.hu/kandolev/programozas/Assembly/TAV_program... · Web viewAz INTEL 8088/8086 mikroprocesszor assembly nyelve Kandó Kálmán Muszaki Foiskola Készítette

Kandó Kálmán Mûszaki Fõiskola Assembly segédletSzámítógéptechnikai Intézet

UNIX-szerű fájl kezelésMegnyitás előtt egy, a fájlt specifikáló stringet kell előkészítenünk, s ennek címét kell átadnunk a rendszernek. Válaszképpen egy sorszámot kapunk. Minden további fájl művelet során erre a sorszámra kell hivatkoznunk.

A string tartalmazza a fájlspecifikációt:

‘lemezegység:\teljes katalógus útvonal\fájl név.kiterjesztés’,0

A rendszer a fájlt az ún. fájlpointer segítségével kezeli. Ez a pointer azt mutatja meg, hogy a fájl hányadik bájtja a következő művelet címzettje. A pointer a fájl megnyitásakor 0 értékű lesz. Minde egyes művelet után előremozdul. (Ha 10 bájtot olvasunk be, akkor 10-zel). A következő olvasást ettől kezdve végzi.

A fájl pointert egyébként szabadon állíthatjuk bárhová, így valósul meg a direkt elérés.

Visszajelzés:

CF = 0 a művelet sikeres volt

CF = 1 hiba történt

AL = hibakód

tanácsos az 59h-es funkció meghívása

Egy fájlnak három pointere van:

1. fájl kezdetére mutat

2. a kurrens pointer

3. a fájl végére mutat

A pointer kódja:

1 a fájl kezdetéhez viszonyítva (abszolút pozicionálás)

2 a pillanatnyi pozícióhoz képest (relatív pozícionálás)

3 a fájl végéhez viszonyítva (relatív pozícionálás)

4 (alkalmas a fájl méretének visszaadására CX,AX = 0 mellett.

95ASSEMBLY.DOC 09/05/2023

Page 97: Az INTEL 8088/8086users.atw.hu/kandolev/programozas/Assembly/TAV_program... · Web viewAz INTEL 8088/8086 mikroprocesszor assembly nyelve Kandó Kálmán Muszaki Foiskola Készítette

Kandó Kálmán Mûszaki Fõiskola Assembly segédletSzámítógéptechnikai Intézet

UNIX-szerű fájlkezelési funkciók

Művelet Funkciókód

Paraméterek Visszaadott értékek

Fájl létrehozásaTörli a fájlt, ha létezik.

3Ch AH: 3CHDX: fájl specifikáció kezdőcímeCX: attributum

CF=0 esetén AX: fájl sorszámCF=1 esetén hiba

Fájl megnyitása 3Dh AH: 3DhDX: fájl specifikáció kezdőcímeAL: 0 olvasás 1 írás 2 írás/olvasás

CF=0 esetén AX: fájl sorszámCF=1 esetén hiba

Fájl olvasása 3Fh BX: fájlsorszámCX: beolvasandó bájtok számaDX: puffer kezdőcíme

CF:0 esetén CX: ténylegesen beolv. Bájtok számaCF:1 esetén hiba

Fájl írása 40h BX: fájlsorszámCX: kiírandó bájtok számaDX: puffer kezdőcíme

CX=AX esetén nincs hiba

CX<>AX esetén hiba

Fájl lezárása 3Eh BX: fájl sorszám

Fájl pointer állítása

42h BX: fájl - sorszámCX,DX: léptetés hossza bájtokban CX a magasabb helyirtékAL:alapként használt pointer kódja

DX, AX: a kurrens pointer értéke

Katalógusok kezelése

NPTR: fájlt vagy katalódust specifikáló sztringMűvelet Funkció

kódParaméterek Megjegyzés és visszaadott

értékAlkatalógus létrehozása (MD)

39h DS:DX: NPTR

Alkatalógus törlése 3Ah DS:DX: NPTRAktuális alkatalógus kijelölése

3Bh DS:DX: NPTR

Aktuális katalógus lekérdezése

47h DL:meghajtószám(0=aktuális, 1=A…)

DS:SI: aktuálisalkatalógus

Fájl keresése (első) 4Eh DS:DX: NPTRnévben lehet *,?CX: attributum

Fájl keresése (következő) 4Fh DS:DX: NPTRnévben lehet *,?

Fájl átnevezése 56h DS:DX: NPTR régiES:DI: NPTR új

Fájl attributumának lekérdezése illetve megváltoztatása

43h DS:DX: NPTRCX: attributumAL:0 lekérdezésAL:1 megváltoztatás

Fájl létrehozási dátumának, időpontjának lekérdezése illetve megváltoztatása

57H BX: fájlsorszámAL:0 olvasásAL:1 írás CX: időpont DX: dátum

CX: időpontDX: dátum

Norton 297. Oldal.

Megszakítási vektorok-táblájának (Interrupt Descriptor Table) módosítása

96ASSEMBLY.DOC 09/05/2023

Page 98: Az INTEL 8088/8086users.atw.hu/kandolev/programozas/Assembly/TAV_program... · Web viewAz INTEL 8088/8086 mikroprocesszor assembly nyelve Kandó Kálmán Muszaki Foiskola Készítette

Kandó Kálmán Mûszaki Fõiskola Assembly segédletSzámítógéptechnikai Intézet

Amennyiben a saját interrupt handlerünket akarjuk használni, annak a címét az interrupt tábla megfelelő helyére kell helyeznünk. Ezt megtehetjük úgy, hogy közvetlenül címezzük azt a memóriahelyet, ahova a címet tenni kell, vagy a DOS interrupt rutinjával a megfelelő funkciókóddal végezzük el ezt a műveletet. Az interrupt vektor átírása előtt azonban célszerű az interrupt vektor tartalmát elmenteni, hogy a későbbiekben vissza tudjuk állítani az eredetit.

Az interrupt rutin átírása

Az interrupt vektor átírását a DOS 21h interrupt-rutinjának segítségével végezhetjük el. Paraméterezése a következő

Funkciókód: 25h (AH regiszterben)

Regiszterek tartalma:AL: interrupt-vektor sorszámaDX: interrupt-handler offset címeDS: interrupt-handler szegmens címe

Példa: PUSH DSMOV AL,05HLEA DX,BEEPPUSH CSPOP DSMOV AH,25HINT 21HPOP DS

Interrupt-vektor elmentése:

Funkciókód: 35h (AH regiszterben)

Regiszterek tartalma:AL: interrupt-vektor sorszámaBX: interrupt-handler offset címe (alacsonyabb cím)ES: interrupt-handler szegmens címe (magasabb cím)

Memóriarezidens programok

Memóriarezidens az a program, amely a végrehajtása után visszaadja a vezérlést az operációs rendszernek, de továbbra is a memóriában marad. A programozónak kell gondoskodnia arról, hogy egy programot rezidenssé tegyen. A memóriarezidenssé tételt a programban úgy oldjuk meg, hogy egy DOS rutint hívunk meg. Mivel a programunk közvetlenül a DOS mögött helyezkedik el, a DOS rutinnak csak a rezidenssé teendő program (paragrafusokban mért) méretét kell megadni. A DOS ezzel az értékkel növeli a DOS számára lefoglalt területet, és ezután a programunkat a DOS hoz tartozónak tekinti.

Paraméterezése:

Funkciókód: 31h (AH regiszterben)

Regiszterek tartalma:AL: visszatérési kódDX: rezidens program mérete

97ASSEMBLY.DOC 09/05/2023

Page 99: Az INTEL 8088/8086users.atw.hu/kandolev/programozas/Assembly/TAV_program... · Web viewAz INTEL 8088/8086 mikroprocesszor assembly nyelve Kandó Kálmán Muszaki Foiskola Készítette

Kandó Kálmán Mûszaki Fõiskola Assembly segédletSzámítógéptechnikai Intézet

A Program Segment Prefix (PSP) struktúrája

Kicsit zavaros, a DOS háttere és története két különböző irányba húzza. (CP/M és UNIX)

Mielőtt a DOS betöltené a programunkat a memóriába, az első szabad memóriahelytől létrehoz egy kontroll blokkot, amelyet PSP-nek nevezünk, és amely olyan információkat tartalmaz, amelyek a program futásához kellenek. A PSP létrehozása után tölti be a programot a memóriába a DOS a PSP mögé.

DS, ES a PSP elejére mutat

SS Stack elejére mutat

SP a stack végére mutat

CS az END direktíva mögött megadott címke által meghatározott szegmensre mutat

IP az END direktíva mögött megadott címke által meghatározott offsetre mutat

Hexa cím Hossz Tartalom

0 2 INT 20H DOS-hoz való visszatérés2 2 A memória mérete (paragrafusokban)A 4 Befejezési vektorE 4 CTRL BREAK megszakításkezelő címe12 4 Kritikus hibakezelő címe16 22 A DOS használja2C 2 A környezetet leíró string szegmenscíme2E 34 DOS munkaterület55 7 FCB1 bővítés5C 9 FCB165 7 FCB2 bővítés6C 20 FCB280 1 Adatátviteli puffer

80: Paraméter-hossz 81: Paraméterek (a program nevét követő karaktertől)

98ASSEMBLY.DOC 09/05/2023

Page 100: Az INTEL 8088/8086users.atw.hu/kandolev/programozas/Assembly/TAV_program... · Web viewAz INTEL 8088/8086 mikroprocesszor assembly nyelve Kandó Kálmán Muszaki Foiskola Készítette

Kandó Kálmán Mûszaki Fõiskola Assembly segédletSzámítógéptechnikai Intézet

Portok programozása

A portok közvetlen programozását egy példán keresztül mutatjuk be.

A Beep procedúra

Egy olyan program, amely a display-re írja az ASCII beep karaktert (07h), 800 hertz-nek megfelelő frekvencián negyed secundumig szólaltatja meg a beep-et.

Lehet produkálni különböző hangokatkülönböző időtartamig.

Két egységet kell ehhez kezelni:

a timer-t

a speaker-t.

A timer feladata: pulzusokat generálni.

A timer a 42h és 43h portokon érhető el.

A speaker a 61h porton érhető el.

A timer 1 sec alatt 1 193 180-szor vibrál (1234dch).

Ahhoz, hogy adott frekvencián generáljon pulzusokat egy számot kell küldeni számára.

Ha ez a szám 1000, akkor a timer minden 1000 vibráció után pulzust küld a speaker-nek.

Ha a közép C-t akarjuk, amelynek a frekvenciája 523,25, akkor 1 193 180/ 523.25 = 2280 az a konstans, ami ezt biztosítja.

A timer irányítása:

1. Előkészíteni a timer-t egy új frekvencia fogadására.

2. Kiszámolni a timer-nek küldendő számot.

3. Küldeni a számot a timer-nek.

Előkészítés: B6h értéket kell küldeni a 43h portra.

Timer-szám: 42h portra kell írni a megfelelő értéket.

A timer által generált pulzusok irányítása a speaker-nek

A speaker speciális bájtjának jobboldali két bitje:

0: ki van kapcsolva1: be van kapcsolva

A speciális bájt a 61h porton érhető el.

Teendők:

1. Olvasd a speciális bájt értékét

2. Állítsd a jobboldali két bitet 1-re

3. Írd ki a speciális bájt új értékét a portra.

Időtartam ciklussal határozható meg.

99ASSEMBLY.DOC 09/05/2023

Page 101: Az INTEL 8088/8086users.atw.hu/kandolev/programozas/Assembly/TAV_program... · Web viewAz INTEL 8088/8086 mikroprocesszor assembly nyelve Kandó Kálmán Muszaki Foiskola Készítette

Kandó Kálmán Mûszaki Fõiskola Assembly segédletSzámítógéptechnikai Intézet

A program:CSEG SEGMENT

ASSUME CS:CSEG MAIN: MOV AX,523

MOV BX,300CALL BEEPMOV AH, 4CHINT 21H

;BEEP PROC ; AX: frekvencia, BX: időtartam

PUSHAMOV CX,AXMOV AL,0B6HOUT 43H,ALMOV ,0012HMOV AX,34DCHDIV CXOUT 42H,ALJMP SHORT $+2MOV AL,AHOUT 42H,ALIN AL,61HMOV AH,ALOR AL,03HOUT 61H,AL

L1: MOV CX,4680L2: LOOP L2

DEC BXJNZ L1

MOV AL,AHOUT 61H,AL

POPARET

BEEP ENDP

CSEG ENDSEND MAIN

100ASSEMBLY.DOC 09/05/2023

Page 102: Az INTEL 8088/8086users.atw.hu/kandolev/programozas/Assembly/TAV_program... · Web viewAz INTEL 8088/8086 mikroprocesszor assembly nyelve Kandó Kálmán Muszaki Foiskola Készítette

Kandó Kálmán Mûszaki Fõiskola Assembly segédletSzámítógéptechnikai Intézet

Irodalom

Dr. Gidófalvi Zoltán: Az IBM PC programozása assembly nyelven)

(Peter Norton: Az IBM PC és PS/2 anatómiája 1990. Prentice Hall International Ltd.

Peter Norton: Az IBM PC programozása Műszaki Könyvkiadó 1992.

Pethő Ádám : IBM PC/XT felhasználóknak és programozóknak II. és III. kötet

101ASSEMBLY.DOC 09/05/2023

Page 103: Az INTEL 8088/8086users.atw.hu/kandolev/programozas/Assembly/TAV_program... · Web viewAz INTEL 8088/8086 mikroprocesszor assembly nyelve Kandó Kálmán Muszaki Foiskola Készítette

Kandó Kálmán Mûszaki Fõiskola Assembly segédletSzámítógéptechnikai Intézet

BEVEZETÉS 1

A SZEMÉLYI SZÁMÍTÓGÉPEK TÖRTÉNETE 2

A processzorok története 2

A SZEMÉLYI SZÁMÍTÓGÉP RENDSZER ELEMEI 4

A processzor működése 4

A 8086/8088 ARCHITEKTÚRÁJA 6

Regiszterek 6

Utasításkészlet 12

Egy gépi kódú utasítás felépítése 13

Címzési módok 13

Az input és output 17

Megszakítások kezelése 17

ADATÁBRÁZOLÁS 19

Számábrázolások 19

Szöveges adatok 21

AZ INTEL/8088 MIKROPROCESSZOR ASSEMBLY NYELVÉNEK ALAPELEMEI 23

Az assembly nyelvű program előállításának folyamata 25Az assembler 25A szerkesztőprogram 25A program nyomkövetése 26

Az INTEL/8088 assembler jellemzői 28

Az assembly nyelv szintaktikai elemei 29

Egy assembly nyelvű forrásprogram elemei 33

DIREKTÍVÁK 35

Változók definiálása, memóriahelyekek inicializálása 35

Elhelyezésszámláló és szegmentálás vezérlése 39

A MODULNÉVRE TÖBB MODUL ÖSSZESZERKESZTÉSEKOR VAN SZÜKSÉG, A MODULOK SORRENDJÉNEK MEGHATÁROZÁSÁHOZ.UTASÍTÁSOK 49

102ASSEMBLY.DOC 09/05/2023

Page 104: Az INTEL 8088/8086users.atw.hu/kandolev/programozas/Assembly/TAV_program... · Web viewAz INTEL 8088/8086 mikroprocesszor assembly nyelve Kandó Kálmán Muszaki Foiskola Készítette

Kandó Kálmán Mûszaki Fõiskola Assembly segédletSzámítógéptechnikai Intézet

UTASÍTÁSOK 50

Adatmozgató utasítások 50

Aritmetikai utasítások 52

Korrekciós utasítások 56

Logikai utasítások 58

Léptetési utasítások 59

Stack-et használó utasítások 61

Stringműveletek 63

Vezérlésátadó utasítások 65

Procedúrák szervezése 68

Makrók szervezése 70

Rekordok 72

EGY PROGRAM MEGOLDÁSA 74

A FELHASZNÁLÓI FELÜLETEK 77

A PC memóriaszervezése 77

Megszakítások kezelése 78

A DOS operációs rendszer koncepciója. Parancsértelmezés, a DOS-szolgáltatások filozófiája 80

A beépített BIOS 83Hardver megszakítás-kezelő rutinok és szolgáltatásaik 83

DOS megszakítás-kezelő rutinok és szolgáltatásaik 85Standard karakteres input/output műveletek 85Rendszerjellemzők kezelése 86Folyamatok vezérlése 86

A DOS lemezek logikai felépítése 87

Lemezen lévő fájlok kezelése DOS alatt 89Hagyományos (CP/M - szerű) fájl kezelés 90UNIX-szerű fájl kezelés 93A Program Segment Prefix (PSP) struktúrája 96

Portok programozása 97

Irodalom 99

103ASSEMBLY.DOC 09/05/2023