Hľadanie znaku v retazci – Assembler – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Hľadanie znaku v retazci – Assembler – Fórum – Programujte.comHľadanie znaku v retazci – Assembler – Fórum – Programujte.com

 

Lumen
~ Anonymní uživatel
5 příspěvků
14. 11. 2012   #1
-
0
-

 Mám v retazci hľadať znak podľa zadaný z klávesnice, ale stále mi to nejako nefunguje :( Niekto kto by mi pomohol kde mám chybu ? 

.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, '$'
		jnz 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
Nahlásit jako SPAM
IP: 158.193.102.–
zlz
~ Anonymní uživatel
634 příspěvků
15. 11. 2012   #2
-
0
-

   

cmp dl, pomax
jz  Zhoda     ; znak nalezen
cmp dl, '$'
jz  Nezhoda   ; konec retezce
Nahlásit jako SPAM
IP: 80.188.216.–
Lumen
~ Anonymní uživatel
5 příspěvků
15. 11. 2012   #3
-
0
-

#2 zlz
Jo jo to som opravil hneď po tom ako som to tu napísal :) mi to udrelo do očí. samozrejme problém je niekde inde :) ten enter v procedure prvej robil problém. 

Nahlásit jako SPAM
IP: 158.193.102.–
illioner0
Stálý člen
17. 11. 2012   #4
-
0
-

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
Nahlásit jako SPAM
IP: 90.178.107.–
Nechápu softwarové firmy, ktere utrácejí za čim dál těžkopádnější DRM ochranu!! Vidět kolem snahu o free2play model je jako příjemné připomenutí časů shareware (jen ten Microsoft stále nic nepochopil)
illioner0
Stálý člen
17. 11. 2012   #5
-
0
-

Pozn.

respektive sluzba vypis znaku sama ten registr AL prepise, musel bys mit pusha a popa tesne okolo ni,
takze to az tak patrne ta 1. chyba neni

Nahlásit jako SPAM
IP: 90.178.107.–
Nechápu softwarové firmy, ktere utrácejí za čim dál těžkopádnější DRM ochranu!! Vidět kolem snahu o free2play model je jako příjemné připomenutí časů shareware (jen ten Microsoft stále nic nepochopil)
Lumen
~ Anonymní uživatel
5 příspěvků
18. 11. 2012   #6
-
0
-

Jo jo jo :) sorry asi si nečítal ale celé som to prekopal už skôr aj tvoj kód je správny :) 

Jo pozerám že tan ten riadok kde je : mov al,pomax nepoužívam, ale potom som to urobil tak že : 

cmp dl, pomax zmením na cmp dl, al aby som to využil :) 

Nahlásit jako SPAM
IP: 158.193.102.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 237 hostů

Podobná vlákna

Počítanie znakov v reťazci — založil WhatsThiSs

Počet čisel v reťazci... — založil Mishsuli

Prehodenie slov v reťazci — založil street punk

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý