🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.asm
10 messages
10 total messages Started by =?ISO-8859-2?Q?A Thu, 01 Apr 2010 21:40
Bardzo prosta zagadka
#2110
Author: =?ISO-8859-2?Q?A
Date: Thu, 01 Apr 2010 21:40
4 lines
120 bytes
Cz�sto instrukcj�  REPE SCAS? i REPE CMPS? poprzedza si� instrukcj� OR
CX,CX (lub OR ECX,ECX). W jakim celu?

Re: Bardzo prosta zagadka
#2111
Author: Michoo
Date: Fri, 02 Apr 2010 01:36
11 lines
301 bytes
Andrzej Gra�y�ski pisze:
>
> Cz�sto instrukcj�  REPE SCAS? i REPE CMPS? poprzedza si� instrukcj� OR
> CX,CX (lub OR ECX,ECX). W jakim celu?
�eby ustawi� flag�, ale po co - nie mam poj�cia - przez symetri� do REP
- gdzie ECX==0 oznacza "nie powtarzaj"?

--
Pozdrawiam
Michoo

Re: Bardzo prosta zagadka
#2112
Author: =?ISO-8859-2?Q?A
Date: Fri, 02 Apr 2010 11:26
12 lines
367 bytes
Michoo pisze:
> Andrzej Gra�y�ski pisze:
>>
>> Cz�sto instrukcj�  REPE SCAS? i REPE CMPS? poprzedza si� instrukcj� OR
>> CX,CX (lub OR ECX,ECX). W jakim celu?
> �eby ustawi� flag�, ale po co - nie mam poj�cia - przez symetri� do REP
> - gdzie ECX==0 oznacza "nie powtarzaj"?
>
�eby ustawi� flag� (kt�r�?) - Tak.

Reszta bez sensu.

Re: Bardzo prosta zagadka
#2113
Author: Michoo
Date: Fri, 02 Apr 2010 18:45
17 lines
501 bytes
Andrzej Gra�y�ski pisze:
> Michoo pisze:
>> Andrzej Gra�y�ski pisze:
>>>
>>> Cz�sto instrukcj�  REPE SCAS? i REPE CMPS? poprzedza si� instrukcj�
>>> OR CX,CX (lub OR ECX,ECX). W jakim celu?
>> �eby ustawi� flag�, ale po co - nie mam poj�cia - przez symetri� do
>> REP - gdzie ECX==0 oznacza "nie powtarzaj"?
>>
> �eby ustawi� flag� (kt�r�?) - Tak.
ZF, ale nadal nie wiem po co - przecie� SCAS/CMPS ustawi� j� w wyniku
por�wnania.

--
Pozdrawiam
Michoo

Re: Bardzo prosta zagadka
#2114
Author: =?UTF-8?Q?Pawe=C
Date: Fri, 02 Apr 2010 20:25
14 lines
546 bytes
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ł

--
 (___)  | Pawel Wiecek ----------------- Coven / Svart --------------------- |
< o o > |  http://www.coven.vmh.net/    <coven@vmh.net>    GSM: +48603240006 |
 \ ^ /  | GPG/PGP info in message headers  *  [ Debian GNU/Linux developer ] |
  (")   |  Despair will be brought upon the hoping children of happiness. -E |

Re: Bardzo prosta zagadka
#2115
Author: =?UTF-8?B?QW5kcn
Date: Sat, 03 Apr 2010 11:43
66 lines
1049 bytes
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:








Re: Bardzo prosta zagadka
#2116
Author: "Bogdan (bogdro)
Date: Tue, 06 Apr 2010 18:40
97 lines
2290 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

Re: Bardzo prosta zagadka
#2117
Author: =?UTF-8?B?QW5kcn
Date: Wed, 07 Apr 2010 10:00
118 lines
2532 bytes
Bogdan (bogdro) pisze:
> 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.
>
Po co komplikować życie? We fragmencie szukającym #13 wystarczy wstawić

OR AL,AL

przed REPNE SCASB.

Proste, prawda?


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




Re: Bardzo prosta zagadka
#2118
Author: "Bogdan (bogdro)
Date: Wed, 07 Apr 2010 18:24
78 lines
1977 bytes
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

--
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

Re: Bardzo prosta zagadka
#2119
Author: =?UTF-8?B?QW5kcn
Date: Wed, 07 Apr 2010 22:28
77 lines
1974 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.

Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads