SlideShare a Scribd company logo
1 of 23
Download to read offline
Fealadat3: labda.asm

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




Inicializálás




 Képernyő
  törlés


                                    Poz < 5 ?      Igen     ΔT := 16

  Kurzor
pozícionálás                           Nem


                                    Poz < 10 ?     Igen     ΔT := 8

  Labda
 kirakása                              Nem


                                    Poz < 15 ?     Igen     ΔT := 4

 Billentyű
 figyelés                              Nem


                                    Poz < 20 ?     Igen     ΔT := 2

  ESC ?         Igen Program Vége
                                       Nem

   Nem
                                     ΔT := 1

   Óra
beolvasása


                                                            Előző idő
                                    Teltelt > ΔT   Igen
                                                          aktualizálása
  Eltelt idő                              ?
   (Teltelt)
kiszámítása
                                      Nem
                                                                                      Irány
                                                           Poz = 0 ?      Igen
                                                                                 beállítása (LE)

                                                              Nem

                                                                                     Irány
                                                           Poz = 24 ?     Igen     beállítása
                                                                                     (FEL)

                                                              Nem

                                                           Új pozíció
                                                          kiszámítása
Start
                   Implementálás

                                               Inicializálás                                    Verem

                              xor     di, di     ; labda helye (sor)
Inicializálás                 mov     si, 1      ; lefelé indul a labda (irány vektor)
                              xor     dx, dx
                                                                                              régi idő (0)
                              push    dx         ; verembe a régi idő (most 0)

                      ;program vége után, még a Code szegmensbe
                      Labda: db         ”o$”
 Képernyő
  törlés


                                          Poz < 5 ?      Igen      ΔT := 16

  Kurzor
pozícionálás                                   Nem


                                         Poz < 10 ?      Igen       ΔT := 8

  Labda
 kirakása                                      Nem


                                         Poz < 15 ?      Igen       ΔT := 4

 Billentyű
 figyelés                                      Nem


                                         Poz < 20 ?      Igen       ΔT := 2

  ESC ?         Igen Program Vége
                                               Nem

   Nem
                                           ΔT := 1

   Óra
beolvasása


                                                                   Előző idő
                                         Teltelt > ΔT    Igen
                                                                 aktualizálása
  Eltelt idő                                   ?
   (Teltelt)
kiszámítása
                                               Nem
                                                                                              Irány
                                                                   Poz = 0 ?      Igen
                                                                                         beállítása (LE)

                                                                      Nem

                                                                                             Irány
                                                                  Poz = 24 ?      Igen     beállítása
                                                                                             (FEL)

                                                                      Nem

                                                                   Új pozíció
                                                                  kiszámítása
Start
                    Implementálás

                                          Képernyő törlés                                    Verem

                      Torles:
Inicializálás                   mov   ax, 03h
                                int   10h
                                                                                           régi idő (0)

           Torles


 Képernyő
  törlés


                                         Poz < 5 ?      Igen     ΔT := 16

  Kurzor
pozícionálás                                Nem


                                         Poz < 10 ?     Igen     ΔT := 8

  Labda
 kirakása                                   Nem


                                         Poz < 15 ?     Igen     ΔT := 4

 Billentyű
 figyelés                                   Nem


                                         Poz < 20 ?     Igen     ΔT := 2

  ESC ?         Igen Program Vége
                                            Nem

   Nem
                                          ΔT := 1

   Óra
beolvasása


                                                                 Előző idő
                                         Teltelt > ΔT   Igen
                                                               aktualizálása
  Eltelt idő                                   ?
   (Teltelt)
kiszámítása
                                           Nem
                                                                                           Irány
                                                                Poz = 0 ?      Igen
                                                                                      beállítása (LE)

                                                                   Nem

                                                                                          Irány
                                                                Poz = 24 ?     Igen     beállítása
                                                                                          (FEL)

                                                                   Nem

                                                                Új pozíció
                                                               kiszámítása
Start
                   Implementálás

                                      Kurzor pozicionálás                                   Verem

                              mov   dx, di     ;(16 bites regisztert használunk)
Inicializálás                 mov   dh, dl     ;pozíció DI sor (8 bites)
                                                                                          régi idő (0)
                              mov   dl, 40  ;pozíció 40. oszlop
                              xor   bh, bh
                              mov   ah, 02h
                              int   10h
 Képernyő
  törlés


                                        Poz < 5 ?      Igen     ΔT := 16

  Kurzor
pozícionálás                                 Nem


                                       Poz < 10 ?      Igen      ΔT := 8

  Labda
 kirakása                                    Nem


                                       Poz < 15 ?      Igen      ΔT := 4

 Billentyű
 figyelés                                    Nem


                                       Poz < 20 ?      Igen      ΔT := 2

  ESC ?         Igen Program Vége
                                             Nem

   Nem
                                         ΔT := 1

   Óra
beolvasása


                                                                Előző idő
                                       Teltelt > ΔT    Igen
                                                              aktualizálása
  Eltelt idő                                 ?
   (Teltelt)
kiszámítása
                                             Nem
                                                                                          Irány
                                                                Poz = 0 ?     Igen
                                                                                     beállítása (LE)

                                                                  Nem

                                                                                         Irány
                                                               Poz = 24 ?     Igen     beállítása
                                                                                         (FEL)

                                                                  Nem

                                                                Új pozíció
                                                               kiszámítása
Start
                   Implementálás

                                        Labda kirakása                                      Verem

                              mov   dx, offset Labda
Inicializálás                 mov   ah, 09h
                              int   21h
                                                                                          régi idő (0)




 Képernyő
  törlés


                                        Poz < 5 ?      Igen     ΔT := 16

  Kurzor
pozícionálás                              Nem


                                       Poz < 10 ?      Igen     ΔT := 8

  Labda
 kirakása                                 Nem


                                       Poz < 15 ?      Igen     ΔT := 4

 Billentyű
 figyelés                                 Nem


                                       Poz < 20 ?      Igen     ΔT := 2

  ESC ?         Igen Program Vége
                                          Nem

   Nem
                                         ΔT := 1

   Óra
beolvasása


                                                                Előző idő
                                       Teltelt > ΔT    Igen
                                                              aktualizálása
  Eltelt idő                                 ?
   (Teltelt)
kiszámítása
                                          Nem
                                                                                          Irány
                                                               Poz = 0 ?      Igen
                                                                                     beállítása (LE)

                                                                  Nem

                                                                                         Irány
                                                               Poz = 24 ?     Igen     beállítása
                                                                                         (FEL)

                                                                  Nem

                                                               Új pozíció
                                                              kiszámítása
Start
                     Implementálás

                          Billentyű figyelés (1)                Billentyű figyelés (2)               Verem

                         Kesleltet:                     mov         ah, 01h
Inicializálás                         mov    ah, 00h    int         16h
                                      int    16h
                                                                                                  régi idő (0)
                                                        ;ha van leütött billentyű, tehát
                         ;időzítő nélküli eset          nem üres a billentyűzet puffer,
                                                        akkor Z flag értéke 0
 Képernyő
  törlés


                                                 Poz < 5 ?        Igen     ΔT := 16

  Kurzor
pozícionálás                                        Nem


                                                 Poz < 10 ?       Igen        ΔT := 8

  Labda
 kirakása                                           Nem

             Kesleltet
                                                 Poz < 15 ?       Igen        ΔT := 4

 Billentyű
 figyelés                                           Nem


                                                 Poz < 20 ?       Igen        ΔT := 2

  ESC ?          Igen Program Vége
                                                    Nem

   Nem
                                                  ΔT := 1

   Óra
beolvasása


                                                                           Előző idő
                                                 Teltelt > ΔT     Igen
                                                                         aktualizálása
  Eltelt idő                                           ?
   (Teltelt)
kiszámítása
                                                   Nem
                                                                                                     Irány
                                                                          Poz = 0 ?      Igen
                                                                                                beállítása (LE)

                                                                               Nem

                                                                                                    Irány
                                                                          Poz = 24 ?     Igen     beállítása
                                                                                                    (FEL)

                                                                               Nem

                                                                          Új pozíció
                                                                         kiszámítása
Start
                   Implementálás

                      Időzítő nélküli eset (1)            Időzítős eset (2)                      Verem

                      cmp     al, 27                          jz        nincsbill
Inicializálás         jz      Program_Vege                    mov       ah, 00h
                                                              int       16h
                                                                                              régi idő (0)
                                                              cmp       al, 27
                                                              jz        Program_Vege
                                                 nincsbill:

 Képernyő
  törlés

                                                                                             Hogyan oldható
                                          Poz < 5 ?           Igen     ΔT := 16              meg optimálisan,
                                                                                              hogy minden
  Kurzor                                                                                         billentyű
pozícionálás                                 Nem                                               lenyomásra
                                                                                                 kilépjen?

                                          Poz < 10 ?          Igen     ΔT := 8

  Labda
 kirakása                                    Nem


                                          Poz < 15 ?          Igen     ΔT := 4

 Billentyű
 figyelés                                    Nem


                                          Poz < 20 ?          Igen     ΔT := 2

  ESC ?         Igen Program Vége
                                             Nem

   Nem
                                            ΔT := 1

   Óra
beolvasása


                                                                       Előző idő
                                          Teltelt > ΔT        Igen
                                                                     aktualizálása
  Eltelt idő                                    ?
   (Teltelt)
kiszámítása
                                             Nem
                                                                                                 Irány
                                                                      Poz = 0 ?      Igen
                                                                                            beállítása (LE)

                                                                         Nem

                                                                                                Irány
                                                                      Poz = 24 ?     Igen     beállítása
                                                                                                (FEL)

                                                                         Nem

                                                                      Új pozíció
                                                                     kiszámítása
Start
                   Implementálás

                                        Óra beolvasása                                     Verem

                              xor   ah, ah
Inicializálás                 int   1ah       ;óra beolvasása CX:DX -be
                                                                                         régi idő (0)




 Képernyő
  törlés


                                       Poz < 5 ?      Igen     ΔT := 16

  Kurzor
pozícionálás                                 Nem


                                       Poz < 10 ?     Igen     ΔT := 8

  Labda
 kirakása                                    Nem


                                       Poz < 15 ?     Igen     ΔT := 4

 Billentyű
 figyelés                                    Nem


                                       Poz < 20 ?     Igen     ΔT := 2

  ESC ?         Igen Program Vége
                                             Nem

   Nem
                                        ΔT := 1

   Óra
beolvasása


                                                               Előző idő
                                       Teltelt > ΔT   Igen
                                                             aktualizálása
  Eltelt idő                                 ?
   (Teltelt)
kiszámítása
                                         Nem
                                                                                         Irány
                                                              Poz = 0 ?      Igen
                                                                                    beállítása (LE)

                                                                 Nem

                                                                                        Irány
                                                              Poz = 24 ?     Igen     beállítása
                                                                                        (FEL)

                                                                 Nem

                                                              Új pozíció
                                                             kiszámítása
Start
                   Implementálás

                                     Eltelt idő kiszámítása (Teltelt)                             Verem

                              pop      cx         ;régi idő kivétele
Inicializálás                 push     cx         ;régi idő visszatétele
                              mov      ax, dx     ;aktuális idő mentése ax-be                   aktuális idő
                              sub      dx, cx     ;dx-ben a Teltelt = Taktuális - Trégi         régi idő (0)
                              push     ax         ;aktuális idő mentése a verembe


 Képernyő
  törlés


                                           Poz < 5 ?       Igen      ΔT := 16

  Kurzor
pozícionálás                                    Nem


                                           Poz < 10 ?      Igen       ΔT := 8

  Labda
 kirakása                                       Nem


                                           Poz < 15 ?      Igen       ΔT := 4

 Billentyű
 figyelés                                       Nem


                                           Poz < 20 ?      Igen       ΔT := 2

  ESC ?         Igen Program Vége
                                                Nem

   Nem
                                            ΔT := 1

   Óra
beolvasása


                                                                     Előző idő
                                           Teltelt > ΔT    Igen
                                                                   aktualizálása
  Eltelt idő                                     ?
   (Teltelt)
kiszámítása
                                                Nem
                                                                                                Irány
                                                                     Poz = 0 ?      Igen
                                                                                           beállítása (LE)

                                                                       Nem

                                                                                               Irány
                                                                    Poz = 24 ?      Igen     beállítása
                                                                                               (FEL)

                                                                       Nem

                                                                    Új pozíció
                                                                   kiszámítása
Start
                   Implementálás

                                               Poz < 5 ?                                   Verem

                              cmp   di, 5
Inicializálás                 jnc   Ido1
                              mov   al, 16                                               aktuális idő
                              jmp   Beallit                                              régi idő (0)
                      Ido1:


 Képernyő
  törlés


                                        Poz < 5 ?     Igen     ΔT := 16

  Kurzor
pozícionálás                             Nem
                                      Ido1

                                       Poz < 10 ?     Igen     ΔT := 8

  Labda
 kirakása                                     Nem


                                       Poz < 15 ?     Igen     ΔT := 4

 Billentyű
 figyelés                                     Nem


                                       Poz < 20 ?     Igen     ΔT := 2

  ESC ?         Igen Program Vége
                                              Nem

   Nem
                                         ΔT := 1

   Óra
beolvasása                          Beállít

                                                               Előző idő
                                       Teltelt > ΔT   Igen
                                                             aktualizálása
  Eltelt idő                                 ?
   (Teltelt)
kiszámítása
                                          Nem
                                                                                         Irány
                                                              Poz = 0 ?      Igen
                                                                                    beállítása (LE)

                                                                 Nem

                                                                                        Irány
                                                              Poz = 24 ?     Igen     beállítása
                                                                                        (FEL)

                                                                 Nem

                                                              Új pozíció
                                                             kiszámítása
Start
                   Implementálás

                                              Poz < 10 ?                                   Verem

                              cmp   di, 10
Inicializálás                 jnc   Ido2
                              mov   al, 8                                                aktuális idő
                              jmp   Beallit                                              régi idő (0)
                      Ido2:


 Képernyő
  törlés


                                        Poz < 5 ?     Igen     ΔT := 16

  Kurzor
pozícionálás                                  Nem


                                       Poz < 10 ?     Igen     ΔT := 8

  Labda
 kirakása                                 Nem
                                      Ido2

                                       Poz < 15 ?     Igen     ΔT := 4

 Billentyű
 figyelés                                     Nem


                                       Poz < 20 ?     Igen     ΔT := 2

  ESC ?         Igen Program Vége
                                              Nem

   Nem
                                         ΔT := 1

   Óra
beolvasása                          Beállít

                                                               Előző idő
                                       Teltelt > ΔT   Igen
                                                             aktualizálása
  Eltelt idő                                 ?
   (Teltelt)
kiszámítása
                                          Nem
                                                                                         Irány
                                                              Poz = 0 ?      Igen
                                                                                    beállítása (LE)

                                                                 Nem

                                                                                        Irány
                                                              Poz = 24 ?     Igen     beállítása
                                                                                        (FEL)

                                                                 Nem

                                                              Új pozíció
                                                             kiszámítása
Start
                   Implementálás

                                              Poz < 15 ?                                   Verem

                              cmp   di, 15
Inicializálás                 jnc   Ido3
                              mov   al, 4                                                aktuális idő
                              jmp   Beallit                                              régi idő (0)
                      Ido3:


 Képernyő
  törlés


                                        Poz < 5 ?     Igen     ΔT := 16

  Kurzor
pozícionálás                                  Nem


                                       Poz < 10 ?     Igen     ΔT := 8

  Labda
 kirakása                                     Nem


                                       Poz < 15 ?     Igen     ΔT := 4

 Billentyű
 figyelés                                Nem
                                      Ido3

                                       Poz < 20 ?     Igen     ΔT := 2

  ESC ?         Igen Program Vége
                                              Nem

   Nem
                                         ΔT := 1

   Óra
beolvasása                          Beállít

                                                               Előző idő
                                       Teltelt > ΔT   Igen
                                                             aktualizálása
  Eltelt idő                                 ?
   (Teltelt)
kiszámítása
                                          Nem
                                                                                         Irány
                                                              Poz = 0 ?      Igen
                                                                                    beállítása (LE)

                                                                 Nem

                                                                                        Irány
                                                              Poz = 24 ?     Igen     beállítása
                                                                                        (FEL)

                                                                 Nem

                                                              Új pozíció
                                                             kiszámítása
Start
                   Implementálás

                                              Poz < 20 ?                                   Verem

                              cmp   di, 20
Inicializálás                 jnc   Ido4
                              mov   al, 2                                                aktuális idő
                              jmp   Beallit                                              régi idő (0)
                      Ido4:


 Képernyő
  törlés


                                        Poz < 5 ?     Igen     ΔT := 16

  Kurzor
pozícionálás                                  Nem


                                       Poz < 10 ?     Igen     ΔT := 8

  Labda
 kirakása                                     Nem


                                       Poz < 15 ?     Igen     ΔT := 4

 Billentyű
 figyelés                                     Nem


                                       Poz < 20 ?     Igen     ΔT := 2

  ESC ?         Igen Program Vége
                                    Ido4 Nem

   Nem
                                         ΔT := 1

   Óra
beolvasása                          Beállít

                                                               Előző idő
                                       Teltelt > ΔT   Igen
                                                             aktualizálása
  Eltelt idő                                 ?
   (Teltelt)
kiszámítása
                                          Nem
                                                                                         Irány
                                                              Poz = 0 ?      Igen
                                                                                    beállítása (LE)

                                                                 Nem

                                                                                        Irány
                                                              Poz = 24 ?     Igen     beállítása
                                                                                        (FEL)

                                                                 Nem

                                                              Új pozíció
                                                             kiszámítása
Start
                   Implementálás

                                                ΔT := 1                                     Verem

                              mov   al, 1       ;Egyébként (21-24)
Inicializálás
                                                                                          aktuális idő
                                                                                          régi idő (0)



 Képernyő
  törlés


                                        Poz < 5 ?      Igen     ΔT := 16

  Kurzor
pozícionálás                                 Nem


                                       Poz < 10 ?      Igen     ΔT := 8

  Labda
 kirakása                                    Nem


                                       Poz < 15 ?      Igen     ΔT := 4

 Billentyű
 figyelés                                    Nem


                                       Poz < 20 ?      Igen     ΔT := 2

  ESC ?         Igen Program Vége
                                             Nem

   Nem
                                            ΔT := 1

   Óra
beolvasása


                                                                Előző idő
                                        Teltelt > ΔT   Igen
                                                              aktualizálása
  Eltelt idő                                  ?
   (Teltelt)
kiszámítása
                                            Nem
                                                                                          Irány
                                                               Poz = 0 ?      Igen
                                                                                     beállítása (LE)

                                                                     Nem

                                                                                         Irány
                                                               Poz = 24 ?     Igen     beállítása
                                                                                         (FEL)

                                                                     Nem

                                                               Új pozíció
                                                              kiszámítása
Start
                     Implementálás

                                                   Teltelt > ΔT ?                                  Verem

                         Beallit:
Inicializálás                       xor   ah, ah
                                    cmp   dx, ax
                                                                                                 régi idő (0)
                                    pop   ax          ;előző idő aktualizálásához kell

                                    jc    Kesleltet
 Képernyő
  törlés


                                               Poz < 5 ?      Igen     ΔT := 16

  Kurzor
pozícionálás                                       Nem


                                               Poz < 10 ?     Igen      ΔT := 8

  Labda
 kirakása                                          Nem

             Kesleltet
                                               Poz < 15 ?     Igen      ΔT := 4

 Billentyű
 figyelés                                          Nem


                                               Poz < 20 ?     Igen      ΔT := 2

  ESC ?          Igen Program Vége
                                                   Nem

   Nem
                                                ΔT := 1

   Óra
beolvasása                                Beállít

                                                                       Előző idő
                                               Teltelt > ΔT   Igen
                                                                     aktualizálása
  Eltelt idő                                         ?
   (Teltelt)
kiszámítása
                                                 Nem
                                                                                                 Irány
                                                                       Poz = 0 ?     Igen
                                                                                            beállítása (LE)

                                                                         Nem

                                                                                                Irány
                                                                      Poz = 24 ?     Igen     beállítása
                                                                                                (FEL)

                                                                         Nem

                                                                       Új pozíció
                                                                      kiszámítása
Start
                   Implementálás

                                     Előző idő aktualizálása                                  Verem

                              pop    cx         ;régi idő kivétele a veremből
Inicializálás                 push   ax         ;aktuális idő elmentése
                                                                                            régi idő (x)




 Képernyő
  törlés


                                          Poz < 5 ?      Igen     ΔT := 16

  Kurzor
pozícionálás                                 Nem


                                          Poz < 10 ?     Igen     ΔT := 8

  Labda
 kirakása                                    Nem


                                          Poz < 15 ?     Igen     ΔT := 4

 Billentyű
 figyelés                                    Nem


                                          Poz < 20 ?     Igen     ΔT := 2

  ESC ?         Igen Program Vége
                                             Nem

   Nem
                                           ΔT := 1

   Óra
beolvasása


                                                                  Előző idő
                                          Teltelt > ΔT   Igen
                                                                aktualizálása
  Eltelt idő                                    ?
   (Teltelt)
kiszámítása
                                            Nem
                                                                                            Irány
                                                                 Poz = 0 ?      Igen
                                                                                       beállítása (LE)

                                                                    Nem

                                                                                           Irány
                                                                 Poz = 24 ?     Igen     beállítása
                                                                                           (FEL)

                                                                    Nem

                                                                 Új pozíció
                                                                kiszámítása
Start
                   Implementálás

                                              Poz = 0 ?                                      Verem

                              cmp   di, 0
Inicializálás                 jz    Lefele
                                                                                           régi idő (x)




 Képernyő
  törlés


                                       Poz < 5 ?      Igen     ΔT := 16

  Kurzor
pozícionálás                                 Nem


                                       Poz < 10 ?     Igen     ΔT := 8

  Labda
 kirakása                                    Nem


                                       Poz < 15 ?     Igen     ΔT := 4

 Billentyű
 figyelés                                    Nem


                                       Poz < 20 ?     Igen     ΔT := 2

  ESC ?         Igen Program Vége
                                             Nem

   Nem
                                         ΔT := 1

   Óra
beolvasása


                                                               Előző idő
                                       Teltelt > ΔT   Igen
                                                             aktualizálása
  Eltelt idő                                 ?
   (Teltelt)
kiszámítása
                                         Nem
                                                                             Lefele
                                                                                           Irány
                                                              Poz = 0 ?        Igen
                                                                                      beállítása (LE)

                                                                 Nem

                                                                                          Irány
                                                              Poz = 24 ?      Igen      beállítása
                                                                                          (FEL)

                                                                 Nem

                                                              Új pozíció
                                                             kiszámítása
Start
                   Implementálás

                                              Poz = 24 ?                                   Verem

                              cmp   di, 24
Inicializálás                 jz    Felfele
                                                                                         régi idő (x)




 Képernyő
  törlés


                                        Poz < 5 ?     Igen     ΔT := 16

  Kurzor
pozícionálás                              Nem


                                       Poz < 10 ?     Igen     ΔT := 8

  Labda
 kirakása                                 Nem


                                       Poz < 15 ?     Igen     ΔT := 4

 Billentyű
 figyelés                                 Nem


                                       Poz < 20 ?     Igen     ΔT := 2

  ESC ?         Igen Program Vége
                                          Nem

   Nem
                                         ΔT := 1

   Óra
beolvasása


                                                               Előző idő
                                       Teltelt > ΔT   Igen
                                                             aktualizálása
  Eltelt idő                                 ?
   (Teltelt)
kiszámítása
                                          Nem
                                                                                         Irány
                                                              Poz = 0 ?      Igen
                                                                                    beállítása (LE)

                                                                 Nem

                                                                         Felfele        Irány
                                                              Poz = 24 ?   Igen       beállítása
                                                                                        (FEL)

                                                                 Nem

                                                              Új pozíció
                                                             kiszámítása
Start
                    Implementálás

                                    Új pozíció kiszámítása                                     Verem

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

           Torles


 Képernyő
  törlés


                                          Poz < 5 ?     Igen      ΔT := 16

  Kurzor
pozícionálás                                Nem


                                      Poz < 10 ?        Igen      ΔT := 8

  Labda
 kirakása                                   Nem


                                      Poz < 15 ?        Igen      ΔT := 4

 Billentyű
 figyelés                                   Nem


                                      Poz < 20 ?        Igen      ΔT := 2

  ESC ?         Igen Program Vége
                                            Nem

   Nem
                                           ΔT := 1

   Óra
beolvasása


                                                                 Előző idő
                                      Teltelt > ΔT      Igen
                                                               aktualizálása
  Eltelt idő                                ?
   (Teltelt)
kiszámítása
                                           Nem
                                                                                             Irány
                                                                 Poz = 0 ?       Igen
                                                                                        beállítása (LE)

                                                                   Nem

                                                                                            Irány
                                                                 Poz = 24 ?      Igen     beállítása
                                                                                            (FEL)

                                                        Mozgas     Nem

                                                                Új pozíció
                                                               kiszámítása
Start
                   Implementálás

                                       Irány beállítása (LE)                                  Verem

                      Lefele:
Inicializálás                   mov   si, 1
                                jmp   Mozgas
                                                                                            régi idő (x)




 Képernyő
  törlés


                                         Poz < 5 ?     Igen      ΔT := 16

  Kurzor
pozícionálás                               Nem


                                        Poz < 10 ?     Igen      ΔT := 8

  Labda
 kirakása                                  Nem


                                        Poz < 15 ?     Igen      ΔT := 4

 Billentyű
 figyelés                                  Nem


                                        Poz < 20 ?     Igen      ΔT := 2

  ESC ?         Igen Program Vége
                                           Nem

   Nem
                                          ΔT := 1

   Óra
beolvasása


                                                                Előző idő
                                        Teltelt > ΔT   Igen
                                                              aktualizálása
  Eltelt idő                                  ?
   (Teltelt)
kiszámítása
                                          Nem
                                                                              Lefele
                                                                                            Irány
                                                                Poz = 0 ?       Igen
                                                                                       beállítása (LE)

                                                                  Nem

                                                                                           Irány
                                                                Poz = 24 ?     Igen      beállítása
                                                                                           (FEL)

                                                       Mozgas     Nem

                                                               Új pozíció
                                                              kiszámítása
Start
                   Implementálás

                                       Irány beállítása (FEL)                                Verem

                      Felfele:
Inicializálás                    mov   si, -1
                                 jmp   Mozgas
                                                                                           régi idő (x)




 Képernyő
  törlés


                                          Poz < 5 ?     Igen      ΔT := 16

  Kurzor
pozícionálás                                Nem


                                         Poz < 10 ?     Igen      ΔT := 8

  Labda
 kirakása                                   Nem


                                         Poz < 15 ?     Igen      ΔT := 4

 Billentyű
 figyelés                                   Nem


                                         Poz < 20 ?     Igen      ΔT := 2

  ESC ?         Igen Program Vége
                                            Nem

   Nem
                                           ΔT := 1

   Óra
beolvasása


                                                                 Előző idő
                                         Teltelt > ΔT   Igen
                                                               aktualizálása
  Eltelt idő                                   ?
   (Teltelt)
kiszámítása
                                           Nem
                                                                                           Irány
                                                                 Poz = 0 ?     Igen
                                                                                      beállítása (LE)

                                                                   Nem

                                                                            Felfele       Irány
                                                                 Poz = 24 ?   Igen      beállítása
                                                                                          (FEL)

                                                        Mozgas     Nem

                                                                Új pozíció
                                                               kiszámítása
Start
                   Implementálás

                                             Program Vége                                      Verem

                                pop     cx       ;vermet úgy adjuk vissza, ahogy
Inicializálás         kaptuk! A verembe maradt értéket egy „szemét”-regiszterbe
                      kitesszük!




 Képernyő
  törlés


                                            Poz < 5 ?     Igen     ΔT := 16

  Kurzor
pozícionálás                                  Nem


                                           Poz < 10 ?     Igen     ΔT := 8

  Labda
 kirakása                                     Nem


                                           Poz < 15 ?     Igen     ΔT := 4

 Billentyű
 figyelés                                     Nem


                                           Poz < 20 ?     Igen     ΔT := 2

  ESC ?         Igen Program Vége
                                              Nem

   Nem
                                             ΔT := 1

   Óra
beolvasása


                                                                   Előző idő
                                           Teltelt > ΔT   Igen
                                                                 aktualizálása
  Eltelt idő                                     ?
   (Teltelt)
kiszámítása
                                              Nem
                                                                                             Irány
                                                                  Poz = 0 ?      Igen
                                                                                        beállítása (LE)

                                                                     Nem

                                                                                            Irány
                                                                  Poz = 24 ?     Igen     beállítása
                                                                                            (FEL)

                                                                     Nem

                                                                  Új pozíció
                                                                 kiszámítása

More Related Content

Featured

Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)contently
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024Albert Qian
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsKurio // The Social Media Age(ncy)
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Search Engine Journal
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summarySpeakerHub
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next Tessa Mero
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentLily Ray
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best PracticesVit Horky
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project managementMindGenius
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...RachelPearson36
 
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Applitools
 
12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at WorkGetSmarter
 
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...DevGAMM Conference
 
Barbie - Brand Strategy Presentation
Barbie - Brand Strategy PresentationBarbie - Brand Strategy Presentation
Barbie - Brand Strategy PresentationErica Santiago
 
Good Stuff Happens in 1:1 Meetings: Why you need them and how to do them well
Good Stuff Happens in 1:1 Meetings: Why you need them and how to do them wellGood Stuff Happens in 1:1 Meetings: Why you need them and how to do them well
Good Stuff Happens in 1:1 Meetings: Why you need them and how to do them wellSaba Software
 

Featured (20)

Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search Intent
 
How to have difficult conversations
How to have difficult conversations How to have difficult conversations
How to have difficult conversations
 
Introduction to Data Science
Introduction to Data ScienceIntroduction to Data Science
Introduction to Data Science
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best Practices
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project management
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
 
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
 
12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work
 
ChatGPT webinar slides
ChatGPT webinar slidesChatGPT webinar slides
ChatGPT webinar slides
 
More than Just Lines on a Map: Best Practices for U.S Bike Routes
More than Just Lines on a Map: Best Practices for U.S Bike RoutesMore than Just Lines on a Map: Best Practices for U.S Bike Routes
More than Just Lines on a Map: Best Practices for U.S Bike Routes
 
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
 
Barbie - Brand Strategy Presentation
Barbie - Brand Strategy PresentationBarbie - Brand Strategy Presentation
Barbie - Brand Strategy Presentation
 
Good Stuff Happens in 1:1 Meetings: Why you need them and how to do them well
Good Stuff Happens in 1:1 Meetings: Why you need them and how to do them wellGood Stuff Happens in 1:1 Meetings: Why you need them and how to do them well
Good Stuff Happens in 1:1 Meetings: Why you need them and how to do them well
 

05 labda

  • 1. Fealadat3: labda.asm Feladat meghatározása Implementálás Implementálás A program célja az assembly rutinok Code Segment cmp di, 20 assume CS:Code, jnc Ido4 időzítési lehetőségeinek bemutatása. DS:Data, SS:Stack mov al, 2 Az időzítés az AH00, INT1Ah funkció Start: jmp Beallit segítségével történik. A program egy mov ax, Code Ido4: mov DS, ax mov al, 1 „labda” leesését szimulálja. A labdát Beallit: egy „O” karakter szimbolizálja, amely xor di, di xor ah, ah fokozatosan gyorsulva esik le, majd mov si, 1 cmp dx, ax visszapattan. A visszapattanás xor dx, dx pop ax veszteségmentes, így a labda push dx fokozatosan lassulva eléri a kiindulási Torles: jc Kesleltet mov ax, 03h pozíciót. int 10h pop cx push ax Program bemutatása: mov dx, di mov dh, dl cmp di, 0 jz Lefele ·A programot először a mov dl, 40 késleltető rutinok nélkül kell xor bh, bh cmp di, 24 mov ah, 02h jz Felfele megírni. A billentyű figyelés int 10h Mozgas: helyett az AH00, INT16h add di, si funkcióval megvalósítható mov dx, offset Labda jmp Torles mov ah, 09h Lefele: billentyű leütésre történő int 21h mov si, 1 várakozást kell megírni. Így a Kesleltet: jmp Mozgas program csak akkor lép a mov ah, 01h Felfele: int 16h mov si, -1 következő iterációra, ha ;jnz Program_Vege jmp Mozgas lenyomunk egy billentyűt. Ellenőrizni kell, hogy a „labda” jz nincsbill Program_Vege: mov ah, 00h pop cx nem megy ki a képből. A int 16h mov ax, 4c00h legalsó pozíciót elérve felfelé cmp al, 27 int 21h mozog tovább, a legfelső jz Program_Vege nincsbill: Labda: pozíció elérését követően xor ah, ah db "O$" lefele halad. int 1ah Code Ends pop cx ·A letesztelt programban push cx Data Segment módosítani kell a billentyű mov ax, dx Data Ends leütésre váró részt az AH01, sub dx, cx push ax Stack Segment INT16h funkcióra. Ez a Stack Ends funkció nem állítja meg a cmp di, 5 program futását, mindössze a jnc Ido1 End Start mov al, 16 FLAG-ek állapotát, illetve az jmp Beallit AL értékét módosítja, ha volt Ido1: billentyű leütés. Be kell fejezni cmp di, 10 jnc Ido2 a késleltető programrészt. A mov al, 8 késleltetés alapeleme az jmp Beallit AH00, INT1Ah funkció, mely Ido2: cmp di, 15 a rendszeróra CX:DX jnc Ido3 regiszterpárba. Egy számláló- mov al, 4 változás kb. 1/18 sec. jmp Beallit Ido3:
  • 2. Start Inicializálás Képernyő törlés Poz < 5 ? Igen ΔT := 16 Kurzor pozícionálás Nem Poz < 10 ? Igen ΔT := 8 Labda kirakása Nem Poz < 15 ? Igen ΔT := 4 Billentyű figyelés Nem Poz < 20 ? Igen ΔT := 2 ESC ? Igen Program Vége Nem Nem ΔT := 1 Óra beolvasása Előző idő Teltelt > ΔT Igen aktualizálása Eltelt idő ? (Teltelt) kiszámítása Nem Irány Poz = 0 ? Igen beállítása (LE) Nem Irány Poz = 24 ? Igen beállítása (FEL) Nem Új pozíció kiszámítása
  • 3. Start Implementálás Inicializálás Verem xor di, di ; labda helye (sor) Inicializálás mov si, 1 ; lefelé indul a labda (irány vektor) xor dx, dx régi idő (0) push dx ; verembe a régi idő (most 0) ;program vége után, még a Code szegmensbe Labda: db ”o$” Képernyő törlés Poz < 5 ? Igen ΔT := 16 Kurzor pozícionálás Nem Poz < 10 ? Igen ΔT := 8 Labda kirakása Nem Poz < 15 ? Igen ΔT := 4 Billentyű figyelés Nem Poz < 20 ? Igen ΔT := 2 ESC ? Igen Program Vége Nem Nem ΔT := 1 Óra beolvasása Előző idő Teltelt > ΔT Igen aktualizálása Eltelt idő ? (Teltelt) kiszámítása Nem Irány Poz = 0 ? Igen beállítása (LE) Nem Irány Poz = 24 ? Igen beállítása (FEL) Nem Új pozíció kiszámítása
  • 4. Start Implementálás Képernyő törlés Verem Torles: Inicializálás mov ax, 03h int 10h régi idő (0) Torles Képernyő törlés Poz < 5 ? Igen ΔT := 16 Kurzor pozícionálás Nem Poz < 10 ? Igen ΔT := 8 Labda kirakása Nem Poz < 15 ? Igen ΔT := 4 Billentyű figyelés Nem Poz < 20 ? Igen ΔT := 2 ESC ? Igen Program Vége Nem Nem ΔT := 1 Óra beolvasása Előző idő Teltelt > ΔT Igen aktualizálása Eltelt idő ? (Teltelt) kiszámítása Nem Irány Poz = 0 ? Igen beállítása (LE) Nem Irány Poz = 24 ? Igen beállítása (FEL) Nem Új pozíció kiszámítása
  • 5. Start Implementálás Kurzor pozicionálás Verem mov dx, di ;(16 bites regisztert használunk) Inicializálás mov dh, dl ;pozíció DI sor (8 bites) régi idő (0) mov dl, 40 ;pozíció 40. oszlop xor bh, bh mov ah, 02h int 10h Képernyő törlés Poz < 5 ? Igen ΔT := 16 Kurzor pozícionálás Nem Poz < 10 ? Igen ΔT := 8 Labda kirakása Nem Poz < 15 ? Igen ΔT := 4 Billentyű figyelés Nem Poz < 20 ? Igen ΔT := 2 ESC ? Igen Program Vége Nem Nem ΔT := 1 Óra beolvasása Előző idő Teltelt > ΔT Igen aktualizálása Eltelt idő ? (Teltelt) kiszámítása Nem Irány Poz = 0 ? Igen beállítása (LE) Nem Irány Poz = 24 ? Igen beállítása (FEL) Nem Új pozíció kiszámítása
  • 6. Start Implementálás Labda kirakása Verem mov dx, offset Labda Inicializálás mov ah, 09h int 21h régi idő (0) Képernyő törlés Poz < 5 ? Igen ΔT := 16 Kurzor pozícionálás Nem Poz < 10 ? Igen ΔT := 8 Labda kirakása Nem Poz < 15 ? Igen ΔT := 4 Billentyű figyelés Nem Poz < 20 ? Igen ΔT := 2 ESC ? Igen Program Vége Nem Nem ΔT := 1 Óra beolvasása Előző idő Teltelt > ΔT Igen aktualizálása Eltelt idő ? (Teltelt) kiszámítása Nem Irány Poz = 0 ? Igen beállítása (LE) Nem Irány Poz = 24 ? Igen beállítása (FEL) Nem Új pozíció kiszámítása
  • 7. Start Implementálás Billentyű figyelés (1) Billentyű figyelés (2) Verem Kesleltet: mov ah, 01h Inicializálás mov ah, 00h int 16h int 16h régi idő (0) ;ha van leütött billentyű, tehát ;időzítő nélküli eset nem üres a billentyűzet puffer, akkor Z flag értéke 0 Képernyő törlés Poz < 5 ? Igen ΔT := 16 Kurzor pozícionálás Nem Poz < 10 ? Igen ΔT := 8 Labda kirakása Nem Kesleltet Poz < 15 ? Igen ΔT := 4 Billentyű figyelés Nem Poz < 20 ? Igen ΔT := 2 ESC ? Igen Program Vége Nem Nem ΔT := 1 Óra beolvasása Előző idő Teltelt > ΔT Igen aktualizálása Eltelt idő ? (Teltelt) kiszámítása Nem Irány Poz = 0 ? Igen beállítása (LE) Nem Irány Poz = 24 ? Igen beállítása (FEL) Nem Új pozíció kiszámítása
  • 8. Start Implementálás Időzítő nélküli eset (1) Időzítős eset (2) Verem cmp al, 27 jz nincsbill Inicializálás jz Program_Vege mov ah, 00h int 16h régi idő (0) cmp al, 27 jz Program_Vege nincsbill: Képernyő törlés Hogyan oldható Poz < 5 ? Igen ΔT := 16 meg optimálisan, hogy minden Kurzor billentyű pozícionálás Nem lenyomásra kilépjen? Poz < 10 ? Igen ΔT := 8 Labda kirakása Nem Poz < 15 ? Igen ΔT := 4 Billentyű figyelés Nem Poz < 20 ? Igen ΔT := 2 ESC ? Igen Program Vége Nem Nem ΔT := 1 Óra beolvasása Előző idő Teltelt > ΔT Igen aktualizálása Eltelt idő ? (Teltelt) kiszámítása Nem Irány Poz = 0 ? Igen beállítása (LE) Nem Irány Poz = 24 ? Igen beállítása (FEL) Nem Új pozíció kiszámítása
  • 9. Start Implementálás Óra beolvasása Verem xor ah, ah Inicializálás int 1ah ;óra beolvasása CX:DX -be régi idő (0) Képernyő törlés Poz < 5 ? Igen ΔT := 16 Kurzor pozícionálás Nem Poz < 10 ? Igen ΔT := 8 Labda kirakása Nem Poz < 15 ? Igen ΔT := 4 Billentyű figyelés Nem Poz < 20 ? Igen ΔT := 2 ESC ? Igen Program Vége Nem Nem ΔT := 1 Óra beolvasása Előző idő Teltelt > ΔT Igen aktualizálása Eltelt idő ? (Teltelt) kiszámítása Nem Irány Poz = 0 ? Igen beállítása (LE) Nem Irány Poz = 24 ? Igen beállítása (FEL) Nem Új pozíció kiszámítása
  • 10. Start Implementálás Eltelt idő kiszámítása (Teltelt) Verem pop cx ;régi idő kivétele Inicializálás push cx ;régi idő visszatétele mov ax, dx ;aktuális idő mentése ax-be aktuális idő sub dx, cx ;dx-ben a Teltelt = Taktuális - Trégi régi idő (0) push ax ;aktuális idő mentése a verembe Képernyő törlés Poz < 5 ? Igen ΔT := 16 Kurzor pozícionálás Nem Poz < 10 ? Igen ΔT := 8 Labda kirakása Nem Poz < 15 ? Igen ΔT := 4 Billentyű figyelés Nem Poz < 20 ? Igen ΔT := 2 ESC ? Igen Program Vége Nem Nem ΔT := 1 Óra beolvasása Előző idő Teltelt > ΔT Igen aktualizálása Eltelt idő ? (Teltelt) kiszámítása Nem Irány Poz = 0 ? Igen beállítása (LE) Nem Irány Poz = 24 ? Igen beállítása (FEL) Nem Új pozíció kiszámítása
  • 11. Start Implementálás Poz < 5 ? Verem cmp di, 5 Inicializálás jnc Ido1 mov al, 16 aktuális idő jmp Beallit régi idő (0) Ido1: Képernyő törlés Poz < 5 ? Igen ΔT := 16 Kurzor pozícionálás Nem Ido1 Poz < 10 ? Igen ΔT := 8 Labda kirakása Nem Poz < 15 ? Igen ΔT := 4 Billentyű figyelés Nem Poz < 20 ? Igen ΔT := 2 ESC ? Igen Program Vége Nem Nem ΔT := 1 Óra beolvasása Beállít Előző idő Teltelt > ΔT Igen aktualizálása Eltelt idő ? (Teltelt) kiszámítása Nem Irány Poz = 0 ? Igen beállítása (LE) Nem Irány Poz = 24 ? Igen beállítása (FEL) Nem Új pozíció kiszámítása
  • 12. Start Implementálás Poz < 10 ? Verem cmp di, 10 Inicializálás jnc Ido2 mov al, 8 aktuális idő jmp Beallit régi idő (0) Ido2: Képernyő törlés Poz < 5 ? Igen ΔT := 16 Kurzor pozícionálás Nem Poz < 10 ? Igen ΔT := 8 Labda kirakása Nem Ido2 Poz < 15 ? Igen ΔT := 4 Billentyű figyelés Nem Poz < 20 ? Igen ΔT := 2 ESC ? Igen Program Vége Nem Nem ΔT := 1 Óra beolvasása Beállít Előző idő Teltelt > ΔT Igen aktualizálása Eltelt idő ? (Teltelt) kiszámítása Nem Irány Poz = 0 ? Igen beállítása (LE) Nem Irány Poz = 24 ? Igen beállítása (FEL) Nem Új pozíció kiszámítása
  • 13. Start Implementálás Poz < 15 ? Verem cmp di, 15 Inicializálás jnc Ido3 mov al, 4 aktuális idő jmp Beallit régi idő (0) Ido3: Képernyő törlés Poz < 5 ? Igen ΔT := 16 Kurzor pozícionálás Nem Poz < 10 ? Igen ΔT := 8 Labda kirakása Nem Poz < 15 ? Igen ΔT := 4 Billentyű figyelés Nem Ido3 Poz < 20 ? Igen ΔT := 2 ESC ? Igen Program Vége Nem Nem ΔT := 1 Óra beolvasása Beállít Előző idő Teltelt > ΔT Igen aktualizálása Eltelt idő ? (Teltelt) kiszámítása Nem Irány Poz = 0 ? Igen beállítása (LE) Nem Irány Poz = 24 ? Igen beállítása (FEL) Nem Új pozíció kiszámítása
  • 14. Start Implementálás Poz < 20 ? Verem cmp di, 20 Inicializálás jnc Ido4 mov al, 2 aktuális idő jmp Beallit régi idő (0) Ido4: Képernyő törlés Poz < 5 ? Igen ΔT := 16 Kurzor pozícionálás Nem Poz < 10 ? Igen ΔT := 8 Labda kirakása Nem Poz < 15 ? Igen ΔT := 4 Billentyű figyelés Nem Poz < 20 ? Igen ΔT := 2 ESC ? Igen Program Vége Ido4 Nem Nem ΔT := 1 Óra beolvasása Beállít Előző idő Teltelt > ΔT Igen aktualizálása Eltelt idő ? (Teltelt) kiszámítása Nem Irány Poz = 0 ? Igen beállítása (LE) Nem Irány Poz = 24 ? Igen beállítása (FEL) Nem Új pozíció kiszámítása
  • 15. Start Implementálás ΔT := 1 Verem mov al, 1 ;Egyébként (21-24) Inicializálás aktuális idő régi idő (0) Képernyő törlés Poz < 5 ? Igen ΔT := 16 Kurzor pozícionálás Nem Poz < 10 ? Igen ΔT := 8 Labda kirakása Nem Poz < 15 ? Igen ΔT := 4 Billentyű figyelés Nem Poz < 20 ? Igen ΔT := 2 ESC ? Igen Program Vége Nem Nem ΔT := 1 Óra beolvasása Előző idő Teltelt > ΔT Igen aktualizálása Eltelt idő ? (Teltelt) kiszámítása Nem Irány Poz = 0 ? Igen beállítása (LE) Nem Irány Poz = 24 ? Igen beállítása (FEL) Nem Új pozíció kiszámítása
  • 16. Start Implementálás Teltelt > ΔT ? Verem Beallit: Inicializálás xor ah, ah cmp dx, ax régi idő (0) pop ax ;előző idő aktualizálásához kell jc Kesleltet Képernyő törlés Poz < 5 ? Igen ΔT := 16 Kurzor pozícionálás Nem Poz < 10 ? Igen ΔT := 8 Labda kirakása Nem Kesleltet Poz < 15 ? Igen ΔT := 4 Billentyű figyelés Nem Poz < 20 ? Igen ΔT := 2 ESC ? Igen Program Vége Nem Nem ΔT := 1 Óra beolvasása Beállít Előző idő Teltelt > ΔT Igen aktualizálása Eltelt idő ? (Teltelt) kiszámítása Nem Irány Poz = 0 ? Igen beállítása (LE) Nem Irány Poz = 24 ? Igen beállítása (FEL) Nem Új pozíció kiszámítása
  • 17. Start Implementálás Előző idő aktualizálása Verem pop cx ;régi idő kivétele a veremből Inicializálás push ax ;aktuális idő elmentése régi idő (x) Képernyő törlés Poz < 5 ? Igen ΔT := 16 Kurzor pozícionálás Nem Poz < 10 ? Igen ΔT := 8 Labda kirakása Nem Poz < 15 ? Igen ΔT := 4 Billentyű figyelés Nem Poz < 20 ? Igen ΔT := 2 ESC ? Igen Program Vége Nem Nem ΔT := 1 Óra beolvasása Előző idő Teltelt > ΔT Igen aktualizálása Eltelt idő ? (Teltelt) kiszámítása Nem Irány Poz = 0 ? Igen beállítása (LE) Nem Irány Poz = 24 ? Igen beállítása (FEL) Nem Új pozíció kiszámítása
  • 18. Start Implementálás Poz = 0 ? Verem cmp di, 0 Inicializálás jz Lefele régi idő (x) Képernyő törlés Poz < 5 ? Igen ΔT := 16 Kurzor pozícionálás Nem Poz < 10 ? Igen ΔT := 8 Labda kirakása Nem Poz < 15 ? Igen ΔT := 4 Billentyű figyelés Nem Poz < 20 ? Igen ΔT := 2 ESC ? Igen Program Vége Nem Nem ΔT := 1 Óra beolvasása Előző idő Teltelt > ΔT Igen aktualizálása Eltelt idő ? (Teltelt) kiszámítása Nem Lefele Irány Poz = 0 ? Igen beállítása (LE) Nem Irány Poz = 24 ? Igen beállítása (FEL) Nem Új pozíció kiszámítása
  • 19. Start Implementálás Poz = 24 ? Verem cmp di, 24 Inicializálás jz Felfele régi idő (x) Képernyő törlés Poz < 5 ? Igen ΔT := 16 Kurzor pozícionálás Nem Poz < 10 ? Igen ΔT := 8 Labda kirakása Nem Poz < 15 ? Igen ΔT := 4 Billentyű figyelés Nem Poz < 20 ? Igen ΔT := 2 ESC ? Igen Program Vége Nem Nem ΔT := 1 Óra beolvasása Előző idő Teltelt > ΔT Igen aktualizálása Eltelt idő ? (Teltelt) kiszámítása Nem Irány Poz = 0 ? Igen beállítása (LE) Nem Felfele Irány Poz = 24 ? Igen beállítása (FEL) Nem Új pozíció kiszámítása
  • 20. Start Implementálás Új pozíció kiszámítása Verem Mozgas: Inicializálás add di, si ;a labda új pozíciója jmp Torles régi idő (x) Torles Képernyő törlés Poz < 5 ? Igen ΔT := 16 Kurzor pozícionálás Nem Poz < 10 ? Igen ΔT := 8 Labda kirakása Nem Poz < 15 ? Igen ΔT := 4 Billentyű figyelés Nem Poz < 20 ? Igen ΔT := 2 ESC ? Igen Program Vége Nem Nem ΔT := 1 Óra beolvasása Előző idő Teltelt > ΔT Igen aktualizálása Eltelt idő ? (Teltelt) kiszámítása Nem Irány Poz = 0 ? Igen beállítása (LE) Nem Irány Poz = 24 ? Igen beállítása (FEL) Mozgas Nem Új pozíció kiszámítása
  • 21. Start Implementálás Irány beállítása (LE) Verem Lefele: Inicializálás mov si, 1 jmp Mozgas régi idő (x) Képernyő törlés Poz < 5 ? Igen ΔT := 16 Kurzor pozícionálás Nem Poz < 10 ? Igen ΔT := 8 Labda kirakása Nem Poz < 15 ? Igen ΔT := 4 Billentyű figyelés Nem Poz < 20 ? Igen ΔT := 2 ESC ? Igen Program Vége Nem Nem ΔT := 1 Óra beolvasása Előző idő Teltelt > ΔT Igen aktualizálása Eltelt idő ? (Teltelt) kiszámítása Nem Lefele Irány Poz = 0 ? Igen beállítása (LE) Nem Irány Poz = 24 ? Igen beállítása (FEL) Mozgas Nem Új pozíció kiszámítása
  • 22. Start Implementálás Irány beállítása (FEL) Verem Felfele: Inicializálás mov si, -1 jmp Mozgas régi idő (x) Képernyő törlés Poz < 5 ? Igen ΔT := 16 Kurzor pozícionálás Nem Poz < 10 ? Igen ΔT := 8 Labda kirakása Nem Poz < 15 ? Igen ΔT := 4 Billentyű figyelés Nem Poz < 20 ? Igen ΔT := 2 ESC ? Igen Program Vége Nem Nem ΔT := 1 Óra beolvasása Előző idő Teltelt > ΔT Igen aktualizálása Eltelt idő ? (Teltelt) kiszámítása Nem Irány Poz = 0 ? Igen beállítása (LE) Nem Felfele Irány Poz = 24 ? Igen beállítása (FEL) Mozgas Nem Új pozíció kiszámítása
  • 23. Start Implementálás Program Vége Verem pop cx ;vermet úgy adjuk vissza, ahogy Inicializálás kaptuk! A verembe maradt értéket egy „szemét”-regiszterbe kitesszük! Képernyő törlés Poz < 5 ? Igen ΔT := 16 Kurzor pozícionálás Nem Poz < 10 ? Igen ΔT := 8 Labda kirakása Nem Poz < 15 ? Igen ΔT := 4 Billentyű figyelés Nem Poz < 20 ? Igen ΔT := 2 ESC ? Igen Program Vége Nem Nem ΔT := 1 Óra beolvasása Előző idő Teltelt > ΔT Igen aktualizálása Eltelt idő ? (Teltelt) kiszámítása Nem Irány Poz = 0 ? Igen beállítása (LE) Nem Irány Poz = 24 ? Igen beállítása (FEL) Nem Új pozíció kiszámítása