Advertisement
Guest User

Untitled

a guest
Oct 7th, 2015
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. .MODEL small
  2.  
  3. .STACK 100h
  4.  
  5. .DATA
  6.     intro     db 'Iveskite skaiciu seka: ', '$'
  7.     space     db ' ', '$'
  8.     line      db 10, 13, '$'
  9.    
  10.     string    db 126 dup('$')  
  11.  
  12. .CODE
  13.     start:
  14.  
  15.         MOV ax, @data
  16.         MOV ds, ax
  17.         ; ----------
  18.  
  19.                          
  20.                          
  21.         ; cia laikysiu...
  22.         MOV ch, 0      ; ... viso stringo ilgi (ciklo trukme apsisukimais)
  23.         MOV si, 2      ; ... einamos stringo pozicijos numeri
  24.         MOV cl, 0      ; ... einamo zodzio ilgi  
  25.         MOV bx, 0      ; ... einamo zodzio ilgi (reikes, kuomet skaicius virsys 9)
  26.        
  27.        
  28.  
  29.         ; --- isvedu pradine zinute ---
  30.         MOV ah, 9
  31.         LEA dx, intro
  32.         INT 21h
  33.        
  34.        
  35.        
  36.         ; --- iveda stringa ---
  37.         MOV ah, 0ah
  38.         LEA dx, string
  39.         INT 21h  
  40.        
  41.        
  42.         MOV ch, string[1]    ; issisaugau stringo ilgi ir turiu apsisukimu skaiciu
  43.        
  44.        
  45.         ; --- padarau eilutes tarpa ---
  46.         MOV ah, 9
  47.         LEA dx, line
  48.         INT 21h
  49.                          
  50.                
  51.                
  52.         ; ==================
  53.         ; === SUKU CIKLA ===                         
  54.         ; ==================
  55.        
  56.        
  57.         tikrinu:
  58.        
  59.             CMP ch, 0                       ; patikrinu ar ne stringo pabaiga (pasibaige ciklas)
  60.             JE baigesi_ciklas
  61.  
  62.  
  63.         CMP byte ptr string[si], 20h    ; patikrinu ar simbolis yra tarpas
  64.  
  65.         JE  tarpas
  66.         JNE simbolis
  67.        
  68.  
  69.  
  70.         ; ------------------------------------------
  71.         ; --- simbolis ---
  72.         ; ------------------------------------------
  73.     simbolis:  
  74.  
  75.  
  76.         INC si      ; +1, kad imtu kita stringo simboli
  77.         INC cl      ; +1 prie zodzio ilgio
  78.         INC bx          ; +1 prie zodzio ilgio
  79.         DEC ch          ; -1, nes ciklas prasisuko viena karta
  80.         JMP tikrinu ; suka cikla toliau
  81.                                        
  82.     ; ------------------------------------------
  83.         ; --- simbolis ---
  84.         ; ------------------------------------------
  85.  
  86.                  
  87.                  
  88.                  
  89.                              
  90.                              
  91.         ; ------------------------------------------                    
  92.         ; --- tarpas ---
  93.         ; ------------------------------------------
  94.     tarpas:
  95.  
  96.        
  97.         CMP cl, 10     ; jeigu skaicius didesnis, nei 9, tai reikia kitaip su juo elgtis
  98.         JAE didelis_skaicius
  99.        
  100.        
  101.         DEC ch         ; -1, nes ciklas prasisuko viena karta
  102.        
  103.         ADD cl, 30h    ; paverciu skaiciu i ASCII...
  104.        
  105.         MOV ah, 02h    
  106.         MOV dl, cl     ; ... ir ji spausdinu
  107.         INT 21h                            
  108.        
  109.         MOV ah, 9
  110.         LEA dx, space  ; spausdinu tarpa tarp skaiciu
  111.         INT 21h
  112.        
  113.         MOV cl, 0      ; nunulinu zodzio  
  114.         MOV bx, 0      ; ilgio skaitliukus
  115.                                                                                                                                        
  116.         INC si         ; +1, kad imtu kita stringo simboli
  117.         JMP tikrinu    
  118.        
  119.     ; ------------------------------------------
  120.     ; --- tarpas ---
  121.     ; ------------------------------------------
  122.                              
  123.                  
  124.        
  125.         didelis_skaicius:
  126.        
  127.             DEC ch           ; -1, nes prasisuko ciklas
  128.        
  129.             ; KODEL CIA YRA last_call_big PAAISKINIMAS
  130.             ; ----------------------------------------
  131.             ;       Jeigu baigiasi stringas (kurio ilgi laikau ch) ir einamasis zodis turejo
  132.             ; daugiau, nei 9 simbolius, tai cia persokus ir ivykdzius komanda
  133.             ; DEC CH man ciklo skaitliukas vel resetinasi i reiksme FF
  134.             ; taip pratesdamas cikla ir sugadindamas programa tad, kad to isvengti
  135.             ; sukuriau atskira jumpa butent siam atvejui
  136.        
  137.         last_call_big:
  138.        
  139.             MOV ax, bx       ; DIV funkcija dalina skaiciu, kuris yra AX registre
  140.                              ; todel savo zodzio ilgi ten persikeliu
  141.            
  142.             MOV dl, 10       ; is kiek dalinsiu ir padalinu
  143.             DIV dl
  144.        
  145.             ; AL saugomas dalmuo, AH liekana
  146.        
  147.             MOV bl, al       ; issisaugau
  148.             MOV bh, ah       ; sias reiksmes
  149.        
  150.             ADD bl, 30h      ; paverciu jas
  151.             ADD bh, 30h      ; i ASCII
  152.        
  153.             MOV ah, 02h      
  154.             MOV dl, bl       ; isvedu dalmeni
  155.             INT 21h
  156.        
  157.             MOV ah, 02h
  158.             MOV dl, bh       ; isvedu liekana
  159.             INT 21h
  160.        
  161.             MOV ah, 9
  162.         LEA dx, space    ; spausdinu tarpa tarp skaiciu
  163.         INT 21h
  164.          
  165.         MOV cl, 0        ; isvalau
  166.         MOV bx, 0        ; skaitliukus  
  167.            
  168.         INC si           ; +1, kad imtu kita stringo simboli
  169.        
  170.             JMP tikrinu
  171.        
  172.        
  173.                  
  174.        
  175.         baigesi_ciklas:
  176.        
  177.             CMP cl, 0          ; jeigu buvo iskaiciuota simboliu, tai isspausdinu ji
  178.             JE pabaiga  
  179.        
  180.             CMP cl, 10         ; jeigu baigesi ciklas, o
  181.             JAE last_call_big  ; sukauptas ilgis didesnis, nei 9
  182.          
  183.        
  184.         ADD cl, 30h        ; paverciu skaiciu i ASCII...
  185.        
  186.         MOV ah, 02h    
  187.         MOV dl, cl         ; ... ir ji spausdinu
  188.         INT 21h
  189.        
  190.                    
  191.  
  192.  
  193.         ; ---------------
  194.     ; --- pabaiga ---      
  195.     ; ---------------
  196.     pabaiga:
  197.            
  198.         MOV al, 0
  199.         ;-----------
  200.         MOV ah, 4Ch
  201.         INT 21h
  202.        
  203.    
  204.     end start
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement