🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.asm
6 messages
6 total messages Started by marcin Sun, 30 Aug 2009 18:17
Ustawianie/czyszczenie flagi ZF
#1997
Author: marcin
Date: Sun, 30 Aug 2009 18:17
41 lines
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
#1998
Author: gupi man'a'go
Date: Sun, 30 Aug 2009 21:14
47 lines
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
#1999
Author: Bartosz Wójcik
Date: Mon, 31 Aug 2009 12:07
23 lines
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
#2001
Author: Piotr Wyderski
Date: Mon, 31 Aug 2009 15:43
14 lines
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
#2000
Author: marcin
Date: Wed, 02 Sep 2009 13:26
50 lines
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
#2002
Author: marcin
Date: Wed, 02 Sep 2009 13:29
45 lines
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