🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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

Re: Bardzo prosta zagadka

#2173
From: Andrzej Grażyński
Date: Wed, 07 Apr 2010 20:28
76 lines
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-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> <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