2

[code:1:b52f92b417]; Z88 Small C+ Run time Library
; Moved functions over to proper libdefs
; To make startup code smaller and neater!
;
; 6/9/98 djm

XLIB l_and

; "and" HL and DE into HL
.l_and
ld a,l
and e
ld l,a
ld a,h
and d
ld h,a
ret[/code:1:b52f92b417]

[code:1:b52f92b417]; Z88 Small C+ Run time Library
; Moved functions over to proper libdefs
; To make startup code smaller and neater!
;
; 6/9/98 djm

XLIB l_or

; "or" HL and DE into HL
.l_or
ld a,l
or e
ld l,a
ld a,h
or d
ld h,a
ret[/code:1:b52f92b417]
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é

3

tous les calculs logiques sont utilisables en asm, normal, c'est la base de l'asm smile

on peut faire des or, and, xor...

and b ; a=a and b
and %11110000 a=a and %11110000

la syntaxe est la même pour xor, et or

on peut aussi faire plein de trucs en binaire du genre les décalages binaires (tous les bits décalés vers la gauche ou la droite), on peut seter ou resetter des bits d'un registre,........

5

les calculs binaires, c'est ultra puissant en asm, tu fais plein de trucs avec, les routines de multiplications/divisions qui se respectent les utilisent, et plein d'autres aussi smile Seul truc, ça nécessite de réflechir en binaire ou hexadécimal, et non en décimal (en décimal, les or, and, xor, etc ne sont quasiment d'aucune utilité)

imagine par exemple que tu as un nombre à virgule FIXE dans a : les 5 premiers bits sont la partie entière et les 3 derniers la partie décimale
la partie entière est comprise entre 0 et 31, et la partie à virgule entre 0 et 7 (un nombre à vigule fixe est strictement la même chose qu'un nombre entier, sauf qu'on décide juste que les X derniers bits sont la virgule, et les autres sont la partie entière)

Donc tu as ce nombre à virgule fixe, et tu as besoin pour un calcul de ne garder QUE la partie entière ou QUE la partie décimale

garder la partie décimale:

;le nombre est dans a
and %00000111
; le fait de ANDer a avec 00000111 va mettre forcément dans le résultat 0 pour les 5 premiers bits, et laisser les 3 derniers bits tels quels

garder la partie entière:
and %11111000
;ici, c'est le contraire, on garde les 5 premiers bits et on met 0 aux autres
si on veut ensuite utiliser cette partie entière pour des calculs avec d'autres nombres entiers (sans virgule fixe), il faut décaler les 5 bits de la partie entière de 3 bits:
sra a
sra a
sra a

et voilà smile

pour or, par exemple, c'est utilisé pour les sprites, si on veut que les sprites se superposent avec le graphbuffer (en fait, les pixels blanc de la sprite (0) pernnent la valeur du graphbuffer, et les pixels noirs (1) se mettent en noir sur le graph)

pour le xor, ça sert aussi pour les sprites...

Ces instructions permettent aussi des petites optimisations:
or a <=> cp 0 ;mais c'est plus rapide et plus petit
xor a <=> ld a,0 ;idem

8

le and ne remplace pas des cp et des labels, il ne faut pas le prendre dans le sens du and en programmation structurée, qui est beaucoup plus large... En asm, le and ne se prend que dans le sens logique sur des octets...En fait, le and a des propriétés qu'il est souvent pratique d'utiliser comme par exemple quand on veut le reste d'une division par 2,4,8,16... (cf mon topic précédent, où l'exemple était un peu différent mais le résultat exactement le même)

On pourrait surement l'utiliser pour faire des tests du genre x>5 and x<15 mais il faut dans ce cas jongler un peu...

11

Deus makina, pour ton truc, le plus rapide est de faire normalement car si on voulait vraiment utiliser l'instruction and, ça ferai utiliser plein d'instructions, au final, ça serait plus lent un if(x>5 && x<15) peut se traduire comme ça:

ld x,$XX

;test
cp 5
jp m,sinon
cp 15
jp p,sinon

sioui: ;ici, le test x>5 && x<15 est VRAI
.....
sinon: ;ici, le test est FAUX

pour faire un test avec un or, du genre if (x==15 or x==5), on fera:

cp 5
jp z,sioui
cp 15
jp z,sioui

sinon: ;le test est ici FAUX
...
sioui: ;le test est VRAI

kobee, c ça que tu voulais savoir?