;kód szegmens kod segment para public 'code' assume cs:kod,ds:adat,ss:verem,es:nothing start: push ds ;visszatérés segmensének mentése xor ax, ax ;offset mindig 0 push ax ;visszatérés offsetjének mentése mov ax, adat ;mert nincsen 'mov ds, adat' mov ds, ax ;főprogram kezdődik mov ax, offset str1 push ax mov ax, offset str2 push ax call strstr add sp, 4 mov si, ax cmp byte ptr [si], 0 jne nemresze call strkiir jmp vege nemresze: mov si, offset nincsstr call strkiir ;főprogram vége vege: retf ;visszatérés a hívó programhoz ;strstr eljárás: Stringet keres egy másik stringben. ;Paraméterek: Két paramétere van, melyeket a veremben keres: s1 és s2. ;s1 kerul először a verembe (tehát ő van mélyebben), s2 a másodikként ;átadott paraméter , tehát ő van magasabban. ;Működés: s2 első előfordulását keresi meg s1-ben. ;Visszatérési érték: AX-be helyezi az első előfordulás offsetjét ha ;megtalálható s2 s1-ben. Egyébként AX s1-et záro nulla karakterre mutat. strstr proc push bp ;bp mentése mov bp, sp ;bp = si push si push di mov di, [bp+4];s2 offsetje mov si, [bp+6];s1 kov: cmp byte ptr [si], 0 je strstrvege call startswith cmp ax, 1 je strstrvege inc si jmp kov strstrvege: mov ax, si pop di pop si pop bp ret strstr endp ;ellenőrzi, hogy az si által mutatott string eleje megegyezik-e a di által ;mutatott stringel. ;Visszatérési érték: ax = 1 ha megegyezik, ax = 0 ha nem. startswith proc push bx push cx mov cx, 0 ;eredmeny xor bx, bx ;index sw: mov al, [di+bx]; cmp al, 0 ;ha di vége je swvege1 ;akkor készen vagyunk cmp byte ptr[si+bx], 0 ;ha si vege je swvege2 ;akkor is készen vagyunk cmp al, [si+bx]; hasonlítsuk ossze a ket betűt jne swvege2 ;ha különböznek akkor szintén kilép inc bx ;indexet noveljük jmp sw ;kov ketu swvege1: mov cx, 1 swvege2: mov ax, cx ;vegeredmény ax-be pop cx pop bx ret startswith endp ;eljárás ami kiír egyetlen betűt. a betű kódját al-ben ;várja betukiir proc ;al ben a kiirandó betű mov ah, 14 ;BIOS rutin paramétere int 10h ;10h megszakítás hívása ret ;visszatérés betukiir endp ;eljárás ami kiír egy 0-val záródó karakterláncot ;a string elejét si mutatja strkiir proc push si kovkiir: mov al, [si] ;következő betű cmp al, 0 ;0 jelzi a str végét je strvege ;ha elértünk a végére ugrunk call betukiir ;egy betű kiirása inc si ;mutató a következő betűre jmp kovkiir ;ugrás strvege: pop si ret ;eljárás vége strkiir endp kod ends ;adat szegmens adat segment para public 'data' str1 db "Hosszu string.", 0 str2 db "str", 0 nincsstr db "nem reszstringje egyik a masiknak", 0 adat ends ;verem szegmens verem segment para stack dw 256 dup (0) ;helyfoglalás verem ends end start