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

📄 simpleio.s

📁 chipcom公司CC1100无线模块底层驱动程序
💻 S
📖 第 1 页 / 共 2 页
字号:
	pop R5
	pop R4
	.dbline 137
;     }
	rjmp L57
L56:
	.dbline 139
;     else
;     {
	.dbline 140
;         width -= bi;
	ldd R0,y+54
	ldd R1,y+55
	sub R0,R4
	sbc R1,R5
	std y+55,R1
	std y+54,R0
	.dbline 141
;         if (!left) PutRepChar(fill, width);
	ldd R0,y+40
	ldd R1,y+41
	tst R0
	brne L58
	tst R1
	brne L58
X5:
	.dbline 141
	ldd R18,y+54
	ldd R19,y+55
	ldd R16,y+56
	push R4
	push R5
	rcall _PutRepChar
	pop R5
	pop R4
L58:
	.dbline 142
;         PutStringReverse(buffer, bi);
	movw R18,R4
	movw R16,R28
	rcall _PutStringReverse
	.dbline 143
;         if (left) PutRepChar(fill, width);
	ldd R0,y+40
	ldd R1,y+41
	tst R0
	brne X6
	tst R1
	breq L60
X6:
	.dbline 143
	ldd R18,y+54
	ldd R19,y+55
	ldd R16,y+56
	rcall _PutRepChar
L60:
	.dbline 144
L57:
	.dbline -2
L25:
	adiw R28,42
	rcall pop_gset5
	adiw R28,2
	.dbline 0 ; func end
	ret
	.dbsym r negative 14 S
	.dbsym l left 40 S
	.dbsym l buffer 0 A[40:40]c
	.dbsym r digit 22 S
	.dbsym r bi 4 I
	.dbsym r uvalue 20 i
	.dbsym l fill 56 c
	.dbsym l width 54 I
	.dbsym l radix 52 I
	.dbsym r value 22 I
	.dbend
	.dbfunc s FormatItem _FormatItem fpc
;           fill -> R14
;       leftjust -> R20,R21
;     fieldwidth -> y+3
;          radix -> R10,R11
;              c -> R12
;              a -> y+17
;              f -> y+15
	.even
_FormatItem:
	rcall push_arg4
	rcall push_gset5
	sbiw R28,5
	.dbline -1
	.dbline 149
;     }
; }
; 
; 
; static char *FormatItem(char *f, int a)
; {
	.dbline 151
;     char c;
;     int fieldwidth = 0;
	clr R0
	clr R1
	std y+4,R1
	std y+3,R0
	.dbline 152
;     int leftjust = FALSE;
	clr R20
	clr R21
	.dbline 153
;     int radix = 0;
	clr R10
	clr R11
	.dbline 154
;     char fill = ' ';
	ldi R24,32
	mov R14,R24
	.dbline 156
; 
;     if (*f == '0') fill = '0';
	ldd R30,y+15
	ldd R31,y+16
	ldd R24,z+0
	cpi R24,48
	breq X18
	rjmp L66
X18:
	.dbline 156
	ldi R24,48
	mov R14,R24
	rjmp L66
L65:
	.dbline 158
;     while ((c = *f++)!=0)
;     {
	.dbline 159
;         if (c >= '0' && c <= '9')
	mov R24,R12
	cpi R24,48
	brlo L68
	ldi R24,57
	cp R24,R12
	brlo L68
	.dbline 160
;         {
	.dbline 161
;             fieldwidth = (fieldwidth * 10) + (c - '0');
	ldi R16,10
	ldi R17,0
	ldd R18,y+3
	ldd R19,y+4
	rcall empy16s
	movw R2,R16
	mov R24,R12
	clr R25
	sbiw R24,48
	add R2,R24
	adc R3,R25
	std y+4,R3
	std y+3,R2
	.dbline 162
;         }
	rjmp L69
L68:
	.dbline 164
;         else
;         {
	.dbline 165
;             switch (c)
	mov R22,R12
	clr R23
	cpi R22,88
	ldi R30,0
	cpc R23,R30
	brne X19
	rjmp L93
X19:
	ldi R24,88
	ldi R25,0
	cp R24,R22
	cpc R25,R23
	brlt L96
L95:
	cpi R22,37
	ldi R30,0
	cpc R23,R30
	brne X20
	rjmp L74
X20:
	ldi R24,37
	ldi R25,0
	cp R24,R22
	cpc R25,R23
	brlt L98
L97:
	cpi R22,0
	cpc R22,R23
	brne X21
	rjmp L73
X21:
X10:
	rjmp L70
L98:
	cpi R22,45
	ldi R30,0
	cpc R23,R30
	brne X22
	rjmp L75
X22:
	rjmp L70
L96:
	cpi R22,105
	ldi R30,0
	cpc R23,R30
	brne X23
	rjmp L90
X23:
	ldi R24,105
	ldi R25,0
	cp R24,R22
	cpc R25,R23
	brlt L100
L99:
	cpi R22,99
	ldi R30,0
	cpc R23,R30
	brne X24
	rjmp L76
X24:
	cpi R22,100
	ldi R30,0
	cpc R23,R30
	brne X25
	rjmp L90
X25:
	rjmp L70
L100:
	cpi R22,111
	ldi R30,0
	cpc R23,R30
	brne X26
	rjmp L94
X26:
	cpi R22,111
	ldi R30,0
	cpc R23,R30
	brge X27
	rjmp L70
X27:
L101:
	cpi R22,115
	ldi R30,0
	cpc R23,R30
	brne X28
	rjmp L83
X28:
	cpi R22,117
	ldi R30,0
	cpc R23,R30
	brne X29
	rjmp L91
X29:
	cpi R22,120
	ldi R30,0
	cpc R23,R30
	brne X30
	rjmp L92
X30:
	rjmp L70
X11:
	.dbline 166
;             {
L73:
	.dbline 168
;                 case '\000':
;                     return(--f);
	ldd R24,y+15
	ldd R25,y+16
	sbiw R24,1
	std y+16,R25
	std y+15,R24
	movw R16,R24
	rjmp L62
L74:
	.dbline 170
;                 case '%':
;                     putchar('%');
	ldi R16,37
	rcall _putchar
	.dbline 171
;                     return(f);
	ldd R16,y+15
	ldd R17,y+16
	rjmp L62
L75:
	.dbline 172
;                 case '-': leftjust = TRUE;
	ldi R20,1
	ldi R21,0
	.dbline 173
;                     break;
	rjmp L71
L76:
	.dbline 175
;                 case 'c':
;                     {
	.dbline 176
;                       if (leftjust) putchar(a & 0x7f);
	cpi R20,0
	cpc R20,R21
	breq L77
X12:
	.dbline 176
	ldd R16,y+17
	ldd R17,y+18
	andi R16,127
	andi R17,0
	rcall _putchar
L77:
	.dbline 177
;                       if (fieldwidth > 0) PutRepChar(fill, fieldwidth - 1);
	clr R2
	clr R3
	ldd R0,y+3
	ldd R1,y+4
	cp R2,R0
	cpc R3,R1
	brge L79
	.dbline 177
	movw R18,R0
	subi R18,1
	sbci R19,0
	mov R16,R14
	rcall _PutRepChar
L79:
	.dbline 178
;                       if (!leftjust) putchar(a & 0x7f);
	cpi R20,0
	cpc R20,R21
	brne L81
X13:
	.dbline 178
	ldd R16,y+17
	ldd R17,y+18
	andi R16,127
	andi R17,0
	rcall _putchar
L81:
	.dbline 179
;                       return(f);
	ldd R16,y+15
	ldd R17,y+16
	rjmp L62
L83:
	.dbline 182
;                     }
;                 case 's':
;                     {
	.dbline 183
;                         if (leftjust) putstr((char *) a);
	cpi R20,0
	cpc R20,R21
	breq L84
X14:
	.dbline 183
	ldd R16,y+17
	ldd R17,y+18
	rcall _putstr
L84:
	.dbline 184
;                         if (fieldwidth > strlen((char *) a))
	ldd R16,y+17
	ldd R17,y+18
	rcall _strlen
	ldd R0,y+3
	ldd R1,y+4
	cp R16,R0
	cpc R17,R1
	brge L86
	.dbline 185
; 	                        PutRepChar(fill, fieldwidth - strlen((char *)a));
	ldd R16,y+17
	ldd R17,y+18
	rcall _strlen
	ldd R18,y+3
	ldd R19,y+4
	sub R18,R16
	sbc R19,R17
	mov R16,R14
	rcall _PutRepChar
L86:
	.dbline 186
;                         if (!leftjust) putstr((char *) a);
	cpi R20,0
	cpc R20,R21
	brne L88
X15:
	.dbline 186
	ldd R16,y+17
	ldd R17,y+18
	rcall _putstr
L88:
	.dbline 187
;                         return(f);
	ldd R16,y+15
	ldd R17,y+16
	rjmp L62
L90:
	.dbline 191
;                     }
;                 case 'd':
;                 case 'i':
;                     radix = -10;break;
	ldi R24,-10
	ldi R25,-1
	movw R10,R24
	.dbline 191
	rjmp L71
L91:
	.dbline 193
;                 case 'u':
;                     radix = 10;break;
	ldi R24,10
	ldi R25,0
	movw R10,R24
	.dbline 193
	rjmp L71
L92:
	.dbline 195
;                 case 'x':
;                     radix = 16;break;
	ldi R24,16
	ldi R25,0
	movw R10,R24
	.dbline 195
	rjmp L71
L93:
	.dbline 197
;                 case 'X':
;                     radix = 16;break;
	ldi R24,16
	ldi R25,0
	movw R10,R24
	.dbline 197
	rjmp L71
L94:
	.dbline 199
;                 case 'o':
;                     radix = 8;break;
	ldi R24,8
	ldi R25,0
	movw R10,R24
	.dbline 199
	rjmp L71
L70:
	.dbline 201
;                 default :
;                     radix = 3;break;/* unknown switch! */
	ldi R24,3
	ldi R25,0
	movw R10,R24
	.dbline 201
L71:
	.dbline 203
;             }
;         }
L69:
	.dbline 204
;         if (radix) break;
	tst R10
	brne X16
	tst R11
	breq L102
X16:
	.dbline 204
	rjmp L67
L102:
	.dbline 205
L66:
	.dbline 157
	ldd R30,y+15
	ldd R31,y+16
	ld R2,Z+
	std y+16,R31
	std y+15,R30
	mov R12,R2
	tst R12
	breq X31
	rjmp L65
X31:
L67:
	.dbline 206
;     }
;     if (leftjust) fieldwidth = -fieldwidth;
	cpi R20,0
	cpc R20,R21
	breq L104
X17:
	.dbline 206
	ldd R24,y+3
	ldd R25,y+4
	com R24
	com R25
	subi R24,0xFF
	sbci R25,0xFF
	std y+4,R25
	std y+3,R24
L104:
	.dbline 207
;     PutNumber(a, radix, fieldwidth, fill);
	std y+2,R14
	ldd R0,y+3
	ldd R1,y+4
	std y+1,R1
	std y+0,R0
	movw R18,R10
	ldd R16,y+17
	ldd R17,y+18
	rcall _PutNumber
	.dbline 208
;     return(f);
	ldd R16,y+15
	ldd R17,y+16
	.dbline -2
L62:
	adiw R28,5
	rcall pop_gset5
	adiw R28,4
	.dbline 0 ; func end
	ret
	.dbsym r fill 14 c
	.dbsym r leftjust 20 I
	.dbsym l fieldwidth 3 I
	.dbsym r radix 10 I
	.dbsym r c 12 c
	.dbsym l a 17 I
	.dbsym l f 15 pc
	.dbend
	.dbfunc e printf _printf fV
;           argP -> R20,R21
;              f -> y+2
	.even
_printf::
	rcall push_arg4
	rcall push_gset1
	.dbline -1
	.dbline 216
; }
; 
; #define vaStart(list, param) list = (char*)((int)&param + sizeof(param))
; #define vaArg(list, type) ((type *)(list += sizeof(type)))[-1]
; #define vaEnd(list)
; 
; void printf(char *f, ...)       /* variable arguments */
; {
	.dbline 219
; 	char *argP;
; 
; 	vaStart(argP,f);		/* point at the end of the format string */
	movw R20,R28
	subi R20,254  ; offset = 2
	sbci R21,255
	subi R20,254  ; offset = 2
	sbci R21,255
	rjmp L108
L107:
	.dbline 221
; 	while (*f)
; 	{			/* this works because args are all ints */
	.dbline 222
; 		if (*f == '%')
	ldd R30,y+2
	ldd R31,y+3
	ldd R24,z+0
	cpi R24,37
	brne L110
	.dbline 223
; 			f = FormatItem(f + 1, vaArg(argP, int));
	movw R24,R20
	adiw R24,2
	movw R20,R24
	movw R30,R24
	sbiw R30,2
	ldd R18,z+0
	ldd R19,z+1
	ldd R16,y+2
	ldd R17,y+3
	subi R16,255  ; offset = 1
	sbci R17,255
	rcall _FormatItem
	std y+3,R17
	std y+2,R16
	rjmp L111
L110:
	.dbline 225
; 		else
; 			putchar(*f++);
	ldd R30,y+2
	ldd R31,y+3
	ld R16,Z+
	std y+3,R31
	std y+2,R30
	rcall _putchar
L111:
	.dbline 226
L108:
	.dbline 220
	ldd R30,y+2
	ldd R31,y+3
	ldd R2,z+0
	tst R2
	brne L107
	.dbline 227
; 	}
; 	vaEnd(argP);
	.dbline -2
L106:
	rcall pop_gset1
	adiw R28,4
	.dbline 0 ; func end
	ret
	.dbsym r argP 20 pc
	.dbsym l f 2 pc
	.dbend

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -