🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.asm
Article #2170

Re: Bardzo prosta zagadka

#2170
From: Bogdan (bogdro)
Date: Tue, 06 Apr 2010 16:40
96 lines
3362 bytes
W dniu 03.04.2010 11:43, Andrzej Grażyński pisze:
> Paweł Więcek pisze:
>> Thus wrote Michoo <michoo_news@vp.pl>:
>>> ZF, ale nadal nie wiem po co - przecież SCAS/CMPS ustawią ją w wyniku
>>> porównania.
>>
>> O ile porównuje cokolwiek. A dwa ciagi zerowej długości też są równe.
>>
>>          Paweł
>>
> No i o to chodzi.
> 
> Oto na pozór poprawny fragment, szukający pierwszego znaku różnego od
> spacji w pewnym obszarze:
> 
> LES EDI, <adres obszaru>
> MOV ECX, <długość obszaru>
> CLD
> MOV  AL,32
> 
> REPE SCASB
> JE @@NotFound
> 
> ; znaleziono znak różny od spacji, jego adres jest w ES:[EDI-1]
> 
> 
> 
> ....
> 
> @@NotFound:
> 
> 
> Fragment jest błędny, bo założenie wyartykułowane w komentarzu jest
> nieprawdziwe.
> 
> Program będzie poprawny, jeśli instrukcję REPE SCASB poprzedzimy
> instrukcją OR ECX,ECX.
> 
> 
> 
> Sytuacja podobna: co należy wstawić przed REPNE SCASB, by uniknąć błedu
> w powyższym fragmencie:
> 
> 
> LES EDI, <adres obszaru>
> MOV ECX, <długość obszaru>
> CLD
> MOV  AL,13
> 
> REPNE SCASB
> JNE @@NotFound
> 
> ; znaleziono znak końca wiersza, jego adres jest w ES:[EDI-1]
> 
> 
> 
> ....
> 
> @@NotFound:

 Wszyscy znają odpowiedź, ale ja przełamię milczenie: zapewne chodzi o
sytuację odwrotną, czyli o kod, który wyzeruje flagę ZF, zwłaszcza gdy
ECX=0. Wtedy, jeśli ECX=0, to JNE poprawnie skoczy do @@NotFound. Ale
bardziej chciałem zapytać (z ciekawości, długo nad tym nie myślałem),
czy rozwiążesz tę zagadkę na samym ECX tuż przed REPNE i bez
niszczenia ECX (tzn. ustawiając tylko flagi)? Bo taki kod:

	LES EDI, <adres obszaru>
	MOV ECX, <długość obszaru>
	CLD
	MOV  AL,13

		test	al, al
	REPNE SCASB
	JNE @@NotFound

 lub też

	LES EDI, <adres obszaru>
	MOV ECX, <długość obszaru>
	CLD
	MOV  AL,13

		add	ecx, 1
		sub	ecx, 1
	REPNE SCASB
	JNE @@NotFound

 to nawet ja potrafię wstawić :) Ale może znasz jakąś instrukcję XOR,
SETcc czy inną, która ustawi ZF=0, gdy ECX=0.

-- 
Pozdrawiam/Regards - Bogdan                     (GNU/Linux & FreeDOS)
Kurs asemblera x86 (DOS, GNU/Linux):http://rudy.mif.pg.gda.pl/~bogdro
Grupy dyskusyjne o asm:  pl.comp.lang.asm alt.pl.asm alt.pl.asm.win32
www.JabberPL.org www.TorProject.org Soft (EN): miniurl.pl/bogdro-soft
Technical Details
Message-ID: <hpfo6b$clk$1@inews.gazeta.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!not-for-mail
References: <hp2ss9$12j$1@news.onet.pl> <hp3al9$4cc$1@news.onet.pl> <hp4d7v$7ik$1@news.onet.pl> <hp5701$jvj$1@news.onet.pl> <6dph87-n3j.ln1@lilith.rlyeh.org> <hp72m0$bon$1@news.onet.pl>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!not-for-mail
From: "Bogdan (bogdro)" <bogdan@poczta.gazeta.pl>
Newsgroups: pl.comp.lang.asm
Subject: Re: Bardzo prosta zagadka
Date: Tue, 06 Apr 2010 18:40:20 +0200
Organization: "Portal Gazeta.pl -> http://www.gazeta.pl"
Lines: 96
Message-ID: <hpfo6b$clk$1@inews.gazeta.pl>
References: <hp2ss9$12j$1@news.onet.pl> <hp3al9$4cc$1@news.onet.pl> <hp4d7v$7ik$1@news.onet.pl> <hp5701$jvj$1@news.onet.pl> <6dph87-n3j.ln1@lilith.rlyeh.org> <hp72m0$bon$1@news.onet.pl>
NNTP-Posting-Host: rudy.mif.pg.gda.pl
Mime-Version: 1.0
X-Trace: inews.gazeta.pl 1270572047 12980 153.19.42.16 (6 Apr 2010 16:40:47 GMT)
X-Complaints-To: usenet@agora.pl
NNTP-Posting-Date: Tue, 6 Apr 2010 16:40:47 +0000 (UTC)
X-User: bog.d
In-Reply-To: <hp72m0$bon$1@news.onet.pl>
User-Agent: Mozilla/5.0 (X11; U; Linux i686; pl-PL; rv:1.9.1.9) Gecko/20100317 Thunderbird/3.0.4
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit