📄 vprintf.asm
字号:
;--------------------------------------------------------; File Created by SDCC : FreeWare ANSI-C Compiler; Version 2.3.0 Thu Sep 20 10:57:43 2001;-------------------------------------------------------- .module vprintf .flat24 on ; 24 bit flat addressingdpx = 0x93 ; dpx register unknown to assemblerdps = 0x86 ; dps register unknown to assemblerdpl1 = 0x84 ; dpl1 register unknown to assemblerdph1 = 0x85 ; dph1 register unknown to assemblerdpx1 = 0x95 ; dpx1 register unknown to assemblerap = 0x9C ; ap register unknown to assembler;--------------------------------------------------------; Public variables in this module;-------------------------------------------------------- .globl _vprintf_PARM_2 .globl _vsprintf_PARM_3 .globl _vsprintf_PARM_2 .globl _vsprintf .globl _vprintf;--------------------------------------------------------; special function registers;--------------------------------------------------------_P4 = 0x0080_SP = 0x0081_DPL = 0x0082_DPH = 0x0083_DPL1 = 0x0084_DPH1 = 0x0085_DPS = 0x0086_PCON = 0x0087_TCON = 0x0088_TMOD = 0x0089_TL0 = 0x008a_TL1 = 0x008b_TH0 = 0x008c_TH1 = 0x008d_CKCON = 0x008e_P1 = 0x0090_EXIF = 0x0091_P4CNT = 0x0092_DPX = 0x0093_DPX1 = 0x0095_SCON0 = 0x0098_SBUF0 = 0x0099_ESP = 0x009b_AP = 0x009c_ACON = 0x009d_P2 = 0x00a0_P5 = 0x00a1_P5CNT = 0x00a2_IE = 0x00a8_P3 = 0x00b0_IP = 0x00b8_SCON1 = 0x00c0_SBUF1 = 0x00c1_PMR = 0x00c4_MCON = 0x00c6_TA = 0x00c7_T2CON = 0x00c8_T2MOD = 0x00c9_RCAP2L = 0x00ca_RTL2 = 0x00ca_RCAP2H = 0x00cb_RTH2 = 0x00cb_TL2 = 0x00cc_TH2 = 0x00cd_PSW = 0x00d0_MCNT0 = 0x00d1_MCNT1 = 0x00d2_MA = 0x00d3_MB = 0x00d4_MC = 0x00d5_WDCON = 0x00d8_ACC = 0x00e0_EIE = 0x00e8_MXAX = 0x00ea_B = 0x00f0_EIP = 0x00f8;--------------------------------------------------------; special function bits ;--------------------------------------------------------_IT0 = 0x0088_IE0 = 0x0089_IT1 = 0x008a_IE1 = 0x008b_TR0 = 0x008c_TF0 = 0x008d_TR1 = 0x008e_TF1 = 0x008f_T2 = 0x0090_T2EX = 0x0091_RXD1 = 0x0092_TXD1 = 0x0093_INT2 = 0x0094_INT3 = 0x0095_INT4 = 0x0096_INT5 = 0x0097_RI_0 = 0x0098_TI_0 = 0x0099_RB8_0 = 0x009a_TB8_0 = 0x009b_REN_0 = 0x009c_SM2_0 = 0x009d_SM1_0 = 0x009e_SM0_0 = 0x009f_FE_0 = 0x009f_EX0 = 0x00a8_ET0 = 0x00a9_EX1 = 0x00aa_ET1 = 0x00ab_ES0 = 0x00ac_ET2 = 0x00ad_ES1 = 0x00ae_EA = 0x00af_RXD0 = 0x00b0_TXD0 = 0x00b1_INT0 = 0x00b2_INT1 = 0x00b3_T0 = 0x00b4_T1 = 0x00b5_WR = 0x00b6_RD = 0x00b7_PX0 = 0x00b8_PT0 = 0x00b9_PX1 = 0x00ba_PT1 = 0x00bb_PS0 = 0x00bc_PT2 = 0x00bd_PS1 = 0x00be_RI_1 = 0x00c0_TI_1 = 0x00c1_RB8_1 = 0x00c2_TB8_1 = 0x00c3_REN_1 = 0x00c4_SM2_1 = 0x00c5_SM1_1 = 0x00c6_SM0_1 = 0x00c7_FE_1 = 0x00c7_CP_RL = 0x00c8_C_T = 0x00c9_TR2 = 0x00ca_EXEN2 = 0x00cb_TCLK = 0x00cc_RCLK = 0x00cd_EXF2 = 0x00ce_TF2 = 0x00cf_P = 0x00d0_F1 = 0x00d1_OV = 0x00d2_RS0 = 0x00d3_RS1 = 0x00d4_F0 = 0x00d5_AC = 0x00d6_CY = 0x00d7_RWT = 0x00d8_EWT = 0x00d9_WTRF = 0x00da_PF1 = 0x00db_EPF1 = 0x00dc_POR = 0x00de_SMOD_1 = 0x00df_EX2 = 0x00e8_EX3 = 0x00e9_EX4 = 0x00ea_EX5 = 0x00eb_EWDI = 0x00ec_C1IE = 0x00ed_C0IE = 0x00ee_CANBIE = 0x00ef_PX2 = 0x00f8_PX3 = 0x00f9_PX4 = 0x00fa_PX5 = 0x00fb_PWDI = 0x00fc_C1IP = 0x00fd_C0IP = 0x00fe_CANBIP = 0x00ff;--------------------------------------------------------; internal ram data;-------------------------------------------------------- .area DSEG (DATA)_value: .ds 5;--------------------------------------------------------; overlayable items in internal ram ;-------------------------------------------------------- .area OSEG (OVR,DATA);--------------------------------------------------------; indirectly addressable internal ram data;-------------------------------------------------------- .area ISEG (DATA);--------------------------------------------------------; bit data;-------------------------------------------------------- .area BSEG (BIT)_output_to_string: .ds 1_lower_case: .ds 1_lsd: .ds 1_vsprintf_left_justify_1_1: .ds 1_vsprintf_zero_padding_1_1: .ds 1_vsprintf_prefix_sign_1_1: .ds 1_vsprintf_prefix_space_1_1: .ds 1_vsprintf_signed_argument_1_1: .ds 1_vsprintf_char_argument_1_1: .ds 1_vsprintf_long_argument_1_1: .ds 1_vsprintf_float_argument_1_1: .ds 1;--------------------------------------------------------; external ram data;-------------------------------------------------------- .area XSEG (XDATA)_output_ptr: .ds 4_radix: .ds 1_charsOutputted: .ds 2_output_char_c_1_1: .ds 1_output_digit_n_1_1: .ds 1_output_2digits_b_1_1: .ds 1_output_float_PARM_2: .ds 1_output_float_PARM_3: .ds 1_output_float_PARM_4: .ds 1_output_float_PARM_5: .ds 1_output_float_PARM_6: .ds 1_output_float_PARM_7: .ds 1_output_float_f_1_1: .ds 4_output_float_negative_1_1:: .ds 1_output_float_integerPart_1_1:: .ds 4_output_float_decimalPart_1_1:: .ds 4_output_float_fpBuffer_1_1:: .ds 128_output_float_sloc0_1_0:: .ds 4_output_float_sloc1_1_0:: .ds 4_vsprintf_PARM_2:: .ds 4_vsprintf_PARM_3:: .ds 4_vsprintf_width_1_1:: .ds 1_vsprintf_length_1_1:: .ds 1_vsprintf_c_1_1:: .ds 1_vsprintf_sloc0_1_0:: .ds 2_vsprintf_sloc1_1_0:: .ds 2_vsprintf_sloc2_1_0:: .ds 2_vsprintf_sloc3_1_0:: .ds 4_vprintf_PARM_2:: .ds 4;--------------------------------------------------------; global & static initialisations;-------------------------------------------------------- .area GSINIT (CODE) .area GSFINAL (CODE) .area GSINIT (CODE);--------------------------------------------------------; Home;-------------------------------------------------------- .area HOME (CODE) .area CSEG (CODE);--------------------------------------------------------; code;-------------------------------------------------------- .area CSEG (CODE); vprintf.c 88; genFunction ; -----------------------------------------; function output_char; -----------------------------------------_output_char: ar2 = 0x02 ar3 = 0x03 ar4 = 0x04 ar5 = 0x05 ar6 = 0x06 ar7 = 0x07 ar0 = 0x00 ar1 = 0x01; vprintf.c 98; genReceive mov r2,dpl; vprintf.c 90; genIfx ; genIfxJump ; Peephole 111 removed ljmp by inverse jump logic jnb _output_to_string,00102$00107$:; vprintf.c 92; genAssign mov dptr,#_output_ptr; genAssign: resultIsFar = FALSE movx a,@dptr mov r3,a inc dptr movx a,@dptr mov r4,a inc dptr movx a,@dptr mov r5,a inc dptr movx a,@dptr mov r6,a; genPlus mov dptr,#_output_ptr mov a,#0x01 add a,r3 movx @dptr,a; Peephole 180 changed mov to clr clr a addc a,r4 inc dptr movx @dptr,a; Peephole 180 changed mov to clr clr a addc a,r5 inc dptr movx @dptr,a inc dptr mov a,r6 movx @dptr,a; genPointerSet mov dpl,r3 mov dph,r4 mov dpx,r5 mov b,r6 mov a,r2 lcall __gptrput; genGoto ; genLabel ; Peephole 132 changed ljmp to sjmp sjmp 00103$00102$:; vprintf.c 96; genCall mov dpl,r2 lcall _putchar; genLabel 00103$:; vprintf.c 98; genAssign mov dptr,#_charsOutputted; genAssign: resultIsFar = FALSE movx a,@dptr mov r2,a inc dptr movx a,@dptr mov r3,a; genPlus mov dptr,#_charsOutputted mov a,#0x01 add a,r2 movx @dptr,a; Peephole 180 changed mov to clr clr a addc a,r3 inc dptr movx @dptr,a; genLabel 00104$:; genEndFunction ret; vprintf.c 103; genFunction ; -----------------------------------------; function output_digit; -----------------------------------------_output_digit:; vprintf.c 106; genReceive mov r2,dpl; vprintf.c 105; genCmpGt ; genCmp clr c; genCmp #1: 0/0/0 mov a,#0x09; genCmp #2; genCmp #4; genCmp #4.2 subb a,r2 clr a rlc a; genNot ; Peephole 105 removed redundant mov mov r3,a cjne a,#0x01,00109$00109$: clr a rlc a; genIfx ; Peephole 105 removed redundant mov mov r3,a; genIfxJump ; Peephole 110 removed ljmp by inverse jump logic jz 00103$00110$:; genPlus mov a,#0x30 add a,r2 mov r3,a; genGoto ; genLabel ; Peephole 132 changed ljmp to sjmp sjmp 00104$00103$:; vprintf.c 106; genIfx ; genIfxJump ; Peephole 111 removed ljmp by inverse jump logic jnb _lower_case,00105$00111$:; genPlus mov a,#0x57 add a,r2 mov r4,a; genGoto ; genLabel ; Peephole 132 changed ljmp to sjmp sjmp 00106$00105$:; genPlus mov a,#0x37 add a,r2 mov r4,a; genLabel 00106$:; genAssign ; genAssign: resultIsFar = FALSE mov ar3,r4; genLabel 00104$:; genAssign ; genAssign: resultIsFar = FALSE; genCall mov dpl,r3 lcall _output_char; genLabel 00101$:; genEndFunction ret; vprintf.c 111; genFunction ; -----------------------------------------; function output_2digits; -----------------------------------------_output_2digits:; vprintf.c 114; genReceive mov r2,dpl; vprintf.c 113; genRightShift ; genRightShiftLiteral (4), size 1; genrshOne mov a,r2 swap a anl a,#0x0f mov r3,a; genCall push ar2 mov dpl,r3 lcall _output_digit pop ar2; vprintf.c 114; genAnd anl ar2,#0x0F; genCall mov dpl,r2 lcall _output_digit; genLabel 00101$:; genEndFunction ret; vprintf.c 119; genFunction ; -----------------------------------------; function calculate_digit; -----------------------------------------_calculate_digit:; vprintf.c 123; genAssign ; genAssign: resultIsFar = TRUE mov r2,#0x20; genLabel 00103$:; genCmpEq ; gencjneshort mov a,r2 cjne a,#0x00,00112$ ljmp 00107$00112$:; vprintf.c 142; genInline clr c mov a,_value+0 rlc a mov _value+0,a mov a,_value+1 rlc a mov _value+1,a mov a,_value+2 rlc a mov _value+2,a mov a,_value+3 rlc a mov _value+3,a mov a,_value+4 rlc a mov _value+4,a; vprintf.c 144; genPointerGet ; Peephole 221a remove redundant move; genCmpGt mov dptr,#_radix; genCmp clr c; genCmp #1: 0/0/0 mov a,0x0004 + _value; genCmp #2; genCmp #4; genCmp #4.1 xch a, b movx a,@dptr xch a, b subb a,b; genIfxJump ; Peephole 132 changed ljmp to sjmp; Peephole 160 removed sjmp by inverse jump logic jc 00105$00113$:; vprintf.c 146; genPointerGet ; Peephole 221a remove redundant move; genMinus mov dps, #0x01 mov dptr, #_radix dec dps clr c mov a,0x0004 + _value xch a, ap inc dps movx a,@dptr xch a, ap subb a,ap mov dps, #0x00; genPointerSet mov (_value + 0x0004),a; vprintf.c 147; genPointerGet mov r3,_value; genPlus mov a,#0x01 add a,r3; genPointerSet mov _value,a; genLabel 00105$:; vprintf.c 123; genMinus dec r2; genGoto ljmp 00103$; genLabel 00107$:; genEndFunction ret; vprintf.c 164; genFunction ; -----------------------------------------; function output_float; -----------------------------------------_output_float:; vprintf.c 0; genReceive mov r2,dpl mov r3,dph mov r4,dpx mov r5,b; vprintf.c 168; genAssign ; genAssign: resultIsFar = TRUE mov dptr,#_output_float_negative_1_1; Peephole 180 changed mov to clr clr a movx @dptr,a; vprintf.c 172; genAssign ; genAssign: resultIsFar = TRUE mov r7,#0x00; vprintf.c 176; genAssign ; genAssign: resultIsFar = TRUE mov dptr,#___fslt_PARM_2; Peephole 101 removed redundant mov; Peephole 180 changed mov to clr clr a movx @dptr,a inc dptr movx @dptr,a inc dptr; Peephole 101 removed redundant mov; Peephole 180 changed mov to clr clr a movx @dptr,a inc dptr movx @dptr,a; genCall push ar2 push ar3 push ar4 push ar5 push ar7 mov dpl,r2 mov dph,r3 mov dpx,r4 mov b,r5 lcall ___fslt mov r0,dpl pop ar7 pop ar5 pop ar4 pop ar3 pop ar2; genIfx mov a,r0; genIfxJump ; Peephole 110 removed ljmp by inverse jump logic jz 00102$00207$:; vprintf.c 177; genAssign ; genAssign: resultIsFar = TRUE mov dptr,#_output_float_negative_1_1 mov a,#0x01 movx @dptr,a; vprintf.c 178; genUminus ; genUminusFloat mov a,r5 cpl acc.7 mov r5,a; genLabel 00102$:; vprintf.c 182; genIpush push ar7; genCall push ar2 push ar3 push ar4 push ar5 mov dpl,r2 mov dph,r3 mov dpx,r4 mov b,r5 lcall ___fs2slong mov r0,dpl mov r1,dph mov r7,dpx mov r6,b pop ar5 pop ar4 pop ar3 pop ar2; genAssign ; genAssign: resultIsFar = TRUE mov dptr,#_output_float_integerPart_1_1 mov a,r0 movx @dptr,a inc dptr mov a,r1 movx @dptr,a inc dptr mov a,r7 movx @dptr,a inc dptr mov a,r6 movx @dptr,a; vprintf.c 183; genCall push ar2 push ar3 push ar4 push ar5 mov dptr,#_output_float_integerPart_1_1 movx a,@dptr mov r2,a inc dptr movx a,@dptr mov r3,a inc dptr movx a,@dptr mov r4,a inc dptr movx a,@dptr mov b,a mov dpx,r4 mov dph,r3 mov dpl,r2 lcall ___slong2fs mov r6,dpl mov r7,dph mov r0,dpx mov r1,b pop ar5 pop ar4 pop ar3 pop ar2; genAssign ; genAssign: resultIsFar = TRUE mov dptr,#___fssub_PARM_2 mov a,r6 movx @dptr,a inc dptr mov a,r7 movx @dptr,a inc dptr mov a,r0 movx @dptr,a inc dptr mov a,r1 movx @dptr,a; genCall push ar7 mov dpl,r2 mov dph,r3 mov dpx,r4 mov b,r5 lcall ___fssub mov r2,dpl mov r3,dph mov r4,dpx mov r5,b pop ar7; genAssign ; genAssign: resultIsFar = TRUE mov dptr,#_output_float_decimalPart_1_1 mov a,r2 movx @dptr,a inc dptr mov a,r3 movx @dptr,a inc dptr mov a,r4 movx @dptr,a inc dptr mov a,r5 movx @dptr,a; vprintf.c 252; genIpop pop ar7; vprintf.c 186; genAssign ; genAssign: resultIsFar = TRUE mov r2,#0x00; genLabel 00103$:; genAssign ; genAssign: resultIsFar = TRUE mov ar7,r2; genIfx mov dptr,#_output_float_integerPart_1_1 push b movx a,@dptr mov b, a inc dptr movx a,@dptr orl b,a inc dptr movx a,@dptr orl b,a inc dptr movx a,@dptr orl b,a mov a,b pop b; genIfxJump jnz 00208$ ljmp 00105$00208$:; vprintf.c 187; genAssign ; genAssign: resultIsFar = FALSE mov ar3,r2; genPlus inc r2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -