Advertisement
Guest User

Damn

a guest
Mar 30th, 2018
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. DATA SEGMENT                                             ;zaglavlje data segmenta OVO MI JE PALO TEK KROZ POLA KOMENTARISANJA k[B] - KARAKTER STRINGA B ISTO ZA A
  2.     poruka1 db 'Unesite prvi string: $'                  ;
  3.     poruka2 db 'Unesite drugi string: $'                 ;
  4.     stringA db '                    $'                   ;definisanje stringa A DODATAK |OVA CUDA SU BILA ' 'x15 UMESTO x20... X PUTA SAM MENJAO
  5.     stringB db '                    $'                   ;-||- -||- B           DODATAK/KOD PRE NEGO STO SAM SHVATIO STA SE DESAVA...
  6.     nemaPojava db 'Nema pojava stringa B u stringu A$'   ;Ako nema pojava
  7.     LENb dw 0                                            ;Duzina stringa B
  8. DATA ENDS                                                ;kraj ds
  9.                                                         ;
  10. STEK SEGMENT STACK                                       ;\
  11.     dw 128 dup(0)                                        ; |> definisanje stek segmenta
  12. STEK ENDS                                                ;/
  13.                                                         ;
  14. WRITESTRING MACRO S                                      ;\
  15.     push ax                                              ; \
  16.     push dx                                              ;  \
  17.     mov dx, offset S                                     ;   \
  18.     mov ah, 09                                           ;    |> makro za pisanje stringa
  19.     int 21h                                              ;   /
  20.     pop dx                                               ;  /
  21.     pop ax                                               ; /
  22. ENDM                                                     ;/
  23.                                                         ;
  24. KRAJ MACRO                                               ;\
  25.     mov ax, 4c02h                                        ; \
  26.     int 21h                                              ;  |> makro za kraj programa
  27. ENDM                                                     ; /
  28.                                                         ;/
  29. CODE SEGMENT                                             ;zaglavnje code seg
  30. novired proc                                             ;procedura za novi red
  31.     push ax                                              ;
  32.     push bx                                              ;
  33.     push cx                                              ;
  34.     push dx                                              ;
  35.     mov ah, 03                                           ;
  36.     mov bh, 0                                            ;
  37.     int 10h                                              ;
  38.     inc dh                                               ;
  39.     mov dl, 0                                            ;
  40.     mov ah, 02                                           ;
  41.     int 10h                                              ;
  42.     pop dx                                               ;
  43.     pop cx                                               ;
  44.     pop bx                                               ;
  45.     pop ax                                               ;
  46.     ret                                                  ;
  47. novired endp                                             ;kraj iste
  48.                                                         ;
  49. readstring proc                                          ;procedura za citanje stringa
  50.     push ax                                              ;
  51.     push bx                                              ;
  52.     push cx                                              ;
  53.     push dx                                              ;
  54.     push si                                              ;
  55.     mov bp, sp                                           ;
  56.     mov dx, [bp+12]                                      ;
  57.     mov bx, dx                                           ;
  58.     mov ax, [bp+14]                                      ;
  59.     mov byte [bx], al                                    ;
  60.     mov ah, 0Ah                                          ;
  61.     int 21h                                              ;
  62.     mov si, dx                                           ;
  63.     mov cl, [si+1]                                       ;
  64.     mov ch, 0                                            ;
  65.     KOPIRAJ:                                             ;
  66.         mov al, [si+2]                                   ;
  67.         mov [si], al                                     ;
  68.         inc si                                           ;
  69.     LOOP KOPIRAJ                                         ;
  70.     mov [si], '$'                                        ;
  71.     pop si                                               ;
  72.     pop dx                                               ;
  73.     pop cx                                               ;
  74.     pop bx                                               ;
  75.     pop ax                                               ;
  76.     ret 4                                                ;
  77. readstring endp                                          ;kraj iste
  78.                                                         ;
  79. START:                                                   ;start (zbog linkera)
  80.     ASSUME CS:code, SS:stek                              ;postavljanje
  81.     mov ax, data                                         ;segmentnih
  82.     mov ds, ax                                           ;registara
  83.     call novired                                         ;
  84.     writestring poruka1                                  ;
  85.     push 20                                              ;na stack stavljamo max duzinu stringa a
  86.     push offset stringA                                  ;na stack stavljamo offset adresu -||- a
  87.     call readstring                                      ;
  88.     call novired                                         ;
  89.     writestring poruka2                                  ;isto
  90.     push 20                                              ;
  91.     push offset stringB                                  ;
  92.     call readstring                                      ;
  93.     call novired                                         ;
  94.     xor si, si                                           ;nuliramo si
  95.                                                         ;
  96. nadjiLENb:                                               ;trazimo duzinu stringa b
  97.     mov al, stringB[si]                                  ;
  98.     cmp al, '$'                                          ;
  99.     je cont                                              ;
  100.     inc LENb                                             ;
  101.     inc si                                               ;
  102.     jmp nadjiLENb                                        ;
  103.                                                         ;
  104. cont:                                                    ;pomocna labela
  105.     xor si, si                                           ;\
  106.     xor di, di                                           ; \nuliramo si i di
  107.     mov ah, stringB[si]                                  ;stavljamo prvi karakter stringa b u ah
  108.                                                         ;
  109. petlja:                                                  ;glavna petlja
  110.     mov al, stringA[si]                                  ;stavljamo karakter iz stringa a na poziciji si u al
  111.     cmp al, '$'                                          ;poredimo ga sa $
  112.     je krajPrograma                                      ;ako jeste $ zavrsavamo
  113.     cmp al, ah                                           ;poredimo prvi karakter (k ubuduce) stringa b sa k na poziciji si stringa a
  114.     je petlja2                                           ;ako su isti idemo na drugu petlju
  115.     inc si                                               ;povecavamo si
  116.     jmp petlja                                           ;vrtimo petlju
  117.                                                         ;
  118. petlja2:                                                 ;druga petlja
  119.     inc di                                               ;povecavamo di za 1
  120.     inc si                                               ;povecavamo si za 1
  121.     mov al, stringA[si]                                  ;stavljamo k iz A na poziciji si u al
  122.     mov ah, stringB[di]                                  ;-||--||--||-B-||--||-di-||-ah
  123.     cmp ah, '$'                                          ;ako je k[B] = $
  124.     je predBrisi                                         ;idi na pomocni za brisanje
  125.     cmp al, '$'                                          ;ako je k[A] = $
  126.     je krajPrograma                                      ;obustavi
  127.     cmp al, ah                                           ;ako su jednaki
  128.     je petlja2                                           ;vrti
  129.                                                         ;
  130. predPetlja:                                              ;pred vracanje u petlju pomocna labela
  131.     xor di, di                                           ;nuliraj di
  132.     mov ah, stringB[di]                                  ;stavi prvi k[B] u ah
  133.     jmp petlja                                           ;nazad na petlju
  134.                                                         ;
  135. predBrisi:                                               ;pomocni za brisanje
  136.     xor di, di                                           ;nuliraj di
  137.     mov bx, LENb                                         ;u bx stavi duzinu B
  138.     sub si, bx                                           ;oduzmi od si duzinu bx
  139.                                                         ;
  140. brisi:                                                   ;brisanje
  141.     mov dx, 1                                            ;ovo sluzi za kraj, ako program dodje ovde znaci da imamo bar jedno ponavljanje stringa B u stringu A
  142.     mov al, stringA[si+bx]                               ;stavi k[A] na si+bx (pogledaj iznad) u al
  143.     mov stringA[si], al                                  ;stavi ga iz al u k[A] na si
  144.     inc si                                               ;
  145.     inc di                                               ;
  146.     cmp al, '$'                                          ;
  147.     je cont2                                             ;ako je taj karakter $ idi na pomocni 2
  148.     jmp brisi                                            ;ako nije loop brisi
  149. cont2:                                                   ;pomocni 2
  150.     sub si, di                                           ;oduzimamo di od si
  151.     jmp predPetlja                                       ;skaci na pred petlju
  152.                                                         ;
  153. krajPrograma:                                            ;kraaaj
  154.     cmp dx, 1                                            ;ako smo obisli 'brisi' labelu
  155.     je ima                                               ;idi na 'ima' labelu
  156.     writestring nemaPojava                               ;ako ne skocimo, pisi navedeno
  157.     jmp nema                                             ;skoci na 'nema' labelu
  158.     ima:                                                 ;'ima' labela
  159.         writestring stringA                              ;ispisi modifikovano A
  160.     nema:                                                ;'nema' labela
  161.         kraj                                             ;kraaaaaj (stvarno ovaj put)
  162.                                                         ;
  163. CODE ENDS                                                ;
  164. END START                                                ;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement