=> Tutorial pour les Nuls

Pour discuter de l'assembleur
tonton
Messages : 315
Inscription : mar. 26/avr./2005 15:19

Message par tonton »

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
Avatar de l’utilisateur
SPH
Messages : 4726
Inscription : mer. 09/nov./2005 9:53

Message par SPH »

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 : Tout sélectionner

!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 : Tout sélectionner

alpha.w=400 
beta.w=410 

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

Debug alpha ; resultat = 810 ?? non !
tonton
Messages : 315
Inscription : mar. 26/avr./2005 15:19

Message par tonton »

j ai droit a une sucette non?!!!!!! lol
Avatar de l’utilisateur
Droopy
Messages : 1151
Inscription : lun. 19/juil./2004 22:31

Message par Droopy »

Sympa, bonne initiative.
Je savais pas du tout comment ça marchais l'assembleur (en PB).
J'ai compris ( enfin ce tuto ).
Avatar de l’utilisateur
SPH
Messages : 4726
Inscription : mer. 09/nov./2005 9:53

Message par SPH »

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...
wolfjeremy
Messages : 1202
Inscription : sam. 31/déc./2005 23:52

Message par wolfjeremy »

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
gansta93
Messages : 1448
Inscription : jeu. 26/févr./2004 11:17
Localisation : Le Village
Contact :

Message par gansta93 »

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
Avatar de l’utilisateur
SPH
Messages : 4726
Inscription : mer. 09/nov./2005 9:53

Message par SPH »

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
Avatar de l’utilisateur
SPH
Messages : 4726
Inscription : mer. 09/nov./2005 9:53

Message par SPH »

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
Avatar de l’utilisateur
SPH
Messages : 4726
Inscription : mer. 09/nov./2005 9:53

Message par SPH »

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
Avatar de l’utilisateur
flaith
Messages : 1487
Inscription : jeu. 07/avr./2005 1:06
Localisation : Rennes
Contact :

Message par flaith »

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
Avatar de l’utilisateur
SPH
Messages : 4726
Inscription : mer. 09/nov./2005 9:53

Message par SPH »

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 :)
Ollivier
Messages : 4190
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Message par Ollivier »

@flaith:
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:
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):
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.
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]
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

Ollivier a écrit : Woilà, comme ça, c'est un peu moins flou en Asm!

si tu le dit ! :lol: :lol: :lol:
Ollivier
Messages : 4190
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Message par Ollivier »

@Dobro

ça n'a pas l'air de te convaincre!
Répondre