📄 printfl.asm
字号:
;--------------------------------------------------------; File Created by SDCC : FreeWare ANSI-C Compiler; Version 2.3.0 Thu Sep 20 10:57:41 2001;-------------------------------------------------------- .module printfl .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 _printf_small;--------------------------------------------------------; 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)_ch: .ds 1_radix: .ds 1_str: .ds 4_val: .ds 4;--------------------------------------------------------; 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_string_flag: .ds 1_char_flag: .ds 1_sign: .ds 1;--------------------------------------------------------; external ram data;-------------------------------------------------------- .area XSEG (XDATA)_printf_small_sloc0_1_0: .ds 4_printf_small_sloc1_1_0: .ds 4_printf_small_sloc2_1_0: .ds 1_printf_small_sloc3_1_0: .ds 4;--------------------------------------------------------; global & static initialisations;-------------------------------------------------------- .area GSINIT (CODE) .area GSFINAL (CODE) .area GSINIT (CODE); printfl.c 52; genAssign ; genAssign: resultIsFar = FALSE clr _long_flag; printfl.c 53; genAssign ; genAssign: resultIsFar = FALSE clr _string_flag; printfl.c 54; genAssign ; genAssign: resultIsFar = FALSE clr _char_flag;--------------------------------------------------------; Home;-------------------------------------------------------- .area HOME (CODE) .area CSEG (CODE);--------------------------------------------------------; code;-------------------------------------------------------- .area CSEG (CODE); printfl.c 59; genFunction ; -----------------------------------------; function pval; -----------------------------------------_pval: ar2 = 0x02 ar3 = 0x03 ar4 = 0x04 ar5 = 0x05 ar6 = 0x06 ar7 = 0x07 ar0 = 0x00 ar1 = 0x01; printfl.c 63; genAssign ; genAssign: resultIsFar = TRUE mov r2,_SP; printfl.c 65; genCmpLt ; genCmp mov a,(_val + 3); genIfxJump ; Peephole 111 removed ljmp by inverse jump logic jnb acc.7,00102$00132$:; genCmpEq ; gencjneshort mov a,_radix cjne a,#0x10,00133$; Peephole 132 changed ljmp to sjmp sjmp 00102$00133$:; printfl.c 67; genUminus clr c clr a subb a,_val mov r3,a clr a subb a,(_val + 1) mov r4,a clr a subb a,(_val + 2) mov r5,a clr a subb a,(_val + 3) mov r6,a; printfl.c 68; genAssign ; genAssign: resultIsFar = FALSE setb _sign; genGoto ; genLabel ; Peephole 132 changed ljmp to sjmp sjmp 00103$00102$:; printfl.c 70; genAssign ; genAssign: resultIsFar = FALSE clr _sign; genAssign ; genAssign: resultIsFar = TRUE mov r3,_val mov r4,(_val + 1) mov r5,(_val + 2) mov r6,(_val + 3); genLabel 00103$:; printfl.c 72; genIfx ; genIfxJump ; Peephole 112 removed ljmp by inverse jump logic jb _long_flag,00106$00134$:; printfl.c 73; genAnd mov r5,#0x00 mov r6,#0x00; genLabel 00106$:; printfl.c 75; genIfx ; genIfxJump ; Peephole 111 removed ljmp by inverse jump logic jnb _char_flag,00127$00135$:; printfl.c 76; genAnd mov r4,#0x00 mov r5,#0x00 mov r6,#0x00; printfl.c 79; genLabel 00127$:; genLabel 00112$:; printfl.c 82; genCmpEq ; gencjneshort mov a,_radix cjne a,#0x10,00136$ ljmp 00110$00136$:; genIpush push ar2; genCast mov dptr,#__modulong_PARM_2 mov a,_radix movx @dptr,a mov a,_radix rlc a subb a,acc inc dptr movx @dptr,a inc dptr movx @dptr,a inc dptr movx @dptr,a; genCall push ar3 push ar4 push ar5 push ar6 mov dpl,r3 mov dph,r4 mov dpx,r5 mov b,r6 lcall __modulong mov r7,dpl mov r0,dph mov r1,dpx mov r2,b pop ar6 pop ar5 pop ar4 pop ar3; genPlus mov a,#0x30 add a,r7 mov r7,a; Peephole 180 changed mov to clr clr a addc a,r0 mov r0,a; Peephole 180 changed mov to clr clr a addc a,r1 mov r1,a; Peephole 180 changed mov to clr clr a addc a,r2 mov r2,a; genCast mov _ch,r7; genIpop pop ar2; genGoto ; genLabel ; Peephole 132 changed ljmp to sjmp sjmp 00111$00110$:; printfl.c 83; genCast mov ar7,r3; genAnd anl ar7,#0x0F; genPlus mov a,r7 add a,#__str_0 mov r7,a; Peephole 180 changed mov to clr clr a addc a,#(__str_0 >> 8) mov r0,a; Peephole 180 changed mov to clr clr a addc a,#(__str_0 >> 16) mov r1,a; genPointerGet mov dpl,r7 mov dph,r0 mov dpx,r1 clr a movc a,@a+dptr mov _ch,a; genLabel 00111$:; printfl.c 84; genIpush push ar2; genInline push _ch ; printfl.c 85; genCast mov dptr,#__divulong_PARM_2 mov a,_radix movx @dptr,a mov a,_radix rlc a subb a,acc inc dptr movx @dptr,a inc dptr movx @dptr,a inc dptr movx @dptr,a; genCall push ar3 push ar4 push ar5 push ar6 mov dpl,r3 mov dph,r4 mov dpx,r5 mov b,r6 lcall __divulong mov r7,dpl mov r0,dph mov r1,dpx mov r2,b pop ar6 pop ar5 pop ar4 pop ar3; genAssign ; genAssign: resultIsFar = TRUE mov ar3,r7 mov ar4,r0 mov ar5,r1 mov ar6,r2; printfl.c 94; genIpop pop ar2; genIfx mov a,r3 orl a,r4 orl a,r5 orl a,r6; genIfxJump jz 00137$ ljmp 00112$00137$:; printfl.c 96; genIfx ; genIfxJump ; Peephole 111 removed ljmp by inverse jump logic jnb _sign,00117$00138$:; printfl.c 97; genAssign ; genAssign: resultIsFar = FALSE mov _ch,#0x2D; printfl.c 98; genInline push _ch ; printfl.c 101; genLabel 00117$:; genAssign ; genAssign: resultIsFar = TRUE mov ar3,r2; genCmpEq ; gencjneshort mov a,r3 cjne a,_SP,00139$; Peephole 132 changed ljmp to sjmp sjmp 00120$00139$:; printfl.c 102; genInline pop _ch ; printfl.c 103; genCall push ar2 mov dpl,_ch lcall _putchar pop ar2; genGoto ; genLabel ; Peephole 132 changed ljmp to sjmp sjmp 00117$00120$:; genEndFunction ret; printfl.c 107; genFunction ; -----------------------------------------; function printf_small; -----------------------------------------_printf_small: push _bp mov _bp,sp mov a,sp add a,#0x04 mov sp,a; printfl.c 111; genAddrOf mov a,_bp add a,#0xf9 mov r2,a mov r3,#0x00 mov r4,#0x40; genCast mov a,_bp add a,#0x01 mov dpx,#0x40 mov dph,#0x00 mov dpl, a 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,#0x01 movx @dptr,a; genLabel 00127$:; printfl.c 113; genAssign mov a,_bp add a,#0xf9 mov dpx,#0x40 mov dph,#0x00 mov dpl, a; genAssign: resultIsFar = FALSE movx a,@dptr mov r6,a inc dptr movx a,@dptr mov r7,a inc dptr movx a,@dptr mov r2,a inc dptr movx a,@dptr mov r3,a; genPointerGet ; genGenPointerGet mov dpl,r6 mov dph,r7 mov dpx,r2 mov b,r3 lcall __gptrget; genIfx ; Peephole 105 removed redundant mov mov r4,a; genIfxJump jnz 00149$ ljmp 00131$00149$:; printfl.c 114; genCmpEq ; gencjneshort mov a,r4 cjne a,#0x25,00150$ sjmp 00151$00150$: ljmp 00125$00151$:; printfl.c 115; genAssign ; genAssign: resultIsFar = FALSE clr _char_flag; genAssign ; genAssign: resultIsFar = FALSE clr _string_flag; genAssign ; genAssign: resultIsFar = FALSE clr _long_flag; printfl.c 116; genPlus mov a,#0x01 add a,r6 mov r6,a; Peephole 180 changed mov to clr clr a addc a,r7 mov r5,a; Peephole 180 changed mov to clr clr a addc a,r2 mov r2,a; genAssign ; genAssign: resultIsFar = TRUE mov a,_bp add a,#0xf9 mov dpx,#0x40 mov dph,#0x00 mov dpl, a mov a,r6 movx @dptr,a inc dptr mov a,r5 movx @dptr,a inc dptr mov a,r2 movx @dptr,a inc dptr mov a,r3 movx @dptr,a; printfl.c 117; genPointerGet ; genGenPointerGet mov dpl,r6 mov dph,r5 mov dpx,r2 mov b,r3 lcall __gptrget; genCmpEq ; gencjneshort; Peephole 105 removed redundant mov mov r7,a cjne a,#0x68,00152$; Peephole 132 changed ljmp to sjmp sjmp 00102$00152$:; genCmpEq ; gencjneshort mov a,r7; Peephole 132 changed ljmp to sjmp; Peephole 199 optimized misc jump sequence
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -