Advertisement
Guest User

Untitled

a guest
Oct 14th, 2018
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ; Kompiliavimas: tasm -zi ivesk.asm
  2. ;                tlink /v ivesk
  3. ; Derinimas:   td ivesk
  4. ;
  5. ;
  6. ; Uzduotis: A.Programa sukeičia 4-a ir 9-a simbolius vietomis, o 2-a padaro ‘X’
  7. ;         B.Suranda kiekvieno ivesto baito 3,4 ir 6 bitu suma ir ja isspausdina
  8. ;C.Spausdina stulpeliu ivestus baitus padalintus sveikai is 20 ir prie rezultato pridejus 1500, desimtaineje
  9. ;D.Programa spausdina stulpeliu tų baitų numerius, kurių reikšmės skaitmenų sandauga 8-tainėje
  10. ;  sistemoje  yra didesnė už 6
  11. ;
  12. ;----------------------------------MAKROSAI--------------------------------------
  13. spausdinkEilute  macro  eilute
  14. ; Makrosas keicia AX, DX !!!
  15.    mov ah, 09
  16.    mov dx, offset eilute      
  17.    int 21h
  18. endm
  19.  
  20. ;------------------------------------------------------------------------
  21. iveskEilute    macro   buferis
  22. ; Makrosas keicia AX, DX !!!
  23.    mov ah, 0Ah
  24.    mov dx, offset buferis          ; pirmas argumentas - buferio adresas
  25.    int 21h
  26. endm
  27.  
  28. ;------------------------------------------------------------------------
  29. spausdinkSimboli  macro simbolis
  30. ; Makrosas keicia AX, DX !!!
  31. ; Naudojami DL ir AL
  32.    mov dl, byte ptr simbolis            ; simbolis, kuri spausdinsime
  33.    mov ah, 02                           ; "antra" dos int 21h funkcija
  34.    int 21h
  35. endm
  36.  
  37. ;------------------------------------------------------------------------
  38.  
  39. gaukNurodytaBaitoBita macro  baitas, kelintas          
  40. ; Makrosas keicia AX, CX !!!
  41. ; Pirmas argumentas:  baitas (adresas/reiksme/konstanta)
  42. ; Antras argumentas:  kelinta bita norime suzinoti (bitai skaiciuojami nuo nulinio - jauniausio)
  43. ; Rezultas: al - nurodyto bito reiksme
  44.  
  45.    mov cl, kelintas            ; bito numeris
  46.    mov al, byte ptr baitas     ; krauname baita
  47.    shr al, cl                  ; stumiame nurodyta bita i pradzia
  48.    and al, 01                  ; atmetame kitus bitus
  49. endm
  50.  
  51. ;------------------------------------------------------------------------
  52. ;------------------------------------------------------------------------
  53. .model small
  54.        ASSUME CS:kodas, DS:duomenys, SS:stekas
  55. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  56. stekas segment word stack 'STACK'
  57.        dw 400h dup (00)               ; stekas -> 2 Kb
  58. stekas ends
  59. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  60. duomenys segment para public 'DATA'
  61.    
  62.     pranesimas:
  63.        db 'Ivesk eilute'
  64.     naujaEilute:  
  65.        db 0Dh, 0Ah, '$'  ; tekstas ant ekrano
  66.     dar_pranesimas:
  67.        db 'Tu ivedei: $'
  68.    
  69.     rezultato_pranesimas:
  70.        db 'Pakeista eilute: $'
  71.    
  72.     pranesimas_3:
  73.       db 'Baitu 3,4,6 bitu suma: ', 0Dh, 0Ah, '$'
  74.  
  75.     tarpas:
  76.       db ' '
  77.  
  78.     pranesimas_4:
  79.       db 'Rezultatai: ', 0Dh, 0Ah, '$'
  80.  
  81.     buferisAtsakymui:
  82.     sk1  db  00
  83.     sk2  db  00
  84.     sk3  db  00
  85.     sk4  db  00      
  86.          db  0Dh, 0Ah, '$'  ; eilutes pabaiga
  87.  
  88.     pranesimas_5:
  89.       db 'Baitu, kurie atitinka salyga, numeriai ', 0Dh, 0Ah, '$'
  90.  
  91.     skc1 db 00
  92.     skc2 db 00
  93.    
  94.     buferisIvedimui:
  95.        db 80, 00, 100 dup ('*')    
  96. duomenys ends
  97. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  98. kodas segment para public 'CODE'
  99.     pradzia:
  100.  
  101.        mov ax,     seg duomenys                   ; "krauname" duomenu segmenta
  102.        mov ds,     ax
  103.        
  104.        mov ah,     09                             ; spausdinimo funkcijos numeris
  105.        mov dx,     offset pranesimas              ; isvedamojo teksto adresas
  106.        int 21h
  107.  
  108.        mov ah,     0Ah                            ; ivesties funkcija
  109.        mov dx,     offset buferisIvedimui         ; buferis
  110.        int 21h      
  111.  
  112.        mov ah,     09                             ; spausdinimo funkcijos numeris
  113.        mov dx,     offset naujaEilute             ; isvedamojo teksto adresas
  114.        int 21h
  115.  
  116.        mov bl,     byte ptr [buferisIvedimui + 1]     ; bl<-kiek buvo ivesta simboliu
  117.        xor bh,     bh                                 ; bh <- 0  
  118.        mov word ptr [bx + 3 + buferisIvedimui], 240Ah ; LF + '$' -> eilutes galas
  119.        
  120.        ; Isvedame ivesta eilute:
  121.        mov ah,     09                             ; spausdinimo funkcijos numeris
  122.        mov dx,     offset dar_pranesimas          ; isvedamojo teksto adresas
  123.        int 21h
  124.  
  125.        mov ah,     09                             ; spausdinimo funkcijos numeris
  126.        mov dx,     offset naujaEilute             ; isvedamojo teksto adresas
  127.        int 21h
  128.  
  129.        mov dx,     offset buferisIvedimui + 2
  130.        mov ah,     09
  131.        int 21h
  132.    
  133. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;A UZDUOTIS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  134.  
  135.        ; Keiciame 4-a baita su 9-u, o 5-a i 'X' (turima omenyje, kad DOS issaugojo bx !):
  136.    
  137.        mov al,     byte ptr[buferisIvedimui + 5]   ; al <- ketvirtas simbolis
  138.        mov cl,     byte ptr[buferisIvedimui + 10]  ; cl <- devintas simbolis
  139.        mov byte ptr[buferisIvedimui + 10], al
  140.        mov byte ptr[buferisIvedimui + 5], cl
  141.        mov bl, byte ptr[buferisIvedimui + 3]
  142.        mov byte ptr[buferisIvedimui + 3], 'X'      ; antras simbolis keiciamas 'X'
  143.        
  144.  
  145.        ; Isvedame pakeista eilute:
  146.        mov ah,     09                             ; spausdinimo funkcijos numeris
  147.        mov dx,     offset rezultato_pranesimas    ; isvedamojo teksto adresas
  148.        int 21h
  149.  
  150.        mov ah,     09                             ; spausdinimo funkcijos numeris
  151.        mov dx,     offset naujaEilute             ; isvedamojo teksto adresas
  152.        int 21h
  153.  
  154.        mov dx,     offset buferisIvedimui + 2
  155.        mov ah,     09
  156.        int 21h
  157.  
  158.        mov ah,     09                             ; spausdinimo funkcijos numeris
  159.        mov dx,     offset naujaEilute             ; isvedamojo teksto adresas
  160.        int 21h
  161.    
  162.     ;atkeiciu burefio reiksmes
  163.        mov al,     byte ptr[buferisIvedimui + 5]   ; al <- ketvirtas simbolis
  164.        mov cl,     byte ptr[buferisIvedimui + 10]  ; cl <- devintas simbolis
  165.        mov byte ptr[buferisIvedimui + 10], al
  166.        mov byte ptr[buferisIvedimui + 5], cl
  167.        mov byte ptr[buferisIvedimui + 3], bl      ; antras simbolis atkeiciamas is 'X'
  168.  
  169. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  170. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;B UZDUOTIS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  171.        
  172.  
  173.        spausdinkEilute pranesimas_3                    
  174.        spausdinkEilute naujaEilute
  175.  
  176.        
  177.     mov si, 0000
  178.  
  179.  
  180. ciklas:
  181.     mov bx, 0000
  182.     mov ax, 0000
  183.     mov cx, 0000
  184.     spausdinkSimboli [buferisIvedimui+si+2]
  185.     spausdinkSimboli tarpas
  186.     gaukNurodytaBaitoBita [buferisIvedimui+si+2], 3    ;randa 3 bita
  187.     mov bl, al
  188.     mov al, 00
  189.         gaukNurodytaBaitoBita [buferisIvedimui+si+2], 4
  190.     add bl, al                    ;sudedame 3 bita su 4 bitu
  191.     mov al, 00
  192.     gaukNurodytaBaitoBita [buferisIvedimui+si+2], 6
  193.     add bl, al                    ;sudedame 3,4 su 6 bitu
  194.     add bl, 30h                    ;kad isspausdintu skaitmeni
  195.     mov al, 00
  196.    
  197.     mov dl, bl                    ;spausdinimo funkcija
  198.     mov ah, 02  
  199.        int 21h
  200.  
  201.         spausdinkEilute naujaEilute                    
  202.         inc si                                          ;kito baito poslinkis
  203.  
  204.     mov ch, 00
  205.     mov cl, byte ptr[buferisIvedimui+1]
  206.     cmp si, cx                    ;lyginame ar reikia dar kartoti cikla
  207.        jne ciklas                    ;kartojame cikla jei si ir cx nevienodi
  208.  
  209. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  210. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;C UZDUOTIS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  211.  
  212.        spausdinkEilute pranesimas_4                    
  213.        spausdinkEilute naujaEilute
  214.  
  215.  
  216.      
  217.        mov si, 0000                                   ; pirmo baito poslinkis nuo buferio pradzios
  218.  
  219.  loopas:
  220.     spausdinkSimboli [buferisIvedimui+si+2]
  221.     spausdinkSimboli tarpas
  222.     mov dx, 0000
  223.     mov al, byte ptr[buferisIvedimui+si+2]
  224.     xor ah, ah    
  225.     mov bx, word ptr 20h
  226.     div bx
  227.     add ax, 1500h
  228.  
  229.    
  230.       ;;;;;;;;;;;;;SPAUSDINIMAS;;;;;;;;;;;;;;;;;;;;;
  231.     mov dx,     0000
  232.         mov bx,     word ptr 10
  233.         div bx                             ; dx <- AX mod 10, ax <- AX div 10
  234.  
  235.        ; Konvertuojame i ASCII ir saugojame paskutini skaitmeni:      
  236.        add dl, '0'
  237.        mov byte ptr sk4,  dl
  238.        
  239.  
  240.        ; Vel daliname is 10:
  241.        mov dx,     0000
  242.        div bx
  243.  
  244.        ; Konvertuojame i ASCII ir saugojame antra skaitmeni:      
  245.        add dl, '0'    
  246.        mov byte ptr sk3,  dl
  247.  
  248.        ; Vel daliname is 10:
  249.        mov dx,     0000
  250.        div bx
  251.  
  252.        ; Konvertuojame i ASCII ir saugojame antra skaitmeni:      
  253.        add dl, '0'    
  254.        mov byte ptr sk2,  dl
  255.  
  256.        ; Vel daliname is 10:
  257.        mov dx,     0000
  258.        div bx
  259.  
  260.        ; Konvertuojame i ASCII ir saugojame antra skaitmeni:      
  261.        add dl, '0'    
  262.        mov byte ptr sk1,  dl
  263.        
  264.        ; Isvedame atsakyma:
  265.        mov dx,     offset buferisAtsakymui
  266.        mov ah,     09
  267.        int 21h
  268.    ;;;;;;;;;;;;;;BAIGESI;;;;;;;;;;;;;;;;;;;;
  269.  
  270.         spausdinkEilute naujaEilute                    
  271.         inc si  
  272.  
  273.     mov ch, 00
  274.     mov cl, byte ptr[buferisIvedimui+1]
  275.     cmp si, cx                    ;lyginame ar reikia dar kartoti cikla
  276.        jne loopas                    ;kartojame cikla jei si ir cx nevienodi
  277.  
  278. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  279. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;D UZDUOTIS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  280.  
  281.  
  282. spausdinkEilute pranesimas_5                    
  283.        spausdinkEilute naujaEilute
  284.  
  285.        
  286.        
  287.     mov si, 0000
  288.  
  289.  
  290. cikliukas:
  291.     mov bx, 0005
  292.     mov ax, 0000
  293.     mov dx, 0000
  294.     spausdinkSimboli [buferisIvedimui+si+2]
  295.     spausdinkSimboli tarpas
  296.     mov dx, '$$'
  297.     push dx
  298.     mov dx, 0000
  299.  
  300.     mov ah, 00
  301.     mov al, byte ptr [buferisIvedimui+si+2]
  302.   nenulis:
  303.     mov dx, 0000    
  304.     div bx
  305.  
  306.     push dx
  307.  
  308.     cmp al, 00
  309.     jne nenulis
  310.  
  311.     mov ax, 0001
  312.   popinimas:
  313.     pop dx
  314.     cmp dx, '$$'
  315.  
  316.     je lyginu
  317.    
  318.     mov bl, dl
  319. push ax
  320. add dl, '0'
  321. mov ah, 02
  322. int 21h    
  323. pop ax
  324.  
  325.     mul bl
  326.  
  327.     mov dx, 0000
  328.     jmp popinimas
  329.   lyginu:
  330.  
  331.     mov cx, 0006
  332.     cmp ax, cx       ;jei skaicius 16-aineje sistemoje yra didesnis uz 6, tai ir 8-aineje bus toks
  333.     ja nrspausdinimas
  334.     jmp toliau
  335. ciklas1:
  336. jmp cikliukas
  337.    nrspausdinimas:
  338.     mov bl, 09
  339.     mov cx, si
  340.     inc cl
  341.     cmp cl, bl
  342.     ja dalinu
  343.     jmp spausdinu
  344.     spausdinu:
  345.     add cl, '0'
  346.     spausdinkSimboli tarpas
  347.     spausdinkSimboli cl
  348.     jmp toliau
  349.     dalinu:
  350.     mov ax, cx
  351.     mov dx, 0000
  352.         mov bx, word ptr 10
  353.         div bx                             ; dx <- AX mod 10, ax <- AX div 10
  354.         add dl, '0'
  355.         mov byte ptr skc2,  dl
  356.        
  357.         mov dx,     0000
  358.         div bx    
  359.         add dl, '0'
  360.     mov byte ptr skc1, dl  
  361.     spausdinkSimboli skc1
  362.     spausdinkSimboli skc2
  363.    toliau:
  364.     spausdinkEilute naujaEilute                    
  365.         inc si                                          ;kito baito poslinkis
  366.  
  367.     mov ch, 00
  368.     mov cl, byte ptr[buferisIvedimui+1]
  369.     cmp si, cx                    ;lyginame ar reikia dar kartoti cikla
  370.        jne ciklas1                    ;kartojame cikla jei si ir cx nevienodi
  371.  
  372.  
  373.  
  374.        mov ah,     4ch                            ; baigimo funkcijos numeris
  375.        int 21h
  376. kodas  ends
  377.     end pradzia
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement