Guest User

Untitled

a guest
May 25th, 2018
80
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:
  5.                 mov     ax,dane
  6.                 mov     ds,ax
  7.  
  8.                 mov     ax,stosik
  9.                 mov     ss,ax
  10.  
  11.                 mov     ax,offset szczyt
  12.                 mov     sp,ax
  13.                
  14.  
  15. ; PROGRAM
  16.                 mov al, 0h
  17.  
  18.                 mov ah, offset MINUS          ; wpisujemy do akumulatora zanegowany znak
  19.                 mov bh, offset PLUS                     ; pierwszy znak lini
  20.  
  21.                
  22.                 mov cl, 7d      ; bok-2
  23.                 mov ch, 9d          ; licznik znakow (wartosc: bok)
  24.                 ;sub cl, 2
  25.                
  26.  
  27.                 call NAGLOWEK                 ; f. rysujaca gorna linie znakow 
  28.                 call LINIA
  29. powrot9:                       
  30.                 mov dx, offset NL
  31.                 mov ah, 9
  32.                 int 21h
  33.                        
  34.                
  35.                 mov ch, 9d         ; resetujemy licznik znakow (wartosc: bok)
  36.                
  37.                 mov ah, bh
  38.  
  39.                                
  40.                 call NAGLOWEK       ; rysujemy dolna linie
  41.  
  42.                        
  43.                 call ZAKONCZ                  ; koniec programu
  44. NAGLOWEK:
  45. WYPISUJ:
  46.                 ;push ax
  47.  
  48.                 call ODWROC                   ; odwracamy znak w akumulatorze
  49.                 mov dl, ah
  50.                 mov dh, 0h
  51.                 mov ah, 9
  52.                 int 21h
  53.  
  54.                 mov ah, dl
  55.                 dec ch 
  56.                 cmp ch, 0
  57.                
  58.                 jnz WYPISUJ                 ; jezeli L != 0 to wracamy do pisania  
  59.  
  60.                
  61.                 ret
  62.                
  63. ODWROC:
  64.                 cmp ah, offset PLUS           ; porownujemy
  65.                 jnz WPISZ_PLUS               ; jezeli != 0 to zamieniamy na +
  66.                 jz WPISZ_MINUS              ; jezeli 0 to nasz znak byl + i zam.
  67.                 ret        
  68. WPISZ_PLUS:
  69.                 mov ah, offset PLUS           ; wpisujemy do akumulaotra
  70.                 ret
  71. WPISZ_MINUS:
  72.                 mov ah, offset MINUS          ; wpisujemy do akumulaotra
  73.                 ret
  74. LINIA:  mov ch, 9d         ; resetujemy licznik znakow] (wartosc: bok)
  75.         sub ch, 2
  76.         call SRODEK     ; przechodzimy do funkcji piszacej
  77.         dec cl           ; dekrementujemy licznik linii
  78.         cmp cl, 0
  79.         jnz LINIA
  80.         jmp powrot9
  81.  
  82. SRODEK:
  83.         mov dl, offset NL
  84.         mov dh, 0h
  85.         mov ah, 9
  86.         int 21h
  87.        
  88.         mov ah, bh
  89.        
  90.         call ODWROC
  91.         mov bh, ah
  92.        
  93.         mov dl, ah
  94.         mov dh, 0h
  95.         mov ah, 9
  96.         int 21h
  97.        
  98.  
  99.        
  100.         call SPACJE
  101.        
  102.  
  103.        
  104.         mov ah, bh
  105.         call ODWROC
  106.        
  107.         mov dl, ah
  108.         mov dh, 0h
  109.         mov ah, 9
  110.         int 21h
  111.  
  112.         ret
  113. SPACJE:
  114.         mov dl, offset SPACJA
  115.         mov dh, 0h
  116.         mov ah, 9
  117.         int 21h
  118.         dec ch
  119.         cmp ch, 0
  120.         jnz SPACJE
  121.         ret        
  122. ; KONIEC  
  123. ZAKONCZ:
  124.             mov     ah,4ch
  125.             mov     al,0
  126.             int     21h  
  127. Progr           ends
  128.  
  129. dane            segment
  130.             PLUS db '+$'
  131.             MINUS db '-$'
  132.             SPACJA db ' $'
  133.             NL db 0Ah,'$'
  134.             BOK db 10h
  135. dane            ends
  136.  
  137. stosik          segment
  138.                 dw    100h dup(0)
  139. szczyt          Label word
  140. stosik          ends
  141.  
  142. end start
Add Comment
Please, Sign In to add comment