assume CS:Code, DS:Data, SS:Stack Start: xor di, di mov si, 1 Torles int 10h mov dl, 40 xor bh, bh mov ah, 02h Kesleltet int 16h

Hasonló dokumentumok
assume CS:Code, DS:Data, SS:Stack Start mov dl, 100 mov dh, 100 push dx Rajz

Assebly feladatok SHR SHL NOT NEG AND XOR. Ezt követően ismertetni kell a szoftver megszakítás fogalmát és szükségességét.

A számok kiírása is alapvetően karakterek kiírásán alapul, azonban figyelembe kell venni, hogy a számjegyeket, mint karaktereket kell kiírni.

code segment para public 'code' assume cs:code, ds:code, es:nothing, ss:nothing

Előszó avagy Murphy és az optimizmus. Tartalomjegyzék

Assembly Rekurzív függvények, EXE, C programok. Iványi Péter

Archi2 Gyak. (Processzorok Utasításszintű Kezelése) 2014 ősz

Balaton Marcell Balázs. Assembly jegyzet. Az Assembly egy alacsony szintű nyelv, mely a gépi kódú programozás egyszerűsítésére született.

Assembly utasítások listája

Processzorok Utasításszintű Kezelése tavasz

Assembly. Iványi Péter

találhatók. A memória-szervezési modell mondja meg azt, hogy miként

Megszakítások és kivételek

1. Az utasítás beolvasása a processzorba

Gyakorló feladatok. /2 Maradék /16 Maradék /8 Maradék

A 32 bites x86-os architektúra regiszterei

Adatelérés és memóriakezelés

[cimke:] [feltétel] utasítás paraméterek [; megjegyzés]

Assembly Utasítások, programok. Iványi Péter

A MiniRISC processzor

Dr. Máté Eörs docens. Képfeldolgozás és Számítógépes Grafika Tanszék Árpád tér 2. II. em

ELŐSZÓTJ "Előszó" \l

GÁBOR DÉNES FŐISKOLA PREZENTÁCIÓ. Vezetőtanár: Ágoston György 2002/ szemeszter. 222 lap

n-pr H 5 C 6 CHCl 2 Pascal és assembler

A regiszterek az assembly programozás változói. A processzor az egyes mőveleteket kizárólag regiszterek közremőködésével tudja végrehajtani.

Digitális technika II. (vimia111) 5. gyakorlat: Mikroprocesszoros tervezés, egyszerű feladatok HW és SW megvalósítása gépi szintű programozással

Stack Vezérlés szerkezet Adat 2.

Máté: Assembly programozás

Digitális rendszerek. Utasításarchitektúra szintje

1. ábra: Perifériára való írás idődiagramja

A számítógép alapfelépítése

Assembly programozás levelező tagozat

Bevezetés a számítástechnikába

Assembly Címzési módok. Iványi Péter

1. Digitális integrált áramkörök

A Számítógépek felépítése, mőködési módjai

Egyszerű RISC CPU tervezése

Assembly programozás levelező tagozat

Az assembly nyelv sor-orientált nyelv, tehát minden sorba pontosan egy utasítás kerül. Egy sor mezőkből áll a következőképpen:

Kitlei Róbert kitlei.web.elte.hu. Karunkról Kari digitális könyvtár

Máté: Assembly programozás

Assembly. Iványi Péter

Karunkról Kari digitális könyvtár

BELÉPTETİ RENDSZER TERVEZÉSE

Az integrált áramkörök kimenetének kialakítása

Assembly Programozás Rodek Lajos Diós Gábor

Szegmens regiszterek (16 bitesek)

Mi az assembly? Gyakorlatias assembly bevezető. Sokféle assembly van... Mit fogunk mi használni? A NASM fordítóprogramja. Assembly programok fordítása

5. gyakorlat. Lineáris leképezések. Tekintsük azt a valós függvényt, amely minden számhoz hozzárendeli az ötszörösét!

Memóriagazdálkodás. Kódgenerálás. Kódoptimalizálás

Intel x86 utasításkészlet

Az i8080 és az i8085 utasításai

Paraméter átadás regisztereken keresztül

Mérési utasítás Mikrokontroller programozás 2.sz. mérés

Assembly programozás Bevezetés

Programozás alapjai. 10. előadás

PE/COFF fájl formátum

Bevezetés az assembly nyelvbe

SZÁMÍTÓGÉP ARCHITEKTÚRÁK

Mikrovezérlık története (nagyon) röviden

BELÉPTETŐ RENDSZER TERVEZÉSE

Introduction to 8086 Assembly

A számítógép alapfelépítése

Információs Technológia

Intel x86 utasításkészlet + disassembler működése

Hangkártya programozása

Máté: Számítógép architektúrák

INTEL 8085 gépi utasításkészlete

Architektúra, megszakítási rendszerek

Algoritmusok és adatszerkezetek gyakorlat 06 Adatszerkezetek

II. KMAPR21TNB, KMAPR21ONB PC

GPU Lab. 3. fejezet. Az X86 Utasításkészlet. Grafikus Processzorok Tudományos Célú Programozása. Berényi Dániel Nagy-Egri Máté Ferenc

2016/08/31 02:45 1/6 Hardver alapok

Miért van szükség fordítóprogramokra? Fordítóprogramok célja és szerkezete. Miért van szükség fordítóprogramokra?

A fordítóprogramok szerkezete. Kódoptimalizálás. A kódoptimalizálás célja. A szintézis menete valójában. Kódoptimalizálási lépések osztályozása

[1] Bevezetés. A "debug" a DOS-ból közvetlenûl indítható a "debug" szó begépelésével. Kilépés hasonlóképpen a "q" paranccsal történik.

SZÁMÍTÓGÉPES RENDSZER TERVEZÉSE ESETTANULMÁNY: BELÉPTETŐ RENDSZER

Perifériakezelési módszerek (Korrigált) Feltétel nélküli

Számítógép architektúrák

Irvine eljárások. ClrScr - Törli a képernyő tartalmát és a kurzort a képernyő bal felső sarkába helyezi (Clear Screen).

Bevezetés az assembly nyelvbe

Számítógépek felépítése

Bevezetés a Programozásba II 1. előadás. Szoftverfejlesztés, programozási paradigmák

Szegmentálás. Memória kezelési stratégia mely a felhasználó nézőpontját támogatja Például:

Járműfedélzeti rendszerek I. 3. előadás Dr. Bécsi Tamás

Járműfedélzeti rendszerek I. 4. előadás Dr. Bécsi Tamás

Az egér, a botkormány (joystick) és a nyomtató programozása DOS-ban

Digitális technika II., 2009/2010 tavasz 1. vizsga A csoport

A mikroprocesszor egy RISC felépítésű (LOAD/STORE), Neumann architektúrájú 32 bites soft processzor, amelyet FPGA val valósítunk meg.

Szemantikai elemzés. konzisztenciájának vizsgálata a szemantikai elemzés feladata lesz.

LOGSYS LOGSYS LCD KIJELZŐ MODUL FELHASZNÁLÓI ÚTMUTATÓ november 8. Verzió

Mikrokontrollerek. Tihanyi Attila május 8

A TURBO DEBUGGER HASZNÁLATA

2017/12/16 21:33 1/7 Hardver alapok

A MiniRISC processzor (rövidített verzió)

A hibát az alábbi Python program segítségével tudjuk előidézni:

Thermo1 Graph. Felhasználói segédlet

Tesztelés és hibajavítás Microsoft Visual Studio 2005 fejlesztőkörnyezetben

Aritmetikai utasítások

Máté: Számítógép architektúrák

Átírás:

Fealadat3: labda.asm Feladat meghatározása A program célja az assembly rutinok időzítési lehetőségeinek bemutatása. Az időzítés az AH00, INT1Ah funkció segítségével történik. A program egy labda leesését szimulálja. A labdát egy O karakter szimbolizálja, amely fokozatosan gyorsulva esik le, majd visszapattan. A visszapattanás veszteségmentes, így a labda fokozatosan lassulva eléri a kiindulási pozíciót. Program bemutatása: A programot először a késleltető rutinok nélkül kell megírni. A billentyű helyett az AH00, INT16h funkcióval megvalósítható billentyű leütésre történő várakozást kell megírni. Így a program csak akkor lép a következő iterációra, ha lenyomunk egy billentyűt. Ellenőrizni kell, hogy a labda nem megy ki a képből. A legalsó pozíciót elérve felfelé mozog tovább, a legfelső pozíció elérését követően lefele halad. A letesztelt programban módosítani kell a billentyű leütésre váró részt az AH01, INT16h funkcióra. Ez a funkció nem állítja meg a program futását, mindössze a FLAG-ek állapotát, illetve az AL értékét módosítja, ha volt billentyű leütés. Be kell fejezni a késleltető programrészt. A késleltetés alapeleme az AH00, INT1Ah funkció, mely a rendszeróra CX:DX regiszterpárba. Egy számlálóváltozás kb. 1/18 sec. Code Start: Torles: Segment assume CS:Code, DS:Data, SS:Stack ax, Code DS, ax xor di, di si, 1 xor push int int Kesleltet: int ;jnz dx, dx dx ax, 03h 10h dx, di dh, dl dl, 40 xor bh, bh ah, 02h int 10h dx, offset ah, 09h 21h ah, 01h 16h Program_Vege jz nincsbill ah, 00h int 16h cmp al, 27 jz Program_Vege nincsbill: xor ah, ah int 1ah Ido1: Ido2: Ido3: pop push sub push cx cx ax, dx dx, cx ax cmp di, 5 jnc Ido1 al, 16 jmp Beallit cmp di, 10 jnc Ido2 al, 8 jmp Beallit cmp di, 15 jnc Ido3 al, 4 jmp Beallit Ido4: Beallit: Mozgas: Lefele: Felfele: cmp di, 20 jnc Ido4 al, 2 jmp Beallit al, 1 xor cmp pop jc pop push ah, ah dx, ax ax Kesleltet cx ax cmp di, 0 jz Lefele cmp di, 24 jz Felfele add jmp Program_Vege: pop int : Code Data Data Stack Stack di, si Torles si, 1 jmp Mozgas si, -1 jmp Mozgas db Ends Segment Ends Segment Ends End Start cx ax, 4c00h 21h "O$"

6

xor di, di ; labda helye (sor) si, 1 ; lefelé indul a labda (irány vektor) xor dx, dx push dx ; verembe a régi idő (most 0) ;program vége után, még a Code szegmensbe : db o$ 6

Torles: int ax, 03h 10h Torles 6

pozicionálás dx, di ;(16 bites regisztert használunk) dh, dl ;pozíció DI sor (8 bites) dl, 40 ;pozíció 40. oszlop xor bh, bh ah, 02h int 10h 6

int dx, offset ah, 09h 21h 6

(1) (2) Kesleltet: ah, 00h int 16h ;időzítő nélküli eset int ah, 01h 16h ;ha van leütött billentyű, tehát nem üres a billentyűzet puffer, akkor Z flag értéke 0 6 Kesleltet

Időzítő nélküli eset (1) Időzítős eset (2) cmp al, 27 jz Program_Vege jz nincsbill ah, 00h int 16h cmp al, 27 jz Program_Vege nincsbill: 6 Hogyan oldható meg optimálisan, hogy minden billentyű lenyomásra kilépjen

xor ah, ah int 1ah ;óra CX:DX -be 6

pop cx ;régi idő kivétele push cx ;régi idő visszatétele push dx ;aktuális idő mentése ax-be sub dx, cx ;dx-ben a Teltelt = Taktuális - Trégi ;aktuális idő mentése a verembe aktuális idő 6

cmp di, 5 jnc Ido1 ;ugrik, ha di nagyobb vagy egyenlo al, 16 jmp Beallit aktuális idő 6 Ido1 Beállít

Ido1: cmp di, 10 jnc Ido2 al, 8 jmp Beallit aktuális idő 6 Ido2 Beállít

Ido2: cmp di, 15 jnc Ido3 al, 4 jmp Beallit aktuális idő 6 Ido3 Beállít

Ido3: cmp di, 20 jnc Ido4 al, 2 jmp Beallit aktuális idő 6 Ido4 Beállít

Ido4: al, 1 ;Egyébként (21-24) aktuális idő 6

Beallit: xor cmp jc ah, ah dx, ax Kesleltet ;ugrik, ha kisebb aktuális idő 6 Kesleltet Beállít

pop ax ;előző idő aktualizálásához kell pop cx ;régi idő kivétele a veremből push ax ;aktuális idő elmentése régi idő (x) 6

cmp di, 0 jz Lefele régi idő (x) 6 Lefele

cmp di, 24 jz Felfele régi idő (x) 6 Felfele

Mozgas: add di, si ;a labda új pozíciója jmp Torles régi idő (x) Torles 6 Mozgas

Lefele: si, 1 jmp Mozgas régi idő (x) 6 Lefele Mozgas

Felfele: si, -1 jmp Mozgas régi idő (x) 6 Felfele Mozgas

pop cx ;vermet úgy adjuk vissza, ahogy kaptuk! A verembe maradt értéket egy szemét -regiszterbe kitesszük! 6