=> Tutorial pour les Nuls
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
faut ecrire "!MOV dh,byte[v_beta]"
"!ADD [v_alpha],dh" resyntax error
faut ecrire "!ADD byte[v_alpha],dh"
"!ADD [v_a],[v_b] " no valide instruction
operation memoire vers memoire impossible
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
faut ecrire "!MOV dh,byte[v_beta]"
"!ADD [v_alpha],dh" resyntax error
faut ecrire "!ADD byte[v_alpha],dh"
"!ADD [v_a],[v_b] " no valide instruction
operation memoire vers memoire impossible
Oui tonton, bravo !tonton a écrit :!MOV dh,[v_beta] ; syntax error
; faut ecrire :
!MOV dh,byte[v_beta]
!ADD [v_alpha],dh ; resyntax error
; faut ecrire :
!ADD byte[v_alpha],dh
Il y avait aussi ceci :
Code : Tout sélectionner
!MOV dx,[v_beta]
!ADD [v_alpha],dx
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 : Tout sélectionner
alpha.w=400
beta.w=410
!MOV dh,byte[v_beta]
!ADD byte[v_alpha],dh
Debug alpha ; resultat = 810 ?? non !
-
- Messages : 1202
- Inscription : sam. 31/déc./2005 23:52
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 ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.00 - 64 bits
!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.00 - 64 bits
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 ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.00 - 64 bits
!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.00 - 64 bits
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 ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.00 - 64 bits
!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.00 - 64 bits
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.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.
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
J'ai deja codé en ASM des fonctions mathematiques exclusivement positivesflaith 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.
@flaith:
Pour assimiler l'arithmétique, voici un rappel récap. sur 4 bits:
ç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):
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.
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
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]
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):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
Pour assimiler l'arithmétique, voici un rappel récap. sur 4 bits:
(Hexa, binaire, décimal non signé et décimal signé)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
ç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):
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.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
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.
Conclusion : En binaire, le domaine de déf exact sur 8bits est de 1000 0000 à 0111 1111.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)
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
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]