PureBasic

Forums PureBasic
Nous sommes le Mer 19/Juin/2019 10:54

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 17 messages ]  Aller à la page 1, 2  Suivante
Auteur Message
 Sujet du message:
MessagePosté: Sam 03/Juin/2006 17:26 
Hors ligne
Avatar de l’utilisateur

Inscription: Mar 26/Avr/2005 15:19
Messages: 315
alpha.w=40
beta.w=11
!MOV dh,[v_beta] ; on met(MOV) dans dh (ca aurait pu etre un quelconque autre registre 8 bits) la valeur([v_) "beta"(beta)
!ADD [v_alpha],dh ; on ADDitionne(ADD) la valeur alpha([v_alpha]) et la valeur beta contenu dans dh(voir la ligne du dessus)
; ERREUR !!!!!!!!!!
Debug a


"!MOV dh,[v_beta]" syntax error :D
faut ecrire "!MOV dh,byte[v_beta]"

"!ADD [v_alpha],dh" resyntax error :D
faut ecrire "!ADD byte[v_alpha],dh"


"!ADD [v_a],[v_b] " no valide instruction
operation memoire vers memoire impossible


Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: Sam 03/Juin/2006 18:12 
Hors ligne
Avatar de l’utilisateur

Inscription: Mer 09/Nov/2005 9:53
Messages: 3959
tonton a écrit:
!MOV dh,[v_beta] ; syntax error :D
; faut ecrire :
!MOV dh,byte[v_beta]

!ADD [v_alpha],dh ; resyntax error :D
; faut ecrire :
!ADD byte[v_alpha],dh

Oui tonton, bravo !
Il y avait aussi ceci :

Code:
!MOV  dx,[v_beta]
!ADD  [v_alpha],dx

En effet, comme nous avons initialisé dans PB nos 2 valeurs comme étant des WORD (.w = 16 bits; soit 2 octets), à nous d'adapter la suite de notre code avec ces initialisations.

Le code de tonton fonctionne car les 2 valeurs sont plus petites que 256 et le resultat aussi.
Mais regardez le piège qui vous attend en cas de dépassement :


Code:
alpha.w=400
beta.w=410

!MOV  dh,byte[v_beta]
!ADD  byte[v_alpha],dh

Debug alpha ; resultat = 810 ?? non !


Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: Sam 03/Juin/2006 18:35 
Hors ligne
Avatar de l’utilisateur

Inscription: Mar 26/Avr/2005 15:19
Messages: 315
j ai droit a une sucette non?!!!!!! lol


Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: Sam 03/Juin/2006 20:12 
Hors ligne
Avatar de l’utilisateur

Inscription: Lun 19/Juil/2004 22:31
Messages: 1151
Sympa, bonne initiative.
Je savais pas du tout comment ça marchais l'assembleur (en PB).
J'ai compris ( enfin ce tuto ).

_________________
DroopyLib/PBFastLib/HMod


Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: Sam 03/Juin/2006 23:14 
Hors ligne
Avatar de l’utilisateur

Inscription: Mer 09/Nov/2005 9:53
Messages: 3959
Droopy a écrit:
Sympa, bonne initiative.
Je savais pas du tout comment ça marchais l'assembleur (en PB).
J'ai compris ( enfin ce tuto ).

Oui car les tutos habituels laisse encore un fossé entre ce qu'ils expliquent sur l'ASM et la réalité.
Bon, je vais continuer ce cours...


Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: Dim 04/Juin/2006 8:38 
Hors ligne
Avatar de l’utilisateur

Inscription: Sam 31/Déc/2005 23:52
Messages: 1202
Sa a l'air pas mal, je lirai sa quand il sera un peu plus étoffé parce que quand je me met a lire j'aime pas être stopper :P


Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: Dim 04/Juin/2006 14:40 
Hors ligne
Avatar de l’utilisateur

Inscription: Jeu 26/Fév/2004 11:17
Messages: 1448
Localisation: Le Village
Très intéressant...
ça serait bien des petits exemples marants... faire faire quelque chose de très concret au pc : un beep, faire bouger le lecteur disquette ou des petits trucs comme ça... enfin c juste une suggestion. En tout cas, très bonne initiative, merci !!! :-D


Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: Dim 04/Juin/2006 17:46 
Hors ligne
Avatar de l’utilisateur

Inscription: Mer 09/Nov/2005 9:53
Messages: 3959
on le fera peut etre mais pas en debut de tuto. Faut apprendre les bases avant =)

_________________
http://HexaScrabble.com/
!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Portable LENOVO ideapad 110-17ACL 64 bits
Version de PB : 5.70LTS - 32 bits


Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: Jeu 22/Juin/2006 15:52 
Hors ligne
Avatar de l’utilisateur

Inscription: Mer 09/Nov/2005 9:53
Messages: 3959
Voila, j'ai rajouté une lecon au post 1. Désolé de ne pas etre passé avant mais en ce moment, mon ordi ne veux pas se connecter au forum !!

_________________
http://HexaScrabble.com/
!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Portable LENOVO ideapad 110-17ACL 64 bits
Version de PB : 5.70LTS - 32 bits


Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: Ven 07/Juil/2006 22:27 
Hors ligne
Avatar de l’utilisateur

Inscription: Mer 09/Nov/2005 9:53
Messages: 3959
Voila, je viens de rajouter la 3eme partie sur 4 au totale je pense. Si quelqu'un veux le lire et me dire si je ne suis pas clair ou si je dois redevelopper quelque chose, qu'il n'hesite pas a demander...

_________________
http://HexaScrabble.com/
!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Portable LENOVO ideapad 110-17ACL 64 bits
Version de PB : 5.70LTS - 32 bits


Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: Ven 07/Juil/2006 22:43 
Hors ligne
Avatar de l’utilisateur

Inscription: Jeu 07/Avr/2005 1:06
Messages: 1489
Localisation: Rennes
SPH a écrit:
Seulement, Fred, le codeur de PB sait qu'on ne peux pas se contenter que de nombres positifs. PB sans nombre négatif ne servirait à rien. Fred a simplement eu le choix entre utiliser le paquet d'instructions ASM considérant les octets comme des nombres 8 bits positifs, ou utiliser l'autre paquet d'instructions ASM considérant les octets comme des nombres 7 bits (ceux de droite) et de préciser le signe grace au bit de poid fort (le bit tout a gauche).
Et oui, il y a 2 paquets d'instructions en ASM.
Ainsi, "10001100" est examiné comme étant égal à 140 si l'on utilise les instructions spécifiques aux nombres positifs (ils s'appellent "nombres non signés") et le meme "10001100" est considéré comme étant égal à -116 si l'on utilise les instructions spécifiques aux nombres signés (négafits).
Sous PB, que l'on mette -116 ou 140 a la variable R.b, on mettra de toute façon "10001100" et il sera utilisé par le bon jeu d'instruction ASM qui se cache derriere les teintes R,V et B de l'instruction finale RGB.


Pas mal le tuto, sauf que, concernant les nombres signés/non signés, c'est une convention, ce n'est pas le choix de Fred, pour avoir le nombre positif/négatif on parle de faire un complément à 1 voir même un complément à 2.
Le bit 7 correspond donc au signe, les valeurs varient de 11111111 à 01111111 (-127 à + 127) mais il est vrai que cela reste assez flou car c'est une arithmétique assez longue à expliquer
N'empêche que c'est pas mal du tout :D


Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: Dim 09/Juil/2006 22:34 
Hors ligne
Avatar de l’utilisateur

Inscription: Mer 09/Nov/2005 9:53
Messages: 3959
flaith a écrit:
Pas mal le tuto, sauf que, concernant les nombres signés/non signés, c'est une convention, ce n'est pas le choix de Fred, pour avoir le nombre positif/négatif on parle de faire un complément à 1 voir même un complément à 2.

J'ai deja codé en ASM des fonctions mathematiques exclusivement positives :)


Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: Sam 30/Juin/2007 11:51 
Hors ligne

Inscription: Ven 29/Juin/2007 17:50
Messages: 3413
@flaith:
Citation:
Le bit 7 correspond donc au signe, les valeurs varient de 11111111 à 01111111 (-127 à + 127) mais il est vrai que cela reste assez flou car c'est une arithmétique assez longue à expliquer

Je ne veux pas jouer le pointilleux. Je vais juste apporter une petite correction (m'en veux pas c'est pour etre pile au bit près dans ta def qui est vrai):

Pour assimiler l'arithmétique, voici un rappel récap. sur 4 bits:
Citation:
F 1111 15 -1
E 1110 14 -2
D 1101 13 -3
C 1100 12 -4
B 1011 11 -5
A 1010 10 -6
9 1001 9 -7
8 1000 8 -8
7 0111 7 7
6 0110 6 6
5 0101 5 5
4 0100 4 4
3 0011 3 3
2 0010 2 2
1 0001 1 1
0 0000 0 0

(Hexa, binaire, décimal non signé et décimal signé)
ça permet de se repérer efficacement avec le 0 et le 8 (ou -8 : borne mini) qui sont des arrondis facilement mémorisables.

La borne mini (ici -8 en signé) c'est le 1er nombre du domaine de def (de -8 à 7)
La borne maxi (ici 7 en signé)c'est le dernier nombre.

Si on se munit d'une calculette pour chercher la suite des doubles (puissances de 2):
Citation:
0 1
1 2
2 4
3 8
4 16
5 32
6 64
7 128
8 256
9 512
10 >> 1024 (le millier env.)
11 2048
12 4096
13 8192
14 16384
15 32768
16 65536
17 131072
18 262144
19 524288
20 >> 1048576 (le millions !)
21 2097152
22 4194304
23 8388608
24 16777216
25 33554432
26 67108864
27 134217728
28 268435356
29 536870912
30 >> 1073741824 (le milliard)
31 2147483648
32 4294967296

Si on apprend par coeur les puissances 7, 8, 15, 16, 31 et 32 (pour le 8, 16 et 32 bits), + la logique ci-dessous (1er pair, dernier impair), on a tous les domaines signés et non signés en tête.

Nombre non signé de 8 bits
ConvT: Le 1er bit n'est pas le bit 1 mais le bit 0 (en Asm, 0 est quasiment toujours considéré dans n'importe quel ensemble numérique).
[ 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 ]
Domaine de définition du comptage des combinaisons: de 1 à 256
(car 256 = 2^8)
Domaine de définition appliqué: de 0 à 255
0 --------------- - - - - - - ------------------ 255
(on décrémente les bornes parce qu'on considère le zéro : de 1 - 1 à 256 - 1)

Rem: Dans une liste de n entiers consécutifs avec n pair (ici 256 est pair)
> Si le 1er entier est impair, le dernier est pair
> A l'inverse, si le 1er est pair, le dernier est impair (et c'est cette règle qu'on va retenir)
> En bref: Les domaine de déf des entiers commence toujours par un entier pair (en référence à 0 qui est pair)


Nombre signé de 8 bits:
Comme le dernier bit sert de signe, il reste 7 bits et on considère alors que le domaine est décalé de 2^7 unités soit 128 unités vers la bas.
Domaine de définition appliqué: de -128 à 127
-128 -------- - - - - - - -------- 0 ------- - - - - - - ------ 127
(on décrémente les bornes de 128 : de 0 - 128 à 255 - 128)

Rem: Comme défini en rem. préc., ce domaine comme tous les autres domaines (sur 16, 24, 32bits, etc...) commence par un pair et finit par un impair.

Citation:
111 1111 (127) Dernier nombre (borne maxi)(il est impair)
111 1110 (126) Avant-dernier nombre
111 1101 (125)
...
11 (3)
10 (2)
1 (1)
0 (0)
1111 1111 (-1)
1111 1110 (-2)
1111 1101 (-3)
...
1000 0010 (-126)
1000 0001 (-127)
1000 0000 (-128) (1er nombre)(borne mini)(il est pair)


Conclusion : En binaire, le domaine de déf exact sur 8bits est de 1000 0000 à 0111 1111.





Exemple: En extrapolant sur les 16, 24 et 32 bits, formats qui nous intéressent en assembleur, si je prends par exemple 32bits.
J'ai en tête 2^32 = 4294967296 (C'est comme les numéros de téléphone pour les savoir par coeur : celui-ci c'est "4, 29, 4 96, 72, 96")
Je le soustrait de 1.
Je sais donc presqu'immédiatement qu'un non signé de 32bits peut représenter un nombre entre 0 et 4294967295 :D
Et si je veux savoir le domaine d'un entier signé 32bits, au lieu de 2^32, je prends 2^31, qui fait 2147483648 ("21, 47, 48, 36, 48"), et j'en conclus qu'un signé 32bits est entre -2147483648 et 2147483647 (j'enlève juste 1 à la borne maxi du domaine de def.).



Woilà, comme ça, c'est un peu moins flou en Asm![/quote]


Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: Sam 30/Juin/2007 16:57 
Hors ligne

Inscription: Lun 26/Avr/2004 0:40
Messages: 14537
Ollivier a écrit:
Woilà, comme ça, c'est un peu moins flou en Asm!



si tu le dit ! :lol: :lol: :lol:


Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: Sam 30/Juin/2007 17:31 
Hors ligne

Inscription: Ven 29/Juin/2007 17:50
Messages: 3413
@Dobro

ça n'a pas l'air de te convaincre!


Haut
 Profil  
Répondre en citant le message  
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 17 messages ]  Aller à la page 1, 2  Suivante

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages

Rechercher:
Aller à:  

 


Powered by phpBB © 2008 phpBB Group | Traduction par: phpBB-fr.com
subSilver+ theme by Canver Software, sponsor Sanal Modifiye