Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- DATA SEGMENT ;zaglavlje data segmenta OVO MI JE PALO TEK KROZ POLA KOMENTARISANJA k[B] - KARAKTER STRINGA B ISTO ZA A
- poruka1 db 'Unesite prvi string: $' ;
- poruka2 db 'Unesite drugi string: $' ;
- stringA db ' $' ;definisanje stringa A DODATAK |OVA CUDA SU BILA ' 'x15 UMESTO x20... X PUTA SAM MENJAO
- stringB db ' $' ;-||- -||- B DODATAK/KOD PRE NEGO STO SAM SHVATIO STA SE DESAVA...
- nemaPojava db 'Nema pojava stringa B u stringu A$' ;Ako nema pojava
- LENb dw 0 ;Duzina stringa B
- DATA ENDS ;kraj ds
- ;
- STEK SEGMENT STACK ;\
- dw 128 dup(0) ; |> definisanje stek segmenta
- STEK ENDS ;/
- ;
- WRITESTRING MACRO S ;\
- push ax ; \
- push dx ; \
- mov dx, offset S ; \
- mov ah, 09 ; |> makro za pisanje stringa
- int 21h ; /
- pop dx ; /
- pop ax ; /
- ENDM ;/
- ;
- KRAJ MACRO ;\
- mov ax, 4c02h ; \
- int 21h ; |> makro za kraj programa
- ENDM ; /
- ;/
- CODE SEGMENT ;zaglavnje code seg
- novired proc ;procedura za novi red
- push ax ;
- push bx ;
- push cx ;
- push dx ;
- mov ah, 03 ;
- mov bh, 0 ;
- int 10h ;
- inc dh ;
- mov dl, 0 ;
- mov ah, 02 ;
- int 10h ;
- pop dx ;
- pop cx ;
- pop bx ;
- pop ax ;
- ret ;
- novired endp ;kraj iste
- ;
- readstring proc ;procedura za citanje stringa
- push ax ;
- push bx ;
- push cx ;
- push dx ;
- push si ;
- mov bp, sp ;
- mov dx, [bp+12] ;
- mov bx, dx ;
- mov ax, [bp+14] ;
- mov byte [bx], al ;
- mov ah, 0Ah ;
- int 21h ;
- mov si, dx ;
- mov cl, [si+1] ;
- mov ch, 0 ;
- KOPIRAJ: ;
- mov al, [si+2] ;
- mov [si], al ;
- inc si ;
- LOOP KOPIRAJ ;
- mov [si], '$' ;
- pop si ;
- pop dx ;
- pop cx ;
- pop bx ;
- pop ax ;
- ret 4 ;
- readstring endp ;kraj iste
- ;
- START: ;start (zbog linkera)
- ASSUME CS:code, SS:stek ;postavljanje
- mov ax, data ;segmentnih
- mov ds, ax ;registara
- call novired ;
- writestring poruka1 ;
- push 20 ;na stack stavljamo max duzinu stringa a
- push offset stringA ;na stack stavljamo offset adresu -||- a
- call readstring ;
- call novired ;
- writestring poruka2 ;isto
- push 20 ;
- push offset stringB ;
- call readstring ;
- call novired ;
- xor si, si ;nuliramo si
- ;
- nadjiLENb: ;trazimo duzinu stringa b
- mov al, stringB[si] ;
- cmp al, '$' ;
- je cont ;
- inc LENb ;
- inc si ;
- jmp nadjiLENb ;
- ;
- cont: ;pomocna labela
- xor si, si ;\
- xor di, di ; \nuliramo si i di
- mov ah, stringB[si] ;stavljamo prvi karakter stringa b u ah
- ;
- petlja: ;glavna petlja
- mov al, stringA[si] ;stavljamo karakter iz stringa a na poziciji si u al
- cmp al, '$' ;poredimo ga sa $
- je krajPrograma ;ako jeste $ zavrsavamo
- cmp al, ah ;poredimo prvi karakter (k ubuduce) stringa b sa k na poziciji si stringa a
- je petlja2 ;ako su isti idemo na drugu petlju
- inc si ;povecavamo si
- jmp petlja ;vrtimo petlju
- ;
- petlja2: ;druga petlja
- inc di ;povecavamo di za 1
- inc si ;povecavamo si za 1
- mov al, stringA[si] ;stavljamo k iz A na poziciji si u al
- mov ah, stringB[di] ;-||--||--||-B-||--||-di-||-ah
- cmp ah, '$' ;ako je k[B] = $
- je predBrisi ;idi na pomocni za brisanje
- cmp al, '$' ;ako je k[A] = $
- je krajPrograma ;obustavi
- cmp al, ah ;ako su jednaki
- je petlja2 ;vrti
- ;
- predPetlja: ;pred vracanje u petlju pomocna labela
- xor di, di ;nuliraj di
- mov ah, stringB[di] ;stavi prvi k[B] u ah
- jmp petlja ;nazad na petlju
- ;
- predBrisi: ;pomocni za brisanje
- xor di, di ;nuliraj di
- mov bx, LENb ;u bx stavi duzinu B
- sub si, bx ;oduzmi od si duzinu bx
- ;
- brisi: ;brisanje
- mov dx, 1 ;ovo sluzi za kraj, ako program dodje ovde znaci da imamo bar jedno ponavljanje stringa B u stringu A
- mov al, stringA[si+bx] ;stavi k[A] na si+bx (pogledaj iznad) u al
- mov stringA[si], al ;stavi ga iz al u k[A] na si
- inc si ;
- inc di ;
- cmp al, '$' ;
- je cont2 ;ako je taj karakter $ idi na pomocni 2
- jmp brisi ;ako nije loop brisi
- cont2: ;pomocni 2
- sub si, di ;oduzimamo di od si
- jmp predPetlja ;skaci na pred petlju
- ;
- krajPrograma: ;kraaaj
- cmp dx, 1 ;ako smo obisli 'brisi' labelu
- je ima ;idi na 'ima' labelu
- writestring nemaPojava ;ako ne skocimo, pisi navedeno
- jmp nema ;skoci na 'nema' labelu
- ima: ;'ima' labela
- writestring stringA ;ispisi modifikovano A
- nema: ;'nema' labela
- kraj ;kraaaaaj (stvarno ovaj put)
- ;
- CODE ENDS ;
- END START ;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement