Digitális Rendszerek - 1. Gyakorlati feladat Készítette: Juhász Gábor, tk.: G-3S7I A feladat megoldásához tartozó állományok: JUHASZG.BIN A program bináris formátumban elmentve. (betölthető) JUHASZG.LST A program assembler lista formátumát tartalmazó állomány. JUHASZG.TXT Ez a szöveges dokumentum. SZ.TXT A teszteléshez használt szöveges fájl, amely olyan méretű, hogy éppen elfér a vizsgált memóriaterületen. 5. számú feladat: Az 5000-67FF memóriaterületre betöltött szöveg átmásolása szóközök nélkül a 6800-as címmel kezdődő memóriaterületre. A program assembler listája (a megjegyzések nélküli lista a JUHASZG.LST fájlban található): A program tulajdonképpen egy ciklus, mely sorban megvizsgálja az adott memóriaterületen lévő karaktereket, azon feltétel szerint, hogy az aktuális karakter szóköz (karakterkódja: 20h), vagy sem. Amennyiben a karakter nem szóköz, átmásolja azt a cél-memóriaterületre, ha szóköz, akkor nem másolja, hanem a követkző karakter vizsgálatával folytatódik a program. Amikor a forrás-memóriaterület vizsgálata befejeződik a program leáll (HALT). 0100 01 FF 4F LXI B,4FFF 0103 11 00 68 LXI D,6800 A BC és DE regiszterekben fogjuk tárolni azt a memóriacímet, amelyen lévő karaktert éppen vizsgálni kell, ill. amelybe éppen másolni kell. Ebben a két sorban a regiszterek kezdő értékét adjuk meg, amelyek az adott memóriaterületek kezdő címei. (a BC azért 4FFF-ről és nem 5000-ről indul, mert azt ezt követő sorban inkrementáljuk és így a ciklus első lefutásakor is a megfelelő címet fogja vizsgálni) 0106 03 INX B Megnöveljük a BC regiszterben lévő címet 1-gyel. 0107 78 MOV A,B 0108 FE 68 CPI 68 010A CA 18 01 JZ 0118 Ez a 3 sor a program befejezésének a szükségességét vizsgálja. Megvizsgálja a B regiszter értékét, hogy elérte -e már a 68-at (azaz a BC regiszter a 6800-at), ha igen akkor nem folytatja tovább a vizsgálatot, a program befejeződik. 010D 0A LDAX B Az akkumulátorba másolja a BC regiszter által megcímzett memóriarekesz tartalmát, a szükséges vizsgálat elvégzése céljából (tehát az éppen vizsgálni kívánt karakterkódot). 010E FE 20 CPI 20 0110 CA 06 01 JZ 0106 Ha a vizsgált karakterkód hexa 20-as, azaz szóköz, akkor visszaugrik a ciklus elejére minden további művelet elvégzése nélkül. 0113 12 STAX D 0114 13 INX D 0115 C3 06 01 JMP 0106 Ha a vizsgált karakterkód nem szóköz, akkor az akkumulátor tartalmát (a megvizsgált karakterkódot) a DE regiszter által megcímzett memóriarekeszbe másolja. Ezután megnöveli 1-gyel a DE regiszter értékét és a ciklus kezdődik elölről. 0118 76 HLT A program leállítása. Járulékos információk: Az S parancsban alkalmazott kezdőcím: 100 A G parancsnak megadandó cím: 100 A szöveg betöltésekor az L parancsban megadandó kezdőcím: 5000 Amennyiben a betöltött szövegfájl mérete meghaladja a 5000-67FF memóriatartományon rendelkezésre álló helyet, a program a 6800-as címtől kezdődően felülírja a konvertált ("szóköztelenített") szöveggel. Készítette: Juhász Gábor, G-3S7I, 2003. április 10.