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

📄 printf.c

📁 A MP3 Player Source Code, Enjoy it!
💻 C
📖 第 1 页 / 共 2 页
字号:
	mov	a, @r0	mov	r2, a	dec	r0	mov	a, @r0	mov	r1, a	dec	r0printf_get_done:	ret	/* convert binary number in r4/r3/r2/r1 into bcd packed number	 * in r3/r2/r7/r6/r5.  The input number is destroyed in the	 * process, to avoid needing extra memory for the result (and	 * r1 gets used for temporary storage).  dptr is overwritten,	 * but r0 is not changed.	 */printf_int2bcd:#if 1	mov	a, r1	anl	a, #0x0F	mov	dptr, #_int2bcd_0	movc	a, @a+dptr	mov	r5, a	mov	a, r1	swap	a	anl	a, #0x0F	mov	r1, a			// recycle r1 for holding nibble	mov	dptr, #_int2bcd_1	movc	a, @a+dptr	add	a, r5	da	a	mov	r5, a	mov	a, r1	orl	a, #16	movc	a, @a+dptr	addc	a, #0	da	a	mov	r6, a#else	mov	a, r1	mov	b, #100	div	ab	mov	r6, a	mov	b, a	mov	b, #10	div	ab	swap	a	orl	a, b	mov	r5, a#endif	jnb	_short_flag, printf_i2bcd_16	// if 8 bit int, we're done	retprintf_i2bcd_16:	mov	a, r2	anl	a, #0x0F	mov	r1, a	mov	dptr, #_int2bcd_2	movc	a, @a+dptr	add	a, r5	da	a	mov	r5, a	mov	a, r1	orl	a, #16	movc	a, @a+dptr	addc	a, r6	da	a	mov	r6, a	mov	a, r2	swap	a	anl	a, #0x0F	mov	r1, a	mov	dptr, #_int2bcd_3	movc	a, @a+dptr	add	a, r5	da	a	mov	r5, a	mov	a, r1	orl	a, #16	movc	a, @a+dptr	addc	a, r6	da	a	mov	r6, a	mov	a, r1	orl	a, #32	movc	a, @a+dptr	addc	a, #0	da	a	mov	r7, a	jb	_long_flag, printf_i2bcd_32	// if 16 bit int, we're done	retprintf_i2bcd_32:#ifdef LONG_INT	mov	a, r3	anl	a, #0x0F	mov	r1, a	mov	dptr, #_int2bcd_4	movc	a, @a+dptr	add	a, r5	da	a	mov	r5, a	mov	a, r1	orl	a, #16	movc	a, @a+dptr	addc	a, r6	da	a	mov	r6, a	mov	a, r1	orl	a, #32	movc	a, @a+dptr	addc	a, r7	da	a	mov	r7, a	clr	a	addc	a, #0	mov	r2, a	mov	a, r3	swap	a	anl	a, #0x0F	mov	r1, a	mov	dptr, #_int2bcd_5	movc	a, @a+dptr	add	a, r5	da	a	mov	r5, a	mov	a, r1	orl	a, #16	movc	a, @a+dptr	addc	a, r6	da	a	mov	r6, a	mov	a, r1	orl	a, #32	movc	a, @a+dptr	addc	a, r7	da	a	mov	r7, a	mov	a, r1	orl	a, #48	movc	a, @a+dptr	addc	a, r2	da	a	mov	r2, a	mov	a, r4	anl	a, #0x0F	mov	r1, a	mov	dptr, #_int2bcd_6	mov	r3, #0	lcall	printf_bcd_add10	// saves 27 bytes, costs 5 cycles	mov	a, r4	swap	a	anl	a, #0x0F	mov	r1, a	mov	dptr, #_int2bcd_7printf_bcd_add10:	movc	a, @a+dptr	add	a, r5	da	a	mov	r5, a	mov	a, r1	orl	a, #16	movc	a, @a+dptr	addc	a, r6	da	a	mov	r6, a	mov	a, r1	orl	a, #32	movc	a, @a+dptr	addc	a, r7	da	a	mov	r7, a	mov	a, r1	orl	a, #48	movc	a, @a+dptr	addc	a, r2	da	a	mov	r2, a	mov	a, r1	orl	a, #64	movc	a, @a+dptr	addc	a, r3	da	a	mov	r3, a#endif	ret#ifdef FIELD_WIDTHprintf_space_loop:	//mov	a, #' '	mov	a, #32	lcall	printf_putchar	dec	_field_widthprintf_space:	mov	a, _field_width	jnz	printf_space_loop	ret#endif	/* print a hex digit, either upper 4 bit (msn) or lower 4 bits (lsn) */printf_phex_msn:	swap	aprintf_phex_lsn:	anl	a, #15	jnz	printf_phex_ok	jnb	_print_zero_flag, printf_retprintf_phex_ok:	setb	_print_zero_flag	add	a, #0x90	da	a	addc    a, #0x40	da	aprintf_putchar:	ljmp	COUT	;push	dph	;push	dpl	;push	ar0	;mov	dpl, a	;lcall	_putchar	;pop	ar0	;pop	dpl	;pop	dphprintf_ret:	ret	/* print a zero if all the calls to print the digits ended up */	/* being leading zeros */printf_zero:        jb	_print_zero_flag, printf_ret        //mov	a, #'0'        mov	a, #48        ljmp	printf_putchar  printf_end:	_endasm;}/* * #! /usr/bin/perl * for ($d=0; $d < 8; $d++) { * 	$n = 16 ** $d; * 	for ($p=0; $p < 5; $p++) { * 		last unless (((16 ** $d) * 15) / (10 ** ($p * 2))) % 100; * 		printf "code unsigned char int2bcd_%d_%d[15] = {", $d, $p; * 		for ($i=0; $i < 16; $i++) { * 			printf "0x%02d", * 			   (((16 ** $d) * $i) / (10 ** ($p * 2))) % 100; * 			print ", " if $i < 15; * 		} * 		print "};\n"; * 	} * } */code unsigned char int2bcd_0[] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,0x08, 0x09, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15};code unsigned char int2bcd_1[] = {0x00, 0x16, 0x32, 0x48, 0x64, 0x80, 0x96, 0x12,0x28, 0x44, 0x60, 0x76, 0x92, 0x08, 0x24, 0x40,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02};code unsigned char int2bcd_2[] = {0x00, 0x56, 0x12, 0x68, 0x24, 0x80, 0x36, 0x92,0x48, 0x04, 0x60, 0x16, 0x72, 0x28, 0x84, 0x40,0x00, 0x02, 0x05, 0x07, 0x10, 0x12, 0x15, 0x17,0x20, 0x23, 0x25, 0x28, 0x30, 0x33, 0x35, 0x38};code unsigned char int2bcd_3[] = {0x00, 0x96, 0x92, 0x88, 0x84, 0x80, 0x76, 0x72,0x68, 0x64, 0x60, 0x56, 0x52, 0x48, 0x44, 0x40,0x00, 0x40, 0x81, 0x22, 0x63, 0x04, 0x45, 0x86,0x27, 0x68, 0x09, 0x50, 0x91, 0x32, 0x73, 0x14,0x00, 0x00, 0x00, 0x01, 0x01, 0x02, 0x02, 0x02,0x03, 0x03, 0x04, 0x04, 0x04, 0x05, 0x05, 0x06};#ifdef LONG_INTcode unsigned char int2bcd_4[] = {0x00, 0x36, 0x72, 0x08, 0x44, 0x80, 0x16, 0x52,0x88, 0x24, 0x60, 0x96, 0x32, 0x68, 0x04, 0x40,0x00, 0x55, 0x10, 0x66, 0x21, 0x76, 0x32, 0x87,0x42, 0x98, 0x53, 0x08, 0x64, 0x19, 0x75, 0x30,0x00, 0x06, 0x13, 0x19, 0x26, 0x32, 0x39, 0x45,0x52, 0x58, 0x65, 0x72, 0x78, 0x85, 0x91, 0x98};code unsigned char int2bcd_5[] = {0x00, 0x76, 0x52, 0x28, 0x04, 0x80, 0x56, 0x32,0x08, 0x84, 0x60, 0x36, 0x12, 0x88, 0x64, 0x40,0x00, 0x85, 0x71, 0x57, 0x43, 0x28, 0x14, 0x00,0x86, 0x71, 0x57, 0x43, 0x29, 0x14, 0x00, 0x86,0x00, 0x04, 0x09, 0x14, 0x19, 0x24, 0x29, 0x34,0x38, 0x43, 0x48, 0x53, 0x58, 0x63, 0x68, 0x72,0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,0x08, 0x09, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15};code unsigned char int2bcd_6[] = {0x00, 0x16, 0x32, 0x48, 0x64, 0x80, 0x96, 0x12,0x28, 0x44, 0x60, 0x76, 0x92, 0x08, 0x24, 0x40,0x00, 0x72, 0x44, 0x16, 0x88, 0x60, 0x32, 0x05,0x77, 0x49, 0x21, 0x93, 0x65, 0x38, 0x10, 0x82,0x00, 0x77, 0x55, 0x33, 0x10, 0x88, 0x66, 0x44,0x21, 0x99, 0x77, 0x54, 0x32, 0x10, 0x88, 0x65,0x00, 0x16, 0x33, 0x50, 0x67, 0x83, 0x00, 0x17,0x34, 0x50, 0x67, 0x84, 0x01, 0x18, 0x34, 0x51,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01,0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02};code unsigned char int2bcd_7[] = {0x00, 0x56, 0x12, 0x68, 0x24, 0x80, 0x36, 0x92,0x48, 0x04, 0x60, 0x16, 0x72, 0x28, 0x84, 0x40,0x00, 0x54, 0x09, 0x63, 0x18, 0x72, 0x27, 0x81,0x36, 0x91, 0x45, 0x00, 0x54, 0x09, 0x63, 0x18,0x00, 0x43, 0x87, 0x30, 0x74, 0x17, 0x61, 0x04,0x48, 0x91, 0x35, 0x79, 0x22, 0x66, 0x09, 0x53,0x00, 0x68, 0x36, 0x05, 0x73, 0x42, 0x10, 0x79,0x47, 0x15, 0x84, 0x52, 0x21, 0x89, 0x58, 0x26,0x00, 0x02, 0x05, 0x08, 0x10, 0x13, 0x16, 0x18,0x21, 0x24, 0x26, 0x29, 0x32, 0x34, 0x37, 0x40};#endifvoid print(code char *str){	str;	_asmprint_loop:	clr	a	movc	a, @a+dptr	jz	print_end	lcall	COUT	inc	dptr	sjmp	print_loopprint_end:	_endasm;}void print_str(xdata char *str){	str;	_asmprint_str_loop:	movx	a, @dptr	jz	print_str_end	lcall	COUT	inc	dptr	sjmp	print_str_loopprint_str_end:	mov	a, #32	ljmp	COUT	_endasm;}void print_str_n_asm(xdata char *str){	str;	_asmprint_strn_loop:	movx	a, @dptr	jz	print_strn_loop2	lcall	COUT	inc	dptr	djnz	_strcpy_asm_src_addr, print_strn_loop	retprint_strn_loop2:	mov	a, #32	lcall	COUT	djnz	_strcpy_asm_src_addr, print_strn_loop2	_endasm;}void print_hex32(unsigned long ul){	ul;	_asm	setb	_print_zero_flag	push	acc	lcall	printf_phex_msn	pop	acc	lcall	printf_phex_lsn	mov	a, b	lcall	printf_phex_msn	mov	a, b	lcall	printf_phex_lsnprint_h16:	mov	a, dph	lcall	printf_phex_msn	mov	a, dph	lcall	printf_phex_lsn	mov	a, dpl	lcall	printf_phex_msn	mov	a, dpl	lcall	printf_phex_lsn	mov	a, #32	ljmp	COUT	_endasm;}void print_hex16(unsigned int ui){	ui;	_asm	setb	_print_zero_flag	ljmp	print_h16	_endasm;}void print_uint8(unsigned char c){	c;	_asm	clr	_print_zero_flag	mov	a, dpl	mov	b, #100	div	ab	jz	00001$	add	a, #0x30	lcall	COUT	setb	_print_zero_flag00001$:	mov	a, b	mov	b, #10	div	ab	jnz	00002$	jnb	_print_zero_flag, 00003$00002$:	add	a, #0x30	lcall	COUT00003$:	mov	a, b	add	a, #0x30	lcall	COUT	mov	a, #32	ljmp	COUT	_endasm;}void print_char(char c){	c;	_asm	mov	a, dpl	ljmp	COUT	_endasm;}void print_crlf(void){	_asm	mov	a, #13	lcall	COUT	mov	a, #10	ljmp	COUT	_endasm;}

⌨️ 快捷键说明

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