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

📄 printf_fast.asm

📁 sdcc的win版本.是small device c compiler的意思.支持8051和z80.是一个遵循GPL的软件,不过他的库函数是LGPL的,允许商业联结,可以用在自己的软件里
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;--------------------------------------------------------
; File Created by SDCC : FreeWare ANSI-C Compiler
; Version 2.3.1-pj3 Sun Jan 20 13:10:05 2002

;--------------------------------------------------------
	.module printf_fast
	
;--------------------------------------------------------
; Public variables in this module
;--------------------------------------------------------
	.globl _int2bcd_7
	.globl _int2bcd_6
	.globl _int2bcd_5
	.globl _int2bcd_4
	.globl _int2bcd_3
	.globl _int2bcd_2
	.globl _int2bcd_1
	.globl _int2bcd_0
	.globl _printf_fast
;--------------------------------------------------------
; special function registers
;--------------------------------------------------------
;--------------------------------------------------------
; special function bits 
;--------------------------------------------------------
;--------------------------------------------------------
; internal ram data
;--------------------------------------------------------
	.area DSEG    (DATA)
_field_width:
	.ds 1
;--------------------------------------------------------
; overlayable items in internal ram 
;--------------------------------------------------------
	.area OSEG    (OVR,DATA)
;--------------------------------------------------------
; indirectly addressable internal ram data
;--------------------------------------------------------
	.area ISEG    (DATA)
;--------------------------------------------------------
; bit data
;--------------------------------------------------------
	.area BSEG    (BIT)
_long_flag:
	.ds 1
_short_flag:
	.ds 1
_print_zero_flag:
	.ds 1
_negative_flag:
	.ds 1
_field_width_flag:
	.ds 1
;--------------------------------------------------------
; external ram data
;--------------------------------------------------------
	.area XSEG    (XDATA)
;--------------------------------------------------------
; external initialized ram data
;--------------------------------------------------------
	.area XISEG   (XDATA)
;--------------------------------------------------------
; global & static initialisations
;--------------------------------------------------------
	.area GSINIT  (CODE)
	.area GSFINAL (CODE)
	.area GSINIT  (CODE)
;--------------------------------------------------------
; Home
;--------------------------------------------------------
	.area HOME    (CODE)
	.area CSEG    (CODE)
;--------------------------------------------------------
; code
;--------------------------------------------------------
	.area CSEG    (CODE)
;------------------------------------------------------------
;Allocation info for local variables in function 'printf_fast'
;------------------------------------------------------------
;fmt                       Allocated to stack - offset -4
;	printf_fast.c 38
;	-----------------------------------------
;	 function printf_fast
;	-----------------------------------------
_printf_fast:
	ar2 = 0x02
	ar3 = 0x03
	ar4 = 0x04
	ar5 = 0x05
	ar6 = 0x06
	ar7 = 0x07
	ar0 = 0x00
	ar1 = 0x01
	push	_bp
	mov	_bp,sp
;	printf_fast.c 651
;	genInline
printf_begin:
	        mov a, _bp
	        add a, #253
	        mov r0, a
	        mov dph, @r0
	        dec r0
	        mov dpl, @r0
	        dec r0
printf_main_loop:
	        clr a
	        movc a, @a+dptr
	        inc dptr
	        cjne a, #37, printf_normal
printf_format:
	        clr _long_flag
	        clr _short_flag
	        clr _print_zero_flag
	        clr _negative_flag
	        clr _field_width_flag
	        mov _field_width, #0
printf_format_loop:
	        clr a
	        movc a, @a+dptr
	        inc dptr
	        add a, #198
	        jc printf_nondigit1
	        add a, #10
	        jnc printf_nondigit2
printf_digit:
	        setb _field_width_flag
	        mov r1, a
	        mov a, _field_width
	        mov b, #10
	        mul ab
	        add a, r1
	        mov _field_width, a
	        sjmp printf_format_loop
printf_nondigit1:
	        add a, #10
printf_nondigit2:
	        add a, #48
printf_format_l:
	        cjne a, #108, printf_format_h
	        setb _long_flag
	        sjmp printf_format_loop
printf_format_h:
	        cjne a, #104, printf_format_s
	        setb _short_flag
	        sjmp printf_format_loop
printf_format_s:
	        cjne a, #115, printf_format_d
	        ljmp printf_string
printf_format_d:
	        cjne a, #100, printf_format_u
	        lcall printf_get_int
	        ljmp printf_int
printf_format_u:
	        cjne a, #117, printf_format_c
	        lcall printf_get_int
	        ljmp printf_uint
printf_format_c:
	        cjne a, #99, printf_format_x
	        mov a, @r0
	        dec r0
	        sjmp printf_char
printf_format_x:
	        cjne a, #120, printf_normal
	        ljmp printf_hex
printf_normal:
	        jz printf_eot
printf_char:
	        lcall printf_putchar
	        sjmp printf_main_loop
printf_eot:
	        ljmp printf_end
printf_string:
	        push dph
	        push dpl
	        mov b, @r0
	        dec r0
	        mov dph, @r0
	        dec r0
	        mov dpl, @r0
	        dec r0
	        jnb _field_width_flag, printf_str_loop
	        push dpl
	        push dph
printf_str_fw_loop:
	        lcall __gptrget
	        jz printf_str_space
	        inc dptr
	        dec _field_width
	        mov a, _field_width
	        jnz printf_str_fw_loop
printf_str_space:
	        lcall printf_space
	        pop dph
	        pop dpl
printf_str_loop:
	        lcall __gptrget
	        jz printf_str_done
	        inc dptr
	        lcall printf_putchar
	        sjmp printf_str_loop
