Thread View: pl.comp.lang.asm
6 messages
6 total messages
Started by marcin
Sun, 30 Aug 2009 18:17
Ustawianie/czyszczenie flagi ZF
Author: marcin
Date: Sun, 30 Aug 2009 18:17
Date: Sun, 30 Aug 2009 18:17
41 lines
1501 bytes
1501 bytes
Witam,
Czy jest jakiś sposób by jedną instrukcją ustawić/wyczyścić flagę zera?
Napisałem makro i chciałbym aby po jego opuszczeniu ustawiana bądz
czyszczona była flaga ZF. Dla przykładu:
--
IsLowerCase MACRO Char
LOCAL _IS_NOT_LOWERCASE, _END
mov al, Char
cmp al, 'a'
jb _IS_NOT_LOWERCASE
cmp al, 'z'
ja _IS_NOT_LOWERCASE
;; Set ZF
jmp _END
_IS_NOT_LOWERCASE:
;; Clear ZF
_END:
ENDM
--
i w kodzie:
--
IsLowerCase(al)
jz _END
--
i dzięki temu nie musiałbym robić kolejnego sprawdzania czy zwrócono
true/false. Używany kompilator to TASM 16-bit.
--
Pozdrawiam
Marcin
Re: Ustawianie/czyszczenie flagi ZF
Author: gupi man'a'go
Date: Sun, 30 Aug 2009 21:14
Date: Sun, 30 Aug 2009 21:14
47 lines
2020 bytes
2020 bytes
‟marcin” zaprogramował/a: > Czy jest jakiś sposób by jedną instrukcją ustawić/wyczyścić flagę zera? > Napisałem makro i chciałbym aby po jego opuszczeniu ustawiana bądz > czyszczona była flaga ZF. Dla przykładu: > -- > IsLowerCase MACRO Char > LOCAL _IS_NOT_LOWERCASE, _END > > mov al, Char > cmp al, 'a' > jb _IS_NOT_LOWERCASE > > cmp al, 'z' > ja _IS_NOT_LOWERCASE > > ;; Set ZF > jmp _END > > _IS_NOT_LOWERCASE: > ;; Clear ZF > > _END: > > ENDM > -- > i w kodzie: > -- > IsLowerCase(al) > jz _END > -- > i dzięki temu nie musiałbym robić kolejnego sprawdzania czy zwrócono > true/false. Używany kompilator to TASM 16-bit. a co powiesz na takie rozwiązanie: subb $'a',%al cmpb $'z'-'a',%al jbe yes po co ci flaga “zf”, jeśli są bezpośrednie instrukcje wykonujące się dla danego stanu flag? dzięku usunięciu niepotrzebnych instrukcji skoku możesz sobie wrzucić jakieś instrukcje pomiędzy tymi i nie będzie przestoju. -- / qo |) :@=N%_g=v=a=g_eD_e=c()=d=8! =%!gN@8'Re. w8in/ad \ _x/ , ;h-%-a'hA'H4,X0'Xo~xo~xO,R`-%EXp01ITed: *-7/+eh / | ng `-%__%--'__%--'__%--~__%--^%B`/$qV3r[o; &GooMee L_._o_O_*_^_"_'_`_ -> http://thereis.notlong.com <- `L"EnOF"
Re: Ustawianie/czyszczenie flagi ZF
Author: Bartosz Wójcik
Date: Mon, 31 Aug 2009 12:07
Date: Mon, 31 Aug 2009 12:07
23 lines
1415 bytes
1415 bytes
On Sun, 30 Aug 2009 20:17:16 +0200, marcin wrote: Pomijajac kwestie algorytmu pushfd and dword ptr[esp], not 0000000001000000b popfd _cf equ 0000000000000001b ; carry flag _pf equ 0000000000000100b ; parity flag _af equ 0000000000010000b ; auxilary flag _zf equ 0000000001000000b ; zero flag _sf equ 0000000010000000b ; sign flag _tf equ 0000000100000000b ; trap flag _if equ 0000001000000000b ; interrupt flag _df equ 0000010000000000b ; direction flag _of equ 0000100000000000b ; overflow flag cheers :) -- Bartosz Wójcik | www.pelock.com
Re: Ustawianie/czyszczenie flagi ZF
Author: Piotr Wyderski
Date: Mon, 31 Aug 2009 15:43
Date: Mon, 31 Aug 2009 15:43
14 lines
1178 bytes
1178 bytes
marcin wrote:
> Czy jest jakiś sposób by jedną instrukcją ustawić/wyczyścić flagę zera?
ustawia:
xor eax, eax
kasuje:
or eax, 1
Pozdrawiam
Piotr Wyderski
Re: Ustawianie/czyszczenie flagi ZF
Author: marcin
Date: Wed, 02 Sep 2009 13:26
Date: Wed, 02 Sep 2009 13:26
50 lines
2330 bytes
2330 bytes
Ah, faktycznie... Takie sa efekty odstawienia asemblera kilka lat temu w kat... Dzieki bart ;-) -- Pozdrawiam Marcin Uzytkownik "Bartosz Wójcik" <antispam@dont.use.it> napisal w wiadomosci news:554yxm68cm8g.1d9lhltkx51m.dlg@40tude.net... > On Sun, 30 Aug 2009 20:17:16 +0200, marcin wrote: > > Pomijajac kwestie algorytmu > > pushfd > and dword ptr[esp], not 0000000001000000b > popfd > > _cf equ 0000000000000001b ; carry flag > _pf equ 0000000000000100b ; parity flag > _af equ 0000000000010000b ; auxilary flag > _zf equ 0000000001000000b ; zero flag > _sf equ 0000000010000000b ; sign flag > _tf equ 0000000100000000b ; trap flag > _if equ 0000001000000000b ; interrupt flag > _df equ 0000010000000000b ; direction flag > _of equ 0000100000000000b ; overflow flag > > > cheers :) > > -- > Bartosz Wójcik | www.pelock.com > > __________ Informacja programu ESET Smart Security, wersja bazy sygnatur > wirusow 4389 (20090902) __________ > > Wiadomosc zostala sprawdzona przez program ESET Smart Security. > > http://www.eset.pl lub http://www.eset.com > > > __________ Informacja programu ESET Smart Security, wersja bazy sygnatur wirusow 4389 (20090902) __________ Wiadomosc zostala sprawdzona przez program ESET Smart Security. http://www.eset.pl lub http://www.eset.com
Re: Ustawianie/czyszczenie flagi ZF
Author: marcin
Date: Wed, 02 Sep 2009 13:29
Date: Wed, 02 Sep 2009 13:29
45 lines
2188 bytes
2188 bytes
Witam, Koledze również dziękuję, tak też wcześniej miałem zrobione, ale ostatecznie wybrałem sposób z pushfd/popfd by jasno określić w kodzie jaką flagę ustawiam (jest to zaliczenie na studiach mojego młodszego brata ;-), więc łątwiej będzie mu zrozumieć co dokładnie się dzieje - przynajmniej tak zakładam :-) ). -- Pozdrawiam Marcin Użytkownik "Piotr Wyderski" <piotr.wyderski@mothers.against.spam.gmail.com> napisał w wiadomości news:h7gg8l$r3j$1@node1.news.atman.pl... > marcin wrote: > >> Czy jest jakiś sposób by jedną instrukcją ustawić/wyczyścić flagę zera? > > ustawia: > > xor eax, eax > > kasuje: > > or eax, 1 > > Pozdrawiam > Piotr Wyderski > > __________ Informacja programu ESET Smart Security, wersja bazy sygnatur > wirusow 4389 (20090902) __________ > > Wiadomosc zostala sprawdzona przez program ESET Smart Security. > > http://www.eset.pl lub http://www.eset.com > > __________ Informacja programu ESET Smart Security, wersja bazy sygnatur wirusow 4389 (20090902) __________ Wiadomosc zostala sprawdzona przez program ESET Smart Security. http://www.eset.pl lub http://www.eset.com
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