CODINGApprendre pas à pas la programmation en assembleur Z80 ★ Programmation avancée, routines utiles ★

Routines de gestion de chaines de caractères

Gestion des chaines de caractères en assembleur Z80


Conversion d'une chaine ASCII en entier 32 bits

; HL = chaine de caractères
; résultat dans DE:HL
atoi ; nom de cette fonction en langage C
exx
xor a ; on initialise le résultat à zéro
ld h,a : ld l,a : ld d,a : ld e,a
exx

ld a,(hl) : inc hl
sub 48 : jr c,.sortie
cp 10 : jr nc,.sortie
exx : ld l,a : exx ; on initialise la première unité
; itérations suivantes
.loop
ld a,(hl) : inc hl
sub 48 : jr c,.sortie
cp 10 : jr nc,.sortie
exx
; multiplication par 10 du nombre 32 bits DE:HL
add hl,hl : rl e : rl d ; multiplication par deux
push de,hl ; on sauvegarde notre nombre x 2
add hl,hl : rl e : rl d ; multiplication par quatre
add hl,hl : rl e : rl d ; multiplication par huit
; additionner la valeur x 2 à la valeur x 8 pour faire x 10
pop bc : add hl,bc
ex hl,de : pop bc : adc hl,bc : ex hl,de
ld b,0 : ld c,a : add hl,bc ; on ajoute la nouvelle unité au nombre
exx
jr .loop
.sortie
exx ; on active le jeu secondaire où est stocké notre résultat
ret


Recopie d'une chaine de caractères (terminateur à zéro)

; HL=chaine source
; DE=destination
strcpy
xor a
.loop
cp (hl)
ldi
jr nz,.loop
ret


Concaténer une chaine de caractères sur une autre

; HL=destination
; DE=chaine à concaténer
strcat
xor a
ld b,a
ld c,a
cpir
dec hl
ex hl,de
jp strcpy


Calculer la longueur d'une chaine de caractères

; HL=chaine source
; résultat dans HL
strlen
xor a
ld d,h : ld e,l ; copier le pointeur de la chaine
cpir
scf ; forcer la retenue pour créer un -1 supplémentaire à la soustraction
sbc hl,de ; soustraire le pointeur de fin moins un donne la longueur
ret


Comparer deux chaines de caractères

; HL=première chaine
; DE=deuxième chaine
; résultat dans le flag Z, Z=chaines identiques NZ=différentes
; en cas de chaines différentes, C=1 si la chaine en HL est plus forte, 0 sinon
strcmp
ld a,(de) ; lire le caractère de la première chaine
sub (hl) ; on réalise une soustraction avec celui de la deuxième
ret nz ; si les caractères sont différents, on quitte
add (hl) ; est-ce que les deux chaines sont terminées?
ret z
inc de
inc hl
jr strcmp


★ ANNÉE: 2025
★ AUTEUR: Roudoudou

Je participe au site:

» Vous avez remarqué une erreur dans ce texte ?
» Aidez-nous à améliorer cette page : en nous contactant via le forum ou par email.

CPCrulez[Content Management System] v8.732-desktop/c
Page créée en 372 millisecondes et consultée 4 fois

L'Amstrad CPC est une machine 8 bits à base d'un Z80 à 4MHz. Le premier de la gamme fut le CPC 464 en 1984, équipé d'un lecteur de cassettes intégré il se plaçait en concurrent  du Commodore C64 beaucoup plus compliqué à utiliser et plus cher. Ce fut un réel succès et sorti cette même années le CPC 664 équipé d'un lecteur de disquettes trois pouces intégré. Sa vie fut de courte durée puisqu'en 1985 il fut remplacé par le CPC 6128 qui était plus compact, plus soigné et surtout qui avait 128Ko de RAM au lieu de 64Ko.