Article View: pl.comp.lang.asm
Article #2173Re: Bardzo prosta zagadka
From: Andrzej Grażyński
Date: Wed, 07 Apr 2010 20:28
Date: Wed, 07 Apr 2010 20:28
76 lines
3093 bytes
3093 bytes
Bogdan (bogdro) pisze: > W dniu 07.04.2010 10:00, Andrzej Grażyński pisze: >> Bogdan (bogdro) pisze: >>> W dniu 03.04.2010 11:43, Andrzej Grażyński pisze: > > [...] >>>> 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 > > [...] > >> Po co komplikować życie? We fragmencie szukającym #13 wystarczy wstawić >> >> OR AL,AL >> >> przed REPNE SCASB. >> >> Proste, prawda? > > Czyli mój powyższy przykład z "test al, al" też zapewne by sobie > poradził :) > To drugie było pomyłką. > >> To teraz trochę trudniejsze - co tutaj trzeba wstawić przed REPNE SCASB? >> Oczywiście tylko jedna instrukcja. >> >> Szukamy zerowego ogranicznika stringa ASCIIZ: >> >> >> XOR AL,AL >> MOV ECX,długość obszaru >> LES DI,adres obszaru >> >> REPNE SCASB >> JE @@Found >> >> ; nie znaleziono ogranicznika > > JECXZ @@NotFound > Nie znam lepszej metody, zresztą projektanci procesorów x86 właśnie na taką okazję przewidzieli instrukcję J(E)CXZ. Żaden inny rejestr nie da się testować w taki sposób.
Technical Details
Message-ID:
<hpipu1$rpb$1@news.onet.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.rmf.pl!agh.edu.pl!news.agh.edu.pl!news.onet.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> <hpfo6b$clk$1@inews.gazeta.pl> <hphe2i$3bm$1@news.onet.pl> <hpibjh$f92$1@inews.gazeta.pl>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.rmf.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!not-for-mail From: Andrzej Grażyński <grazynsk@petex.com.pl> Newsgroups: pl.comp.lang.asm Subject: Re: Bardzo prosta zagadka Date: Wed, 07 Apr 2010 22:28:36 +0200 Organization: http://onet.pl Lines: 76 Message-ID: <hpipu1$rpb$1@news.onet.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> <hpfo6b$clk$1@inews.gazeta.pl> <hphe2i$3bm$1@news.onet.pl> <hpibjh$f92$1@inews.gazeta.pl> NNTP-Posting-Host: public-gprs109491.centertel.pl Mime-Version: 1.0 X-Trace: news.onet.pl 1270672132 28459 79.162.45.181 (7 Apr 2010 20:28:52 GMT) X-Complaints-To: niusy@onet.pl NNTP-Posting-Date: Wed, 7 Apr 2010 20:28:52 +0000 (UTC) User-Agent: Thunderbird 2.0.0.24 (Windows/20100228) In-Reply-To: <hpibjh$f92$1@inews.gazeta.pl> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit