?? strcspn.s
字號:
.area text
;
; size_t strcspn(char *s1, char *s2)
; {
; size_t i;
; int j;
; for (i = 0; *s1; s1++, i++)
; {
; for (j = 0; s2[j]; j++)
; if (*s1 == s2[j]) return i;
; }
; return i;
; }
;
; char *strpbrk(char *s1, char *s2)
; {
; int i = strcspn(s1, s2);
; if (s1[i]) return (char *)&s1[i];
; else return 0;
; }
;
_strcspn::
mov R30,R16 ; Z = s1;
mov R31,R17
ldi R16,0 ; i = 0;
ldi R17,0
strcspn1:
ld R0,Z+ ; R0 = *Z++;
tst R0 ; if (!R0)
breq strcspnx ; return i;
mov R26,R18 ; X = s2;
mov R27,R19 ;
strcspn2:
ld R1,X+ ; R1 = *X++;
cp R0,R1 ; if (R0 == R1)
breq strcspnx ; return i;
tst R1
brne strcspn2 ; loop thru s2
subi R16,<(-1)
sbci R17,>(-1) ; i++;
rjmp strcspn1 ; loop thru s1
strcspnx:
ret
;
;
_strpbrk::
rcall _strcspn ; for we know strcspn above,
ldi R17,0 ; we may use a bad trick, i.e.
ld R16,-Z ; use Z as the pointer needed:
tst R16 ; if (!*--Z)
breq strpbrkx ; return 0;
mov R16,R30 ; else
mov R17,R31 ; return Z;
strpbrkx:
ret
;
;<eof; 2003-08-03 ja>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -