Advertisement
Guest User

Untitled

a guest
Dec 3rd, 2017
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. Progr           segment
  2.                 assume  cs:Progr, ds:dane, ss:stosik
  3.  
  4. start:          mov     ax,dane
  5.                 mov     ds,ax
  6.                 mov     ax,stosik
  7.                 mov     ss,ax
  8.                 mov     sp,offset szczyt
  9.  
  10.             mov ax,0b800h  ;0b800h to adres poczatku pamieci obrazu
  11.             mov es,ax    ;przeniesienie do rejestru segmentowego
  12.             mov cx,1920  ;licznik wykonania petli. Dekrementuje sie z kazdym jej wykonaniem
  13.             mov di,0 ;zaczynamy od pierwszego znaku na ekranie, czyli lewego gornego rogu ekranu. Jest to nasz offset uzywany nizej
  14.             mov al, 32  ;wstawienie znaku o kodzie 32 do rejestru al (32 to spacja)
  15. Czyszczenie:
  16.             mov es:[di],al ;wstawienie znaku z rejestru al do miejsca w pamieci okreslanego przes rejestr es + offset
  17.             add di,2   ;Trzeba zwiekszyc offset o dwa
  18.             loop Czyszczenie ;petla wykona sie tyle razy, ile wynosi cx, czyli 1920
  19.  
  20.             mov di,240 ;srodek drugiego wiersza, bo konsola po wykonaniu programu przesuwa sie o jeden wiersz w dol
  21.             mov bx,160 ; wiersz +1
  22.             mov al, 65 ;znak 'A'
  23.             mov cx,23 ;ilosc pieter piramidy
  24.             mov dh,1 ;ilosc pozostalych do wypisania liter. Bedzie zwiekszana po kazdym wierszu
  25.             mov dl,3 ;rejestr pomocniczy, ktorym bedziemy wyznaczac ilosc znakow w kolejnym wierszu
  26. Piramida:
  27.             mov es:[di],al ;wpisanie zawartosci AL do pamieci obrazu
  28.             add di,2 ;przesuniecie "kursora" o jedno miejsce w prawo na ekranie
  29.             dec dh ;dekrementacja pozostalych znakow
  30.             cmp dh,0 ;sprawdzenie, czy wszystkie znaki zostaly wypisane
  31.             jnz Piramida ;jesli nie, to skaczemy do Piramida
  32.             mov dh,dl ;ustawiamy ilosc pozostalych znakow na zawartosc rejestru pomocniczego, ktory jest o 2 wiekszy
  33.             add dl,2 ;zwiekszamy rejestr pomocniczy o 2
  34.             sub bx,4 ;odejmujemy 2 pozycje od bx, zeby w nastpenej linijce kursor nie byl w tej samej kolumnie
  35.             add di,bx ;przechodzimy do nastpnego wiersza
  36.             inc al ;nastepny znak w alfabecie
  37.             loop Piramida ;petla wykona sie tyle razy ile jest w rejestrze cx, czyli 23
  38.  
  39. ;konczenie programu
  40. koniec:
  41.             mov     ah,4ch
  42.             mov         al,0
  43.             int         21h
  44.  
  45. Progr           ends
  46.  
  47. dane            segment
  48.  
  49. dane            ends
  50.  
  51. stosik          segment
  52.                 dw    100h dup(0)
  53. szczyt          Label word
  54. stosik          ends
  55.  
  56. end start
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement