📄 printf_fast.asm
字号:
;--------------------------------------------------------; File Created by SDCC : FreeWare ANSI-C Compiler; Version 2.3.0 Thu Sep 20 10:57:20 2001;-------------------------------------------------------- .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);--------------------------------------------------------; 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 651printf_begin: mov a, _bp add a, #253 mov r0, a mov dph, @r0 dec r0 mov dpl, @r0 dec r0printf_main_loop: clr a movc a, @a+dptr inc dptr cjne a, #37, printf_normalprintf_format: clr _long_flag clr _short_flag clr _print_zero_flag clr _negative_flag clr _field_width_flag mov _field_width, #0printf_format_loop: clr a movc a, @a+dptr inc dptr add a, #198 jc printf_nondigit1 add a, #10 jnc printf_nondigit2printf_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_loopprintf_nondigit1: add a, #10printf_nondigit2: add a, #48printf_format_l: cjne a, #108, printf_format_h setb _long_flag sjmp printf_format_loopprintf_format_h: cjne a, #104, printf_format_s setb _short_flag sjmp printf_format_loopprintf_format_s: cjne a, #115, printf_format_d ljmp printf_stringprintf_format_d: cjne a, #100, printf_format_u lcall printf_get_int ljmp printf_intprintf_format_u: cjne a, #117, printf_format_c lcall printf_get_int ljmp printf_uintprintf_format_c: cjne a, #99, printf_format_x mov a, @r0 dec r0 sjmp printf_charprintf_format_x: cjne a, #120, printf_normal ljmp printf_hexprintf_normal: jz printf_eotprintf_char: lcall printf_putchar sjmp printf_main_loopprintf_eot: ljmp printf_endprintf_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 dphprintf_str_fw_loop: lcall __gptrget jz printf_str_space inc dptr dec _field_width mov a, _field_width jnz printf_str_fw_loopprintf_str_space: lcall printf_space pop dph pop dplprintf_str_loop: lcall __gptrget jz printf_str_done inc dptr lcall printf_putchar sjmp printf_str_loopprintf_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_hex8printf_hex_end: lcall printf_zero ljmp printf_main_loopprintf_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, aprintf_uint: jb _short_flag, printf_uint_ck8 jnb _long_flag, printf_uint_ck16printf_uint_ck32: mov a, r3 jnz printf_uint_begin mov a, r4 jnz printf_uint_begin clr _long_flagprintf_uint_ck16: mov a, r2 jnz printf_uint_begin setb _short_flagprintf_uint_ck8: mov a, r1 jnz printf_uint_begin jnb _field_width_flag, printf_uint_zero dec _field_width lcall printf_spaceprintf_uint_zero: mov a, #48 lcall printf_putchar ljmp printf_main_loopprintf_uint_begin: push dpl push dph lcall printf_int2bcd jnb _field_width_flag, printf_uifw_endprintf_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_subprintf_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_subprintf_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 r1printf_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 ar3printf_uifw_end:printf_uint_doit: jnb _negative_flag, printf_uint_pos mov a, #45 lcall printf_putcharprintf_uint_pos: jb _short_flag, printf_uint8 jnb _long_flag, printf_uint16printf_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_uint16aprintf_uint16: mov dpl, r5 mov dph, r6 mov a, r7printf_uint16a: lcall printf_phex_lsn mov a, dph lcall printf_phex_msn mov a, dph sjmp printf_uint8aprintf_uint8: mov dpl, r5 mov a, r6printf_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 r0printf_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 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 retprintf_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 mov r6, a mov a, r1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -