;String-Länge (16bit sogar!) für ATmega
;h#s 01/06
#ifndef STRLEN_I90
#define STRLEN_I90
;Bietet:
; strend1 Z auf String-Ende rücken, versaut R16
; strlen R17:R16 = String-Länge
; strlen1 R17 = String-Länge, MAKRO
strend1: ;String-Ende+1 ermitteln (Z HINTER die Null)
ld r16,Z+ ;kaum ein Unterprogramm wert!
cpi r16,1
brsh strend1
ret ;zurück mit C=1 (!)
strlen: ;String-Länge ermitteln (16bit) - ausführlich
;PE: Z=String-Adresse im RAM
;PA: R17:R16=Länge
;VR: R16-R17
pushhl Z
rcall strend1
movw r17:r16,ZH:ZL
pophl Z
sbc r16,ZL
sbc r17,ZH
ret
.macro strlen1 ;String-Länge ermitteln (8bit) - sehr simpel
;PE: Z=String-Adresse im RAM
;PA: ZL=Länge
;VR: R16=0, R17=ZL, Z
mov r17,ZL
rcall strend1
sbc ZL,r17
.endm
#endif//STRLEN_I90
Detected encoding: UTF-8 | 0
|