1

Bonjours,
une petite question en passant
attention je vais peut-etre dire beaucoup de conneries dans ce messages, je vous demande juste de me corriger grin
1- les nombres signés sont reconnus par l'activation d'un flag, ce qui fait qu'on peut mettre des nombres 2 fois moins grands dans les registres
2- comment cela se passe t-il si on additionne un registre non signé avec un signé et qu'au final cela donne un nombre négatif ???
3- peut-on mettre un nombre signé dans une variable ???
4- comment faire une table avec des nombres négatif??
table:
dc.w 25,-35,25 ???
5- comment marchent les autres operations avec des nombres signés et non signés
6- faut t'il convertir le registres non signés en signés quand o fait des opérations avec des nombres signes???

et question subsidiare:
peut-on faire un btest sur un word (exemple tester le bit 15 d'un word) je pense que oui mais bon ............. smile

merci de votre attention smile
En préretraitre

2

Ah que de questions.
Pour l'asm, un nombe signe ou non signe, c'est la meme chose.

Seules certaines instructions impliquent implicemtenent que le nombre soi signe ou non signe :
Les instruct de comparaisons
+ bgt / ble / ... => Signes
+ bhi / bcc / bcs => Non signes
Par extenstion les dbxx et les sxx (ou xx est le prefixe de comparaison)?.

Y'a aussi les mulu / divu (non signe) et muls / divs

Le reste ca ne change rien !
Si, dans add.w d0,a0, d0 est signe. (Lorsque tu ajoutes un reg de donnee a un reg d'adresse, il est signe)

Pas de binz avec la table.

Et normalement tu ne melanges pas des variables signes ou non signes (Non sens)
Si quand meme c necesaire, tu fais la conversion a la main (Le test de depassemnt de capacite).

Pas de pb pour le btst (Plus rapide un test.w blt wink)

3

donc si j'ajoute d1 et d2 avec d1 qui a 5 et d2 qui a -12, le resultat (qqsoit le registre) vaudra 7???
sinon, merci beaucoup smile mais c quoi ca ???
"Plus rapide un test.w blt smile) "
merci beaucoup, cela va me servir smile
En préretraitre

4

Les entiers signés sont des entiers complémentés à deux pour les nombres négatifs. Il te suffit de tester le bit de poids fort pour savoir si le nombre est négatif ou pas. S'il est positif, il ne change pas entre signé et non signé.

blt = Branch if Less Than
[edit]Edité par Miles le 27-11-2001 à 15:25:03[/edit]
Site : http://www.phareaway.com/
Membre du groupe Phare Away et webmaster du site

5

Le resultat sera '-7' !
Et si ton nombre non signe depasse 32K, alors le resultat est en general inconnu (mais calculable).
btst.w #15,d0
beq.s positif
<=>
tst.w d0
bge.s positif

6

je suis pas d'accord,
btst.W #15,d0 est compilé mais le bit testé sera le n°7, et pas le 15.
je sais ça car j'ai perdu plein de temps à cause de cette connerie
:D

7

En effet, btst.w n'existe pas. On a le choix entre btst.l et btst.b. Pour btst.w #15,d0, il faut coder btst.l #15,d0. (A68k ne rejette pas encore ce genre d'instructions, mais ça va venir.)
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

8

Et pour les nombres signés ou non signés:

Un entier signé X est enregistré sous forme du plus petit entier positif ou nul Y congru à X modulo 2^n (c'est-à-dire le reste de la division euclidienne de X par 2^n, ou encore: Y=mod(X,2^n)), où n est la taille en bits sur laquelle on travaille: 8 pour .b, 16 pour .w et 32 pour .l.
Donc:
1. Y est un entier compris entre 0 et 2^n-1.
2. Donc Y est un entier non signé de taille n bits.
3. Y = X [2^n]
4. Si X>=0, Y=X.
5. Si X<0, Y=X+2^n.
6. Si Y<2^(n-1), X>=0.
7. D'après 6 et 4, si Y<2^(n-1), X=Y.
8. Si Y>=2^(n-1), X<0.
9. D'après 7 et 5, si Y>=2^(n-1), X=Y-2^n.

Considérons maintenant 2 pairs d'entiers: X1 et sa représentation non signée Y1, et X2 et sa représentation non signée Y2.
Soit Y3=mod(Y1+Y2,2^n) et Y4=mod(Y1-Y2,2^n).
D'après 3:
10. X1+X2=Y1+Y2 [2^n]
11. Donc Y3=mod(X1+X2,2^n).
12. X1-X2=Y1-Y2 [2^n]
13. Donc Y4=mod(X1-X2,2^n).

Donc, en supposant pour la simplicité que l'on travaille sur un octet (n=8), et en posant [+] pour l'opération ADD (c'est-à-dire a[+]b=mod(a+b,2^n)):
Y3 = 5[+](-12) = 5[+](2^8-12) = 5[+](256-12) = 5[+]244 = 249
(Ou alors, en utilisant 11.: Y3=mod(5+(-12),2^8)=mod(5-12,256)=mod(-7,256)=-7+256=249 ce qui revient au même.)
L'interprétation non signée de 5[+](-12) est donc 249. D'après 9., comme 249>2^(8-1)=2^7=128, l'interprétation signée de 5[+](-12) est 249-2^8=249-256=-7 comme l'a dit PpHd.
[edit]Edité par Kevin Kofler le 28-11-2001 à 00:04:02[/edit]
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

9

en complément à 2, si tu as n un entier, sa representation en binaire est representée par (not n)-1.
En faisant des tests, on se rend compte que ca rend totalement compatible avec une addition normale, comme si le nombre n'était pas signé.
et donc en 8 bits, un nb signé appartient a [|-128...127|]