Article View: pl.comp.lang.asm
Article #2170Re: Bardzo prosta zagadka
From: Bogdan (bogdro)
Date: Tue, 06 Apr 2010 16:40
Date: Tue, 06 Apr 2010 16:40
96 lines
3362 bytes
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-mailReferences:
<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