ahoj, vsimni si ze se ti opakuje dvakrat nasledujici (a je tam i prave chyba):
mov pomax, al
na tom druhem miste volani teto instrukce uz mas v registru AX uplne jine hodnoty dane sluzbou vypis znak - DOSu, si vsimni ze nastavujes AX aby se tato sluzba zavolala, proto si hodnotu nacteneho znaku prepises a nenavratne smazes... radek jsem vyradil, pak tam mas radek ktery vraci z pomax do -> AL tak ten toho moc nenadela, protoze s registrem AL nijak ve smyslu jeho primeho testovani nenakladas! Ale ta instrukce sama o sobe nic nezkazi (nechal jsem ji tam)
a DRUHA chyba
cmp dl, '$'
jz Nezhoda
chces zjistit jestli jsi na konci smycky a na pozici $, v okamziku kdy je to splneno a DL=$ (jz) skoncis. Kdyz tam ale nechas sve chybne jnz tak skoncis hned na zacatku, smycka se provede jen 1. Podminku jsi mel proste naopak.
spravny zdrojak jsem si prelozil a otestoval a bude zhruba:
.MODEL small
.STACK 100h
.386
.DATA
Retazec DB '123456$'
Ano DB 'Zhoda, znak sa tam nachadza$'
Nie DB 'Nezhoda, znak sa tam nenachadza$'
pomax DB (?)
.CODE
Nacitanie PROC
Zaciatok:
pusha
mov ah, 1 ;znak je c AL
int 21h
mov pomax, al
mov dl, 0Ah ;enter
mov ah,2
int 21h
; mov pomax, al
popa
mov al,pomax
ret
Nacitanie ENDP
Vypis PROC
Start:
pusha
mov di, 0
Hladanie:
mov dl, [Retazec+di]
cmp dl, pomax
jz Zhoda
cmp dl, '$'
jz Nezhoda
inc di
jmp Hladanie
Zhoda:
mov dx, offset Ano
mov ah, 9
int 21h
jmp Koniec
Nezhoda:
mov dx, offset Nie
mov ah, 9
int 21h
jmp Koniec
Koniec:
popa
ret
Vypis ENDP
Zac:
mov ax, @data
mov ds, ax
CALL Nacitanie
CALL Vypis
Koniec2:
mov ax, 4C00h
int 21h
END Zac