⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 strcspn.s

📁 ICCAVR中所有的库函数源码
💻 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 + -