printf_str_done:
	        pop dpl
	        pop dph
	        ljmp printf_main_loop
;	#line 201 "printf_fast.c"
printf_hex:
	        lcall printf_hex8
	        jb _short_flag, printf_hex_end
	        lcall printf_hex8
	        jnb _long_flag, printf_hex_end
	        lcall printf_hex8
	        lcall printf_hex8
printf_hex_end:
	        lcall printf_zero
	        ljmp printf_main_loop
printf_hex8:
	        mov a, @r0
	        lcall printf_phex_msn
	        mov a, @r0
	        dec r0
	        ljmp printf_phex_lsn
;	#line 238 "printf_fast.c"
printf_int:
	        mov a, r5
	        jnb acc.7, printf_uint
	        setb _negative_flag
	        mov a, r1
	        cpl a
	        addc a, #1
	        mov r1, a
	        jb _short_flag, printf_uint
	        mov a, r2
	        cpl a
	        addc a, #0
	        mov r2, a
	        jnb _long_flag, printf_uint
	        mov a, r3
	        cpl a
	        addc a, #0
	        mov r3, a
	        mov a, r4
	        cpl a
	        addc a, #0
	        mov r4, a
printf_uint:
	        jb _short_flag, printf_uint_ck8
	        jnb _long_flag, printf_uint_ck16
printf_uint_ck32:
	        mov a, r3
	        jnz printf_uint_begin
	        mov a, r4
	        jnz printf_uint_begin
	        clr _long_flag
printf_uint_ck16:
	        mov a, r2
	        jnz printf_uint_begin
	        setb _short_flag
printf_uint_ck8:
	        mov a, r1
	        jnz printf_uint_begin
	        jnb _field_width_flag, printf_uint_zero
	        dec _field_width
	        lcall printf_space
printf_uint_zero:
	        mov a, #48
	        lcall printf_putchar
	        ljmp printf_main_loop
printf_uint_begin:
	        push dpl
	        push dph
	        lcall printf_int2bcd
	        jnb _field_width_flag, printf_uifw_end
printf_uifw_32:
	        mov r1, #10
	        jnb _long_flag, printf_uifw_16
	        mov a, r3
	        anl a, #0xF0
	        jnz printf_uifw_sub
	        dec r1
	        mov a, r3
	        anl a, #0x0F
	        jnz printf_uifw_sub
	        dec r1
	        mov a, r2
	        anl a, #0xF0
	        jnz printf_uifw_sub
	        dec r1
	        mov a, r2
	        anl a, #0x0F
	        jnz printf_uifw_sub
	        dec r1
	        mov a, r7
	        anl a, #0xF0
	        jnz printf_uifw_sub
printf_uifw_16:
	        mov r1, #5
	        jb _short_flag, printf_uifw_8
	        mov a, r7
	        anl a, #0x0F
	        jnz printf_uifw_sub
	        dec r1
	        mov a, r6
	        anl a, #0xF0
	        jnz printf_uifw_sub
printf_uifw_8:
	        mov r1, #3
	        mov a, r6
	        anl a, #0x0F
	        jnz printf_uifw_sub
	        dec r1
	        mov a, r5
	        anl a, #0xF0
	        jnz printf_uifw_sub
	        dec r1
printf_uifw_sub:
	        ;r1 has the number of digits for the number
	        mov a, _field_width
	        mov c, _negative_flag
	        subb a, r1
	        jc printf_uifw_end
	        mov _field_width, a
	        push ar3
	        push ar2
	        push ar7
	        push ar6
	        push ar5
	        lcall printf_space
	        pop ar5
	        pop ar6
	        pop ar7
	        pop ar2
	        pop ar3
printf_uifw_end:
printf_uint_doit:
	        jnb _negative_flag, printf_uint_pos
	        mov a, #45
	        lcall printf_putchar
printf_uint_pos:
	        jb _short_flag, printf_uint8
	        jnb _long_flag, printf_uint16
printf_uint32:
	        push ar5
	        push ar6
	        push ar7
	        mov dpl, r2
	        mov a, r3
	        mov dph, a
	        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
	        pop acc
	        mov dpl, a
	        lcall printf_phex_msn
	        mov a, dpl
	        pop dph
	        pop dpl
	        sjmp printf_uint16a
printf_uint16:
	        mov dpl, r5
	        mov dph, r6
	        mov a, r7
printf_uint16a:
	        lcall printf_phex_lsn
	        mov a, dph
	        lcall printf_phex_msn
	        mov a, dph
	        sjmp printf_uint8a
printf_uint8:
	        mov dpl, r5
	        mov a, r6
printf_uint8a:
	        lcall printf_phex_lsn
	        mov a, dpl
	        lcall printf_phex_msn
	        mov a, dpl
	        lcall printf_phex_lsn
	        lcall printf_zero
	        pop dph
	        pop dpl
	        ljmp printf_main_loop
;	#line 455 "printf_fast.c"
printf_get_int:
	        mov a, @r0
	        mov r1, a
	        mov r5, a
	        dec r0
	        jb _short_flag, printf_get_done
	        mov r2, ar1
	        mov a, @r0
	        mov r1, a
	        dec r0
	        jnb _long_flag, printf_get_done
	        mov r4, ar2
	        mov r3, ar1
	        mov a, @r0
	        mov r2, a
	        dec r0
	        mov a, @r0
	        mov r1, a
	        dec r0
printf_get_done:
	        ret
;	#line 490 "printf_fast.c"
printf_int2bcd:
	        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
	        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
	        jnb _short_flag, printf_i2bcd_16
	        ret
printf_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
	        ret
printf_i2bcd_32:
	        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

⌨️ 快捷键说明

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