Forum Graph100

Forum Graph100

Vous n'êtes pas identifié.

Annonce

Bonjour et bienvenue sur le nouveau Forum Graph100 !
L'intégralité des données a été transférée sur un forum PunBB et tout les comptes sont fonctionnels avec le même nom d'utilisateur et mot de passe.
Un wiki est aussi disponible avec le même compte ! N'oubliez pas de remettre votre avatar, bon surf !
Pour plus d'informations, consultez ce post.

#26 22 Dec 2002 04:49:10

Swifter
Programmeur Graph100
Lieu: Niort (79)
Date d'inscription: 06 Aug 2002
Messages: 980
Site web

Re: Clear()

Bon voila...
J'ai translaté la fonction ci-dessous tout en asm.

Code:

unsigned char testkey(unsigned int y,unsigned char x)
{ unsigned char recv=(!x?1:1<<(7-x));
  y=1<<y;
  asm{ mov ax,y
       out 0x13,ax
       in al,0x13 }
  if (_AL&recv) return 1;
  return 0;}

Donc en asm ca donne:

Code:

// teste n'importe quelle touche et peut tester plusieurs touches en 
// meme temps.
// fonction inspirée de la fonction de Superna
unsigned char testkey(unsigned char y,unsigned char x)
{ asm{
  mov ax,1
  mov cl,y
  shl ax,cl
  mov bl,1
  mov cl,x
  cmp cl,0
  jz notinc
  inc cl }
  notinc:
  asm{
  ror bl,cl
  out 0x13,ax
  mov cx,10 }
  loop:
  asm{
  dec cx
  jnz loop
  in al,0x13
  and al,bl }
  if(_AL) return 1;
  return 0;}

voilou, et en fait, j'arrivais pô a compiler ta fonction parce que y avait pô le "_" devant AL...Et comme je ne m'étais pô attardé, j'avais pô vu...
Bon mais en fait, j'ai des probleme de comprehension avec certaine boucle...
D'abord, laquelle de toute les boucles existantes est la plus rapide,jz,jnz,jmp,loop,rep ?
Ensuite, je ne comprend pô : jb, jnb et jnbe (une fois que j'aurais compris ceux la, je comprendrais les autres que je ne comprend pô).
Pour finir, quelle est la différence entre certaines boucles : jz et je par exemple ou alors jc et jb et jnae...
vala...


Swifter, avec un T, n'attrapes pas la poussière mais toutes les remarques débiles :mrgreen:
              ** Swifter68@hotmail.com **

Hors ligne

 

#27 22 Dec 2002 05:53:45

Julien
C++iste convaincu
Lieu: Waterloo (Be)
Date d'inscription: 29 May 2002
Messages: 1456
Site web

Re: Clear()

jz je et tout le tralala c'est pas de boucles, c'est des if !

Comme en asm tu peux pas donner une condition particulière pour effectuer l'une ou l'autre expression ( c'est a dire en fait pour sauter a l'une ou l'autre adresse mémoire ), t'es obligé d'employer des 'mots' barbares comme ca pour indiquer la condition que tu veux observer.
par exemple, t'as un j... pour vérifier si le résultat de la derniere opération est nul ( ici c'est jnz ), un pour voir si la comparaison effectuée précédement ( cmp ) a observé une égalité de valeurs, etc etc
En fait ces commandes agissent en fonction du registre flag, c'est a dire que selon les valeurs contenues dans flag le saut qui suit la condition ( c'est en général un saut qu'on met apres ) sera effectué ou non.

Bon mes connaissances en asm étant plus que réduites, j'espere que j'ai pas dit de betises, mais en gros ca doit etre ca  lol


Pensez à surveiller mes releases wink

Hors ligne

 

#28 22 Dec 2002 06:39:59

casioworld
Programmeur Graph100
Lieu: Palaiseau (Essonne)
Date d'inscription: 08 Feb 2002
Messages: 1843
Site web

Re: Clear()

X et Y c'est quoi , les coordonnées des touches sur le clavier ?
on commence par où ? les codes des touches directionnelles , c'est quoi ?

si elle marche je l'a mettrais dans mon tuto  :!:


- http://www.casioworld.wb.st  --> plus grande base de données pour Graph100+
- http://efreidelirium.free.fr --> vive l'EFREI mdr

Hors ligne

 

#29 22 Dec 2002 07:10:38

Julien
C++iste convaincu
Lieu: Waterloo (Be)
Date d'inscription: 29 May 2002
Messages: 1456
Site web

Re: Clear()

... je rajoute que ici loop c'est pas une commande, mais un nom de label de saut choisi par le programmeur pour désigner une adresse mémoire ( tout comme notinc )...


Pensez à surveiller mes releases wink

Hors ligne

 

#30 22 Dec 2002 10:24:26

C@siomax
Programmeur Graph100
Lieu: Grenoble, au QG de fmw-product
Date d'inscription: 03 Feb 2002
Messages: 3042
Site web

Re: Clear()

D'abord, laquelle de toute les boucles existantes est la plus rapide,jz,jnz,jmp,loop,rep ?
Ensuite, je ne comprend pô : jb, jnb et jnbe (une fois que j'aurais compris ceux la, je comprendrais les autres que je ne comprend pô).
Pour finir, quelle est la différence entre certaines boucles : jz et je par exemple ou alors jc et jb et jnae...

alors ptit gars, on découvre les boucles en asm? lol

bon je vais essayer d'apporter ma bien maigre connaissance en asm:

comme le dit julien, les jz, jnz etc... ce ne sont pas des boucles, mais des branchements conditionnels.
Si tu veux simplement faire un goto, c'est la commande jmp que tu dois utiliser. Mais d'après ce ke tu demandes, les branchements conditionnels doivent être utilisés avec cmp, qui comme tu t'en doute compare deux valeurs. C'est le "résultat" de cette comparaison qui va être utilisé par les commandes jxx suivantes.

par exemple, tu veux tester si la variable i (type integer) est inférieure ou égale à 1024. COmme je l'ai dit, tu prends la commande cmp, puis tu mets un jbe sur le label.

En pratik ça fait:

Code:

Label:
asm inc 1
asm cmp i,1024
asm jbe Label

Label:
Incrémente i {forcément de 1, vu ke i est entier...}
compare i à 1024
si i<=1024 se rebranche sur Label.

Et pour t'aider:

jz=Jump if Zero
jnz=Jump if Not Zero
jmp=Jump
rep=REPeat
jb=Jump if Below
jnb=Jump if Not Below
jnbe=Jump if Not Below or Equal
je=Jump if Equal

euh, je crois ke g fini! smile

[edition>]Ho put***, on dirait pas comme ça mais les commandes en gras à la fin c tro chiant à faire!! voila c t pour dire....... rien du tout wink[<edition]


:mrd: :mrd:
.·´¯`·.¸.-> Casiomax <-·´¯`·.¸.·

Statut: indéfini

Hors ligne

 

#31 22 Dec 2002 12:14:18

Julien
C++iste convaincu
Lieu: Waterloo (Be)
Date d'inscription: 29 May 2002
Messages: 1456
Site web

Re: Clear()

mdr ton édition!  lol

Au fait c'est

Code:

asm inc i

dans ton code et pas

Code:

asm inc 1

bien sur  wink


Pensez à surveiller mes releases wink

Hors ligne

 

#32 23 Dec 2002 03:37:49

Swifter
Programmeur Graph100
Lieu: Niort (79)
Date d'inscription: 06 Aug 2002
Messages: 980
Site web

Re: Clear()

@ julien : je savais que les "j.." étaient des saut conditionnels comme jbe, ou alors des sauts inconditionnels comme jmp, mais j'ai dit des boucles parce que... euh... je m'en sert souvent comme des boucles , vala.

@ Casiomax : oui je decouvre l'assembleur, j'avais dit que j'apprendrais, je le fait... Et ca commence a venir, j'ai meme fait une fonction contraste ki marche ( chez toi l'erreur venait de "cmp i,niv" )  lol ... Bon j'ai compris comment me servir des boucles ke je ne comprenait pô grace a ton exemple, merci

@ Casioworld : x et y sont bien les coordonnees des touches du clavier...Il me semble que c'est comme tu l'as expliqué dans ton tuto cad :

pour les y :
0 : teste la touche AC/on
1 : teste la ligne de la touche 0 a EXE
...
5 : teste la ligne de la touche a+b/c  a  ->
...
8 : teste la ligne de la touche SHIFT a MENU
9 : teste la ligne des touches multidirectionnelles
10 : teste la ligne de la touche F1 a F6

pour les x :
0 : teste la touche AC/on
1 : teste la colonne de la touche F1 ( GAUCHE-F1-SHIFT-7-4-1-0...etc)
2 : teste la colonne de la touche F2 ( HAUT-F2-CTRL ... etc)
3 : teste la colonne de la touche F3 ( BAS-F3-OPTN-9 ... etc)
4 : teste la colonne de la touche F4 ( DROITE-F4-MENU-DEL ... etc)
5 : teste la colonne de la touche F5 ( F5- cos - , - /- moins et EXE )
6 : teste la colonne de la touche F6 ( F6 - tan et -> )

en résumé, qq exemple (attention avec les y avant les x):
tester AC/on ->testkey(0,0);
tester DROITE -> testkey(9,4);
tester F6 -> testkey(10,6)...

Par contre la fonction au dessus est ralenti par la recherche de la touche AC/on en testkey(0,0)...
ON peut optimiser le code comme cela :

Code:

// teste n'importe quelle touche et peut tester plusieurs touches en 
// meme temps. 
// Attention la touche AC/on se teste avec testkey(0,7);
// fonction inspirée de la fonction de Superna 
unsigned char testkey(unsigned char y,unsigned char x) 
{ asm{ 
  mov ax,1 
  mov cl,y 
  shl ax,cl 
  mov bl,1 
  mov cl,x 
  inc cl  
  ror bl,cl 
  out 0x13,ax 
  mov cx,10 } 
  loop: 
  asm{ 
  dec cx 
  jnz loop 
  in al,0x13 
  and al,bl } 
  if(_AL) return 1; 
  return 0;} 

Et donc AC/on se teste ac testkey(0,7);
Voilou...
Alors par contre il reste deux questions en suspend : la rapidité des sauts conditionnels et les différences entre certains!


Swifter, avec un T, n'attrapes pas la poussière mais toutes les remarques débiles :mrgreen:
              ** Swifter68@hotmail.com **

Hors ligne

 

#33 23 Dec 2002 04:09:51

C@siomax
Programmeur Graph100
Lieu: Grenoble, au QG de fmw-product
Date d'inscription: 03 Feb 2002
Messages: 3042
Site web

Re: Clear()

:ptdr: :ptdr:
ben donne moi aulors ma nouvelle fonction sur le contrast stp!
avec l'erreur corrigée bien sûr!
(t'es passé par un registre?)


:mrd: :mrd:
.·´¯`·.¸.-> Casiomax <-·´¯`·.¸.·

Statut: indéfini

Hors ligne

 

#34 24 Dec 2002 02:18:14

Swifter
Programmeur Graph100
Lieu: Niort (79)
Date d'inscription: 06 Aug 2002
Messages: 980
Site web

Re: Clear()

Alors voila ta fonction contraste qui marche :

Code:

void contrast(unsigned char sens,unsigned char niv)
{ asm mov ch,niv
  debut:
  asm cmp sens,1
  asm je up
  asm mov ah,22h
  asm mov bl,1
  asm int 7Ch
  asm jmp next
  up:
  asm mov ah,22h
  asm mov bl,0
  asm int 7Ch
  next:
  asm dec ch
  asm cmp ch,0
  asm jne debut }

Pô besoin de déclarer de variable ,les registres sont la pour ca!
Autre truc, tu avais mis jbe au lieu de jne, une erreur de frappe je pense ! Et encore une erreur : tu avais inversé les fonctions cad quand sens == 1 descends le contrast, et le contraire...Ah oui et aussi, oubli de la decrementation de ch!
Voilou :mrgreen:


Swifter, avec un T, n'attrapes pas la poussière mais toutes les remarques débiles :mrgreen:
              ** Swifter68@hotmail.com **

Hors ligne

 

#35 24 Dec 2002 05:35:02

Julien
C++iste convaincu
Lieu: Waterloo (Be)
Date d'inscription: 29 May 2002
Messages: 1456
Site web

Re: Clear()

http://www.casiomania.com/forum/images/smiles/question.gif 'Doit y avoir un truc qui méchappe, mais la je comprends pas l'intéret d'écrire ca comme ca...

Pourquoi on peut pas faire

Code:

void contrast(unsigned char sens,unsigned char niv) 
{ sens!=sens;
  asm xor cx,cx;
  asm mov bx,cx;
  asm mov cl,niv 
  asm mov bl,sens 
  asm mov ah,22h 
  debut: 
  asm int 7Ch 
  asm loop debut } 

http://www.casiomania.com/forum/images/smiles/question.gif

A ce moment on donne sens=1 pour assombrir et 0 pour éclaircir et le tour est joué non  :?:


Pensez à surveiller mes releases wink

Hors ligne

 

#36 24 Dec 2002 06:35:24

Julien
C++iste convaincu
Lieu: Waterloo (Be)
Date d'inscription: 29 May 2002
Messages: 1456
Site web

Re: Clear()

Bon ca marche bien, mais pas pour regler le niveau....  :?
Ca doit etre ma boucle qui va pas
( Au fait

Code:

debut:
...
asm loop debut

est equivalent a

Code:

debut:
...
asm dec cx
asm cmp cx,0
jne debut

)

Est-ce que l'interrupition 7Ch influence les registres ax et bx  :?:


Pensez à surveiller mes releases wink

Hors ligne

 

#37 24 Dec 2002 07:03:17

Julien
C++iste convaincu
Lieu: Waterloo (Be)
Date d'inscription: 29 May 2002
Messages: 1456
Site web

Re: Clear()

Bon ok j'ignorais que les interruptions bidouillaient autant les registres, ceci fonctionne bien maintenant:

Code:

void contrast(unsigned char sens,unsigned char niv) 
{ sens!=sens; 
  asm xor cx,cx; 
  asm mov cl,niv 
  asm mov bx,cx; 
 debut: 
  asm mov bl,sens 
  asm mov ah,22h 
  asm push cx
  asm int 7Ch 
  asm pop cx
  asm loop debut }

Pensez à surveiller mes releases wink

Hors ligne

 

#38 24 Dec 2002 09:31:59

Swifter
Programmeur Graph100
Lieu: Niort (79)
Date d'inscription: 06 Aug 2002
Messages: 980
Site web

Re: Clear()

Je pense que cette fonction est plus lente que la mienne !
D'une part parce qu'elle utilise du C.
Et d'autre parrt parce qu'elle a dans sa boucle pop et push ce qui ralenti la boucle...


Swifter, avec un T, n'attrapes pas la poussière mais toutes les remarques débiles :mrgreen:
              ** Swifter68@hotmail.com **

Hors ligne

 

#39 24 Dec 2002 09:36:40

Julien
C++iste convaincu
Lieu: Waterloo (Be)
Date d'inscription: 29 May 2002
Messages: 1456
Site web

Re: Clear()

C'est possible, mais bon, si tu veux pas utiliser du C tu prends sens=0 pour assombrir ou lieu de l'inverse, et pour ce qui est de push il faut remplacer loop alors...

En tout cas

Code:

void contrast(unsigned char sens,unsigned char niv) 
{
  // sens=0 --> assombrir
  // sens=1 --> eclaircir

  asm xor cx,cx; 
  asm mov ch,niv 
  asm mov bx,cx; 
debut: 
  asm mov bl,sens 
  asm mov ah,22h 
  asm int 7Ch 
  asm dec ch 
  cmp ch,0
  asm jne debut }

A quand meme des chances d'etre plus rapide que ce que tu as donné auparavnt wink

edit: Je viens de voir une erreur de copier-coller sur mon post précédent, j'ai corrigé.


Pensez à surveiller mes releases wink

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr