Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ; Kompiliavimas: tasm -zi ivesk.asm
- ; tlink /v ivesk
- ; Derinimas: td ivesk
- ;
- ;
- ; Uzduotis: A.Programa sukeičia 4-a ir 9-a simbolius vietomis, o 2-a padaro ‘X’
- ; B.Suranda kiekvieno ivesto baito 3,4 ir 6 bitu suma ir ja isspausdina
- ;C.Spausdina stulpeliu ivestus baitus padalintus sveikai is 20 ir prie rezultato pridejus 1500, desimtaineje
- ;D.Programa spausdina stulpeliu tų baitų numerius, kurių reikšmės skaitmenų sandauga 8-tainėje
- ; sistemoje yra didesnė už 6
- ;
- ;----------------------------------MAKROSAI--------------------------------------
- spausdinkEilute macro eilute
- ; Makrosas keicia AX, DX !!!
- mov ah, 09
- mov dx, offset eilute
- int 21h
- endm
- ;------------------------------------------------------------------------
- iveskEilute macro buferis
- ; Makrosas keicia AX, DX !!!
- mov ah, 0Ah
- mov dx, offset buferis ; pirmas argumentas - buferio adresas
- int 21h
- endm
- ;------------------------------------------------------------------------
- spausdinkSimboli macro simbolis
- ; Makrosas keicia AX, DX !!!
- ; Naudojami DL ir AL
- mov dl, byte ptr simbolis ; simbolis, kuri spausdinsime
- mov ah, 02 ; "antra" dos int 21h funkcija
- int 21h
- endm
- ;------------------------------------------------------------------------
- gaukNurodytaBaitoBita macro baitas, kelintas
- ; Makrosas keicia AX, CX !!!
- ; Pirmas argumentas: baitas (adresas/reiksme/konstanta)
- ; Antras argumentas: kelinta bita norime suzinoti (bitai skaiciuojami nuo nulinio - jauniausio)
- ; Rezultas: al - nurodyto bito reiksme
- mov cl, kelintas ; bito numeris
- mov al, byte ptr baitas ; krauname baita
- shr al, cl ; stumiame nurodyta bita i pradzia
- and al, 01 ; atmetame kitus bitus
- endm
- ;------------------------------------------------------------------------
- ;------------------------------------------------------------------------
- .model small
- ASSUME CS:kodas, DS:duomenys, SS:stekas
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- stekas segment word stack 'STACK'
- dw 400h dup (00) ; stekas -> 2 Kb
- stekas ends
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- duomenys segment para public 'DATA'
- pranesimas:
- db 'Ivesk eilute'
- naujaEilute:
- db 0Dh, 0Ah, '$' ; tekstas ant ekrano
- dar_pranesimas:
- db 'Tu ivedei: $'
- rezultato_pranesimas:
- db 'Pakeista eilute: $'
- pranesimas_3:
- db 'Baitu 3,4,6 bitu suma: ', 0Dh, 0Ah, '$'
- tarpas:
- db ' '
- pranesimas_4:
- db 'Rezultatai: ', 0Dh, 0Ah, '$'
- buferisAtsakymui:
- sk1 db 00
- sk2 db 00
- sk3 db 00
- sk4 db 00
- db 0Dh, 0Ah, '$' ; eilutes pabaiga
- pranesimas_5:
- db 'Baitu, kurie atitinka salyga, numeriai ', 0Dh, 0Ah, '$'
- skc1 db 00
- skc2 db 00
- buferisIvedimui:
- db 80, 00, 100 dup ('*')
- duomenys ends
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- kodas segment para public 'CODE'
- pradzia:
- mov ax, seg duomenys ; "krauname" duomenu segmenta
- mov ds, ax
- mov ah, 09 ; spausdinimo funkcijos numeris
- mov dx, offset pranesimas ; isvedamojo teksto adresas
- int 21h
- mov ah, 0Ah ; ivesties funkcija
- mov dx, offset buferisIvedimui ; buferis
- int 21h
- mov ah, 09 ; spausdinimo funkcijos numeris
- mov dx, offset naujaEilute ; isvedamojo teksto adresas
- int 21h
- mov bl, byte ptr [buferisIvedimui + 1] ; bl<-kiek buvo ivesta simboliu
- xor bh, bh ; bh <- 0
- mov word ptr [bx + 3 + buferisIvedimui], 240Ah ; LF + '$' -> eilutes galas
- ; Isvedame ivesta eilute:
- mov ah, 09 ; spausdinimo funkcijos numeris
- mov dx, offset dar_pranesimas ; isvedamojo teksto adresas
- int 21h
- mov ah, 09 ; spausdinimo funkcijos numeris
- mov dx, offset naujaEilute ; isvedamojo teksto adresas
- int 21h
- mov dx, offset buferisIvedimui + 2
- mov ah, 09
- int 21h
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;A UZDUOTIS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ; Keiciame 4-a baita su 9-u, o 5-a i 'X' (turima omenyje, kad DOS issaugojo bx !):
- mov al, byte ptr[buferisIvedimui + 5] ; al <- ketvirtas simbolis
- mov cl, byte ptr[buferisIvedimui + 10] ; cl <- devintas simbolis
- mov byte ptr[buferisIvedimui + 10], al
- mov byte ptr[buferisIvedimui + 5], cl
- mov bl, byte ptr[buferisIvedimui + 3]
- mov byte ptr[buferisIvedimui + 3], 'X' ; antras simbolis keiciamas 'X'
- ; Isvedame pakeista eilute:
- mov ah, 09 ; spausdinimo funkcijos numeris
- mov dx, offset rezultato_pranesimas ; isvedamojo teksto adresas
- int 21h
- mov ah, 09 ; spausdinimo funkcijos numeris
- mov dx, offset naujaEilute ; isvedamojo teksto adresas
- int 21h
- mov dx, offset buferisIvedimui + 2
- mov ah, 09
- int 21h
- mov ah, 09 ; spausdinimo funkcijos numeris
- mov dx, offset naujaEilute ; isvedamojo teksto adresas
- int 21h
- ;atkeiciu burefio reiksmes
- mov al, byte ptr[buferisIvedimui + 5] ; al <- ketvirtas simbolis
- mov cl, byte ptr[buferisIvedimui + 10] ; cl <- devintas simbolis
- mov byte ptr[buferisIvedimui + 10], al
- mov byte ptr[buferisIvedimui + 5], cl
- mov byte ptr[buferisIvedimui + 3], bl ; antras simbolis atkeiciamas is 'X'
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;B UZDUOTIS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- spausdinkEilute pranesimas_3
- spausdinkEilute naujaEilute
- mov si, 0000
- ciklas:
- mov bx, 0000
- mov ax, 0000
- mov cx, 0000
- spausdinkSimboli [buferisIvedimui+si+2]
- spausdinkSimboli tarpas
- gaukNurodytaBaitoBita [buferisIvedimui+si+2], 3 ;randa 3 bita
- mov bl, al
- mov al, 00
- gaukNurodytaBaitoBita [buferisIvedimui+si+2], 4
- add bl, al ;sudedame 3 bita su 4 bitu
- mov al, 00
- gaukNurodytaBaitoBita [buferisIvedimui+si+2], 6
- add bl, al ;sudedame 3,4 su 6 bitu
- add bl, 30h ;kad isspausdintu skaitmeni
- mov al, 00
- mov dl, bl ;spausdinimo funkcija
- mov ah, 02
- int 21h
- spausdinkEilute naujaEilute
- inc si ;kito baito poslinkis
- mov ch, 00
- mov cl, byte ptr[buferisIvedimui+1]
- cmp si, cx ;lyginame ar reikia dar kartoti cikla
- jne ciklas ;kartojame cikla jei si ir cx nevienodi
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;C UZDUOTIS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- spausdinkEilute pranesimas_4
- spausdinkEilute naujaEilute
- mov si, 0000 ; pirmo baito poslinkis nuo buferio pradzios
- loopas:
- spausdinkSimboli [buferisIvedimui+si+2]
- spausdinkSimboli tarpas
- mov dx, 0000
- mov al, byte ptr[buferisIvedimui+si+2]
- xor ah, ah
- mov bx, word ptr 20h
- div bx
- add ax, 1500h
- ;;;;;;;;;;;;;SPAUSDINIMAS;;;;;;;;;;;;;;;;;;;;;
- mov dx, 0000
- mov bx, word ptr 10
- div bx ; dx <- AX mod 10, ax <- AX div 10
- ; Konvertuojame i ASCII ir saugojame paskutini skaitmeni:
- add dl, '0'
- mov byte ptr sk4, dl
- ; Vel daliname is 10:
- mov dx, 0000
- div bx
- ; Konvertuojame i ASCII ir saugojame antra skaitmeni:
- add dl, '0'
- mov byte ptr sk3, dl
- ; Vel daliname is 10:
- mov dx, 0000
- div bx
- ; Konvertuojame i ASCII ir saugojame antra skaitmeni:
- add dl, '0'
- mov byte ptr sk2, dl
- ; Vel daliname is 10:
- mov dx, 0000
- div bx
- ; Konvertuojame i ASCII ir saugojame antra skaitmeni:
- add dl, '0'
- mov byte ptr sk1, dl
- ; Isvedame atsakyma:
- mov dx, offset buferisAtsakymui
- mov ah, 09
- int 21h
- ;;;;;;;;;;;;;;BAIGESI;;;;;;;;;;;;;;;;;;;;
- spausdinkEilute naujaEilute
- inc si
- mov ch, 00
- mov cl, byte ptr[buferisIvedimui+1]
- cmp si, cx ;lyginame ar reikia dar kartoti cikla
- jne loopas ;kartojame cikla jei si ir cx nevienodi
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;D UZDUOTIS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- spausdinkEilute pranesimas_5
- spausdinkEilute naujaEilute
- mov si, 0000
- cikliukas:
- mov bx, 0005
- mov ax, 0000
- mov dx, 0000
- spausdinkSimboli [buferisIvedimui+si+2]
- spausdinkSimboli tarpas
- mov dx, '$$'
- push dx
- mov dx, 0000
- mov ah, 00
- mov al, byte ptr [buferisIvedimui+si+2]
- nenulis:
- mov dx, 0000
- div bx
- push dx
- cmp al, 00
- jne nenulis
- mov ax, 0001
- popinimas:
- pop dx
- cmp dx, '$$'
- je lyginu
- mov bl, dl
- push ax
- add dl, '0'
- mov ah, 02
- int 21h
- pop ax
- mul bl
- mov dx, 0000
- jmp popinimas
- lyginu:
- mov cx, 0006
- cmp ax, cx ;jei skaicius 16-aineje sistemoje yra didesnis uz 6, tai ir 8-aineje bus toks
- ja nrspausdinimas
- jmp toliau
- ciklas1:
- jmp cikliukas
- nrspausdinimas:
- mov bl, 09
- mov cx, si
- inc cl
- cmp cl, bl
- ja dalinu
- jmp spausdinu
- spausdinu:
- add cl, '0'
- spausdinkSimboli tarpas
- spausdinkSimboli cl
- jmp toliau
- dalinu:
- mov ax, cx
- mov dx, 0000
- mov bx, word ptr 10
- div bx ; dx <- AX mod 10, ax <- AX div 10
- add dl, '0'
- mov byte ptr skc2, dl
- mov dx, 0000
- div bx
- add dl, '0'
- mov byte ptr skc1, dl
- spausdinkSimboli skc1
- spausdinkSimboli skc2
- toliau:
- spausdinkEilute naujaEilute
- inc si ;kito baito poslinkis
- mov ch, 00
- mov cl, byte ptr[buferisIvedimui+1]
- cmp si, cx ;lyginame ar reikia dar kartoti cikla
- jne ciklas1 ;kartojame cikla jei si ir cx nevienodi
- mov ah, 4ch ; baigimo funkcijos numeris
- int 21h
- kodas ends
- end pradzia
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement