Witam
mam problem przy zadaniu
Program ma zawierac procedure dokonujaca porównania 2 ciagów znaków .oba ciagi zakńczone sa $.procedura otrzymuje offset przeszukiwanego stringa w rejestrze dx i szukanego w rejestrze bx. index pierwszego wystapienia stringa bx w dx wprzyoadku kiedy bx jest wiekszy od dx procedura zwraca -1
mam program lecz zawsze mi zwraca 36
sts segment 'stack' stack
db 512 dup(0)
sts endsdane segment
napis1 db 100h DUP (?)
napis2 db 100h DUP (?)dlugosc1 dw 0
dlugosc2 dw 0licznik dw 0
indeks1 dw 0
indeks2 dw 0tekst1 db "Podaj pierwszy ciag znakow", 0dh,0ah, "$"
tekst2 db 0dh,0ah, "Podaj drugi ciag znakow", 0dh,0ah, "$"
tekst3 db 0dh,0ah, "nr indeksu:", 0dh,0ah, "$"
tekst4 db 0dh,0ah, 0dh,0ah, "nacisnij dowolny klawisz...$"ends
prog segment
assume cs:prog,ds:dane,ss:sts
P486Nodczytaj1:
mov ah,0 int 16h cmp al,'$' je koniec1 cmp al,'A' jl odczytaj1 cmp al,'Z' jle wczytaj1 cmp al,'a' jl odczytaj1 cmp al,'z' jg odczytaj1
wczytaj1:
mov si,licznik
add [napis1+si],aladd dlugosc1,1 mov ah,0eh int 10h add licznik,1
powtorz1:
jmp odczytaj1koniec1:
mov si,licznik
add [napis1+si],alRET
odczytaj2:
mov ah,0 int 16h cmp al,'$' je koniec2 cmp al,'A' jl odczytaj2 cmp al,'Z' jle wczytaj2 cmp al,'a' jl odczytaj2 cmp al,'z' jg odczytaj2
wczytaj2:
mov si,licznik
add [napis2+si],aladd dlugosc2,1 mov ah,0eh int 10h add licznik,1
powtorz2:
jmp odczytaj2koniec2:
mov si,licznik
add [napis2+si],al
RETsprawdz:
mov ax,dlugosc1
cmp dlugosc2,ax
jb sprawdza
mov al,-1
jmp kon
sprawdza:
mov indeks1,0
mov indeks2,0
mov bp,dxmov cx,dlugosc1
petla:
mov si,indeks1mov al,ds:[bp+si] mov si,indeks2 cmp al,[bx+si] jne nierowne
rowne:
add indeks2,1
mov ax,indeks2
cmp ax,dlugosc2jne koniec_petli jmp koniec
nierowne:
mov indeks2,0
mov si,indeks2
cmp al,[bx+si]
je rownekoniec_petli:
add indeks1,1
loop petlakoniec:
mov ax,indeks1
sub ax,1
kon:
RETwyswietl:
mov ah,0
mov bl,10
div blmov dl,ah
add dl,30h
push dxmov ah,0
div bl
add ax,3030h
push ax
mov dl ,almov ah,2
int 21hpop ax
mov dl,ah
mov ah,2
int 21hpop dx
mov ah,2
int 21hRET
start:
mov ax,seg dane
mov ds,axmov ah,0 mov al,3 int 10h mov dx,offset tekst1 mov ah,09h
int 21h
mov licznik,0 call odczytaj1 mov dx,offset tekst2
mov ah,09h
int 21hmov licznik,0 call odczytaj2 mov dx,offset napis1 mov bx,offset napis2 call sprawdz mov dx,offset tekst3
mov ah,09h
int 21hcall wyswietl mov ah,0 int 16h
mov ah,4ch
int 21h
prog ends
end start