Advertisement
ItsMeLucifer

x86 Assembly - Graphic Xmas Tree

Jan 5th, 2020
1,683
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.                 ;-------------------makra------------------------------
  4.                 Clear MACRO VidAddress, ClearAtom, BufLength
  5.                         LES DI,DWORD PTR VidAddress     ;wpisz adres do ES:DI
  6.                         MOV AX,ClearAtom        ;do AX s�owo wpisywane do bufora
  7.                         MOV CX,BufLength        ;do CX wielkosc bufora w bajtach
  8.                         SHR CX,1            ;kt�ra podzielona przez 2 daje licznik
  9.                         REP STOSW           ;wype�niamy bufor
  10.                 ENDM
  11.  
  12.                 Ruler MACRO VidAddress,Length,ScreenW,ScreenX,ScreenY ;ScreenW - szeroko�� ekranu 80, ScreenY - numer wiersza (0-24), ScreenX - numer kolumny (0-79)
  13.                         LOCAL DOCHAR
  14.                         LES DI,DWORD PTR VidAddress ;wpisz adres do ES:DI
  15.                         MOV AL,ScreenY          ;wsp��rz�dna Y do AL
  16.                         MOV AH,ScreenW          ;szeroko�� ekranu do AH
  17.                         IMUL AH             ;wynik AL*AH do AX
  18.                         ADD DI,AX           ;dodaj przesuni�cie Y w buforze do DI
  19.                         ADD DI,ScreenX          ;dodaj przesuni�cie X w buforze do DI
  20.                         SHL DI,1            ;mno�enie przez 2 daje adres pierwszego znaku
  21.                         MOV CX,Length           ;d�ugo�� linijki do CX
  22.                         MOV AH,07           ;normalny tekst - atrybut 7
  23.                         MOV AL,'1'          ;pierwszy znak - cyfra 1
  24.                     DoChar: STOSW               ;za�adowanie zawarto�ci AX pod adres ES:DI
  25.                         ADD AL,'1'          ;dodanie kodu '1'
  26.                         AAA             ;korekta dodawania BCD
  27.                         ADD AL,'0'          ;zamiana BCD na ASCII
  28.                         MOV AH,07           ;atrybut 7 - zwyk�y tekst
  29.                         LOOP DoChar         ;wr�� do pocz�tku p�tli je�li CX>0
  30.                 ENDM
  31.  
  32.  
  33.  
  34.                 ;--------------------------funkcje-------------------------------
  35.  
  36. tekstowy:
  37. mov dx,offset trybtekstowypowitanie
  38. mov ah,09h ;Zapisanie funkcji wyświetlania do rejestru ah
  39. int 21h
  40. jmp koniec
  41.  
  42.  
  43.                 ;----------------------------------------------------------------
  44.  
  45.                 ;---------------------------program-------------------------------
  46.  
  47. start:          mov     ax,dane
  48.                 mov     ds,ax
  49.                 mov     ax,stosik
  50.                 mov     ss,ax
  51.                 mov     sp,offset szczyt
  52.  
  53.  
  54.  
  55.     mov dx,offset kom
  56.     mov ah,09h ;Zapisanie funkcji wyświetlania do rejestru ah
  57.     int 21h
  58.  
  59.     mov ax, 0
  60.     mov ah, 01h; pobranie jednego znaku z klawiatury 0-9
  61.     int 21h
  62.  
  63.     mov bl, al ;przenieś mniejszy bajt do bl
  64.     sub bl, 30h ; odejmij 30h aby otrzymać pożądaną liczbę
  65.     mov [wybor],bl
  66.     mov bx,0
  67.     mov bl,[wybor]
  68.     cmp bx,1
  69.     je tekstowy ; NIE CHCE MI DZIALAC SKOK WARUNKOWY< KIJ WIE DLACZEGO
  70.  
  71.  
  72.     graficzny:
  73.       mov ax, 13h
  74.       int 10h           ; uruchom tryb graficzny 13h (320x200 256 kolor�w)
  75.       mov ax, 0A000h        ;0A000:0000 - pierwszy piksel (bajt)
  76.       mov es, ax
  77.  
  78.       mov di, 20*320+160    ;wiersz*320 + kolumna
  79.       mov   cx, 10 ;130 calosc
  80.       rysuj:            ;linia pionowa
  81.         mov byte ptr es:[di],2  ;czerwony
  82.         add di, 320
  83.         loop    rysuj
  84.  
  85.       mov bx, 25*320+165
  86.       mov dx, 5
  87.       mov cx, 3
  88.       choinka2:
  89.         push cx
  90.         mov cx, dx
  91.       galaz2:
  92.         mov di, bx
  93.         push cx
  94.         mov cx, 10
  95.         rysuj3:
  96.           mov byte ptr es:[di],2
  97.           add di, 320
  98.           loop rysuj3
  99.           add bx, 5*320
  100.           add bx, 5
  101.           pop cx
  102.       loop galaz2
  103.                     sub bx, 5*5
  104.                     add dx, 3
  105.                     pop cx
  106.                     loop choinka2
  107.  
  108.                     mov bx, 25*320+155
  109.                     mov dx, 5
  110.                     mov cx, 3
  111.                     choinka:
  112.                     push cx
  113.                     mov cx, dx
  114.                     galaz:
  115.                     mov di, bx
  116.                     push cx
  117.                     mov cx, 10
  118.                     rysuj2:
  119.                     mov byte ptr es:[di],2
  120.                     add di, 320
  121.                     loop rysuj2
  122.                     add bx, 5*320
  123.                     sub bx, 5
  124.                     pop cx
  125.                     loop galaz
  126.                     add bx, 5*5
  127.                     add dx, 3
  128.                     pop cx
  129.                     loop choinka
  130.  
  131.                     mov cx, 120
  132.                     add di, 10
  133.                     pozioma:
  134.                     mov byte ptr es:[di],2
  135.                       add di, 1
  136.                     loop pozioma
  137.  
  138.                     mov bx,80*320+180
  139.                     mov cx,2
  140.                     LOOOOOP:
  141.                     push cx
  142.                     mov cx,2
  143.                     LOOOOP:
  144.                     push cx
  145.                     mov cx,2
  146.                     LOOOP:
  147.                     push cx
  148.  
  149.                     mov dx,1
  150.  
  151.                     mov cx,3
  152.                     bomba1:
  153.                         push cx
  154.                         mov byte ptr es:[di],4
  155.                         add bx,320
  156.                         dec bx
  157.                         mov di,bx
  158.                         mov cx,dx
  159.                         wiersz:
  160.                           mov byte ptr es:[di],4
  161.                           add di,1
  162.                         loop wiersz
  163.                         add dx,2
  164.                     pop cx
  165.                     loop bomba1
  166.  
  167.                     mov cx,3
  168.                     bomba2:
  169.                         push cx
  170.                         mov byte ptr es:[di],4
  171.                         add bx,320
  172.                         inc bx
  173.                         mov di,bx
  174.                         sub dx,2
  175.                         mov cx,dx
  176.                         wiersz2:
  177.                           mov byte ptr es:[di],4
  178.                           add di,1
  179.                         loop wiersz2
  180.                         pop cx
  181.                     loop bomba2
  182.  
  183.                     mov bx,75*320+145
  184.                     pop cx
  185.                     loop LOOOP
  186.  
  187.                     mov bx,110*320+135
  188.                     pop cx
  189.                     loop LOOOOP
  190.  
  191.                     mov bx,115*320+190
  192.                     pop cx
  193.                     loop LOOOOOP
  194.  
  195.                     mov bx,60*320+170
  196.                     mov cx,2
  197.                     LOOOOOP2:
  198.                     push cx
  199.                     mov cx,2
  200.                     LOOOOP2:
  201.                     push cx
  202.                     mov cx,2
  203.                     LOOOP2:
  204.                     push cx
  205.  
  206.                     mov dx,1
  207.  
  208.                     mov cx,3
  209.                     bomba12:
  210.                         push cx
  211.                         mov byte ptr es:[di],5
  212.                         add bx,320
  213.                         dec bx
  214.                         mov di,bx
  215.                         mov cx,dx
  216.                         wiersz12:
  217.                           mov byte ptr es:[di],5
  218.                           add di,1
  219.                         loop wiersz12
  220.                         add dx,2
  221.                     pop cx
  222.                     loop bomba12
  223.  
  224.                     mov cx,3
  225.                     bomba22:
  226.                         push cx
  227.                         mov byte ptr es:[di],5
  228.                         add bx,320
  229.                         inc bx
  230.                         mov di,bx
  231.                         sub dx,2
  232.                         mov cx,dx
  233.                         wiersz22:
  234.                           mov byte ptr es:[di],5
  235.                           add di,1
  236.                         loop wiersz22
  237.                         pop cx
  238.                     loop bomba22
  239.  
  240.                     mov bx,45*320+145
  241.                     pop cx
  242.                     loop LOOOP2
  243.  
  244.                     mov bx,85*320+165
  245.                     pop cx
  246.                     loop LOOOOP2
  247.  
  248.                     mov bx,100*320+185
  249.                     pop cx
  250.                     loop LOOOOOP2
  251.  
  252.  
  253.                     mov bx,45*320+175
  254.                     mov cx,2
  255.                     LOOOOOP3:
  256.                     push cx
  257.                     mov cx,2
  258.                     LOOOOP3:
  259.                     push cx
  260.                     mov cx,2
  261.                     LOOOP3:
  262.                     push cx
  263.  
  264.                     mov dx,1
  265.  
  266.                     mov cx,3
  267.                     bomba13:
  268.                         push cx
  269.                         mov byte ptr es:[di],3
  270.                         add bx,320
  271.                         dec bx
  272.                         mov di,bx
  273.                         mov cx,dx
  274.                         wiersz13:
  275.                           mov byte ptr es:[di],3
  276.                           add di,1
  277.                         loop wiersz13
  278.                         add dx,2
  279.                     pop cx
  280.                     loop bomba13
  281.  
  282.                     mov cx,3
  283.                     bomba23:
  284.                         push cx
  285.                         mov byte ptr es:[di],3
  286.                         add bx,320
  287.                         inc bx
  288.                         mov di,bx
  289.                         sub dx,2
  290.                         mov cx,dx
  291.                         wiersz33:
  292.                           mov byte ptr es:[di],3
  293.                           add di,1
  294.                         loop wiersz33
  295.                         pop cx
  296.                     loop bomba23
  297.  
  298.                     mov bx,95*320+145
  299.                     pop cx
  300.                     loop LOOOP3
  301.  
  302.                     mov bx,105*320+160
  303.                     pop cx
  304.                     loop LOOOOP3
  305.  
  306.                     mov bx,65*320+155
  307.                     pop cx
  308.                     loop LOOOOOP3
  309.  
  310.                     mov ax, 0A000h
  311.                     mov dx,offset witaj
  312.                     mov ah,09h ;Zapisanie funkcji wyświetlania do rejestru ah
  313.                     int 21h
  314.  
  315.                     xor ah, ah      ;oczekiwanie na naci�ni�cie klawisza
  316.                     int 16h
  317.  
  318.                     mov ax, 3
  319.                     int 10h         ; powr�t do trybu tekstowego
  320.                     jmp koniec
  321.  
  322.  
  323.  
  324.  
  325. koniec:
  326.  
  327.             mov     ah,4ch
  328.             mov al,0
  329.             int 21h
  330. Progr           ends
  331.  
  332. dane            segment
  333. witaj db 'Merry Xmas $'
  334. kom db 13,10, 'Witaj! 1- tryb tekstowy, 2- tryb graficzny ',13,10,'$'
  335. trybtekstowypowitanie db 13,10, 'to jest tryb tekstowy bozek wyczysc zmienne bo sie nie moge polapac xd ',13,10,'$'
  336. bufor db 2
  337. VidOrigin DD 0B8000000H
  338. wybor db 1
  339. dane            ends
  340.  
  341. stosik          segment stack
  342.                 dw    100h dup(0)
  343. szczyt          Label word
  344. stosik          ends
  345.  
  346. end start
  347.  
  348. Czarny - 0, niebieski - 1, zielony - 2, b��kitny - 3, czerwony - 4, r��owy - 5, br�zowy - 6, jasnoszary (ten standardowy) - 7, ciemnoszary - 8, jasnoniebieski - 9, jasnozielony - 10, jasnob��kitny - 11, jasnoczerwony - 12, jasnor��owy - 13, ���ty - 14, bia�y - 15.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement