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
Author: =?ISO-8859-2?Q?A
Date: Thu, 01 Apr 2010 21:40
Date: Thu, 01 Apr 2010 21:40
4 lines
120 bytes
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
Author: Michoo
Date: Fri, 02 Apr 2010 01:36
Date: Fri, 02 Apr 2010 01:36
11 lines
301 bytes
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
Author: =?ISO-8859-2?Q?A
Date: Fri, 02 Apr 2010 11:26
Date: Fri, 02 Apr 2010 11:26
12 lines
367 bytes
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
Author: Michoo
Date: Fri, 02 Apr 2010 18:45
Date: Fri, 02 Apr 2010 18:45
17 lines
501 bytes
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
Author: =?UTF-8?Q?Pawe=C
Date: Fri, 02 Apr 2010 20:25
Date: Fri, 02 Apr 2010 20:25
14 lines
546 bytes
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
Author: =?UTF-8?B?QW5kcn
Date: Sat, 03 Apr 2010 11:43
Date: Sat, 03 Apr 2010 11:43
66 lines
1049 bytes
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
Author: "Bogdan (bogdro)
Date: Tue, 06 Apr 2010 18:40
Date: Tue, 06 Apr 2010 18:40
97 lines
2290 bytes
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
Author: =?UTF-8?B?QW5kcn
Date: Wed, 07 Apr 2010 10:00
Date: Wed, 07 Apr 2010 10:00
118 lines
2532 bytes
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
Author: "Bogdan (bogdro)
Date: Wed, 07 Apr 2010 18:24
Date: Wed, 07 Apr 2010 18:24
78 lines
1977 bytes
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
Author: =?UTF-8?B?QW5kcn
Date: Wed, 07 Apr 2010 22:28
Date: Wed, 07 Apr 2010 22:28
77 lines
1974 bytes
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