Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ;
- ; suskaiciuoti / (a*a)+x , kai |x| < c+a
- ; y = | (2*b)-a , kai |x| = c+a
- ; \ ]c+(5*b) / |x|-(c+a)[ , kai |x| > c+a
- ; skaiciai su zenklu
- ; Duomenys a - b, b - w, c - b, x - b, y - w
- stekas SEGMENT STACK
- DB 256 DUP(0)
- stekas ENDS
- duom SEGMENT
- a DB 3 ; 10000; perpildymo situacijai
- b DW -2
- c DB 7
- x DB -2, -1, 6, 9, 10, 11, 12, 22
- kiek = ($-x)
- y DW kiek dup(0AAh)
- isvb DB 'x=',6 dup (?), ' y=',6 dup (?), 0Dh, 0Ah, '$'
- perp DB 'Perpildymas', 0Dh, 0Ah, '$'
- daln DB 'Dalyba is nulio', 0Dh, 0Ah, '$'
- netb DB 'Netelpa i baita', 0Dh, 0Ah, '$'
- spausk DB 'Skaiciavimas baigtas, spausk bet kuri klavisa,', 0Dh, 0Ah, '$'
- duom ENDS
- prog SEGMENT
- assume ss:stekas, ds:duom, cs:prog
- pr: MOV ax, duom
- MOV ds, ax
- XOR si, si ; (suma mod 2) si = 0
- XOR di, di ; di = 0
- c_pr: MOV cx, kiek
- JCXZ pab
- cikl:
- MOV al, c
- CBW
- MOV dl, a
- CBW
- ADD ax, dx
- XCHG ax, bx
- MOV al, x[si]
- CBW
- CMP ax, 0
- JG mod
- NEG ax
- mod:
- CMP ax, bx
- JE f2
- JG f3
- f1: MOV al, a
- IMUL a
- JO kl1 ; sandauga netilpo i ax
- XCHG ax, dx
- MOV al, x[si]
- CBW
- ADD ax, dx
- JMP re
- f2: MOV al, 2
- CBW
- IMUL b ; 2*b
- JO kl1 ; sandauga netilpo i ax
- SUB al, a ;2b-a
- JO kl1
- JMP re
- f3: MOV ax, 5
- IMUL b ; 5*b
- JO kl1 ; sandauga netilpo i ax
- xchg ax, bx
- MOV al, c
- cbw
- ADD bx, ax
- MOV al, c
- ADD al, a
- cbw
- xchg ax, dx
- mov al, x[si]
- cbw
- CMP ax, 0
- JG mod2
- NEG ax
- mod2:
- sub ax, dx
- cmp ax, 0
- je kl2
- xchg ax, bx
- cwd
- idiv bx
- JMP re
- maziau: SUB ax, dx
- JO kl1
- re:
- CMP al, 0
- JGE teigr
- CMP ah, 0FFh ; jei neig. rezultatas
- JE ger
- JMP kl3
- teigr: CMP ah, 0 ;jei teig. rezultatas
- JE ger
- JMP kl3
- ger:
- MOV y[di], ax
- INC si
- ;INC si
- INC di
- LOOP cikl
- pab:
- ;rezultatu isvedimas i ekrana
- ;============================
- XOR si, si
- XOR di, di
- MOV cx, kiek
- JCXZ is_pab
- is_cikl:
- MOV al, x[si] ; cia ; isvedamas skaicius x yra ax reg.
- CBW
- PUSH ax ; cia
- MOV bx, offset isvb+2
- PUSH bx
- CALL binasc
- MOV ax, y[di]
- CBW ; isvedamas skaicius y yra ax reg.
- PUSH ax
- MOV bx, offset isvb+11
- PUSH bx
- CALL binasc
- MOV dx, offset isvb
- MOV ah, 9h
- INT 21h
- ;============================
- INC si
- ;INC si
- INC di
- LOOP is_cikl
- is_pab:
- ;===== PAUZE ===================
- ;===== paspausti bet kuri klavisa ===
- LEA dx, spausk
- MOV ah, 9
- INT 21h
- MOV ah, 0
- INT 16h
- ;============================
- MOV ah, 4Ch ; programos pabaiga, grizti i OS
- INT 21h
- ;============================
- kl1: LEA dx, perp
- MOV ah, 9
- INT 21h
- XOR al, al
- JMP ger
- kl2: LEA dx, daln
- MOV ah, 9
- INT 21h
- XOR al, al
- JMP ger
- kl3: LEA dx, netb
- MOV ah, 9
- INT 21h
- XOR al, al
- JMP ger
- ; skaiciu vercia i desimtaine sist. ir issaugo
- ; ASCII kode. Parametrai perduodami per steka
- ; Pirmasis parametras ([bp+6])- verciamas skaicius
- ; Antrasis parametras ([bp+4])- vieta rezultatui
- binasc PROC NEAR
- PUSH bp
- MOV bp, sp
- ; naudojamu registru issaugojimas
- PUSHA
- ; rezultato eilute uzpildome tarpais
- MOV cx, 6
- MOV bx, [bp+4]
- tarp: MOV byte ptr[bx], ' '
- INC bx
- LOOP tarp
- ; skaicius paruosiamas dalybai is 10
- MOV ax, [bp+6]
- MOV si, 10
- CMP ax, 0
- JGE val
- ; verciamas skaicius yra neigiamas
- NEG ax
- val: XOR dx, dx
- DIV si
- ; gauta liekana verciame i ASCII koda
- ADD dx, '0' ; galima--> ADD dx, 30h
- ; irasome skaitmeni i eilutes pabaiga
- DEC bx
- MOV [bx], dl
- ; skaiciuojame pervestu simboliu kieki
- INC cx
- ; ar dar reikia kartoti dalyba?
- CMP ax, 0
- JNZ val
- ; gautas rezultatas. Uzrasome zenkla
- ; pop ax
- MOV ax, [bp+6]
- CMP ax,0
- JNS teig
- ; buvo neigiamas skaicius, uzrasome -
- DEC bx
- MOV byte ptr[bx], '-'
- INC cx
- JMP vepab
- ; buvo teigiamas skaicius, uzrasau +
- teig: DEC bx
- MOV byte ptr[bx], '+'
- INC cx
- vepab:
- POPA
- POP bp
- RET
- binasc ENDP
- prog ENDS
- END pr
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement