_ser.asm
来自「很少见的源码公开的msc51和z80的c编译器。」· 汇编 代码 · 共 533 行
ASM
533 行
;--------------------------------------------------------; File Created by SDCC : FreeWare ANSI-C Compiler; Version 2.3.0 Thu Sep 20 10:57:16 2001;-------------------------------------------------------- .module _ser ;--------------------------------------------------------; Public variables in this module;-------------------------------------------------------- .globl _ser_rxBuffer .globl _ser_txBuffer .globl _ser_rxIndexOut .globl _ser_rxIndexIn .globl _ser_txIndexOut .globl _ser_txIndexIn .globl _ser_init .globl _ser_interrupt_handler .globl _ser_putc .globl _ser_getc .globl _ser_printString .globl _ser_charAvail;--------------------------------------------------------; special function registers;--------------------------------------------------------_P0 = 0x0080_SP = 0x0081_DPL = 0x0082_DPH = 0x0083_PCON = 0x0087_TCON = 0x0088_TMOD = 0x0089_TL0 = 0x008a_TL1 = 0x008b_TH0 = 0x008c_TH1 = 0x008d_P1 = 0x0090_SCON = 0x0098_SBUF = 0x0099_P2 = 0x00a0_IE = 0x00a8_P3 = 0x00b0_IP = 0x00b8_PSW = 0x00d0_ACC = 0x00e0_B = 0x00f0_T2CON = 0x00c8_RCAP2L = 0x00ca_RCAP2H = 0x00cb_TL2 = 0x00cc_TH2 = 0x00cd;--------------------------------------------------------; special function bits ;--------------------------------------------------------_P0_0 = 0x0080_P0_1 = 0x0081_P0_2 = 0x0082_P0_3 = 0x0083_P0_4 = 0x0084_P0_5 = 0x0085_P0_6 = 0x0086_P0_7 = 0x0087_IT0 = 0x0088_IE0 = 0x0089_IT1 = 0x008a_IE1 = 0x008b_TR0 = 0x008c_TF0 = 0x008d_TR1 = 0x008e_TF1 = 0x008f_P1_0 = 0x0090_P1_1 = 0x0091_P1_2 = 0x0092_P1_3 = 0x0093_P1_4 = 0x0094_P1_5 = 0x0095_P1_6 = 0x0096_P1_7 = 0x0097_RI = 0x0098_TI = 0x0099_RB8 = 0x009a_TB8 = 0x009b_REN = 0x009c_SM2 = 0x009d_SM1 = 0x009e_SM0 = 0x009f_P2_0 = 0x00a0_P2_1 = 0x00a1_P2_2 = 0x00a2_P2_3 = 0x00a3_P2_4 = 0x00a4_P2_5 = 0x00a5_P2_6 = 0x00a6_P2_7 = 0x00a7_EX0 = 0x00a8_ET0 = 0x00a9_EX1 = 0x00aa_ET1 = 0x00ab_ES = 0x00ac_EA = 0x00af_P3_0 = 0x00b0_P3_1 = 0x00b1_P3_2 = 0x00b2_P3_3 = 0x00b3_P3_4 = 0x00b4_P3_5 = 0x00b5_P3_6 = 0x00b6_P3_7 = 0x00b7_RXD = 0x00b0_TXD = 0x00b1_INT0 = 0x00b2_INT1 = 0x00b3_T0 = 0x00b4_T1 = 0x00b5_WR = 0x00b6_RD = 0x00b7_PX0 = 0x00b8_PT0 = 0x00b9_PX1 = 0x00ba_PT1 = 0x00bb_PS = 0x00bc_P = 0x00d0_F1 = 0x00d1_OV = 0x00d2_RS0 = 0x00d3_RS1 = 0x00d4_F0 = 0x00d5_AC = 0x00d6_CY = 0x00d7_ET2 = 0x00ad_T2CON_0 = 0x00c8_T2CON_1 = 0x00c9_T2CON_2 = 0x00ca_T2CON_3 = 0x00cb_T2CON_4 = 0x00cc_T2CON_5 = 0x00cd_T2CON_6 = 0x00ce_T2CON_7 = 0x00cf_CP_RL2 = 0x00c8_C_T2 = 0x00c9_TR2 = 0x00ca_EXEN2 = 0x00cb_TCLK = 0x00cc_RCLK = 0x00cd_EXF2 = 0x00ce_TF2 = 0x00cf;--------------------------------------------------------; internal ram data;-------------------------------------------------------- .area DSEG (DATA);--------------------------------------------------------; overlayable items in internal ram ;-------------------------------------------------------- .area _DUMMY .area OSEG (OVR,DATA) .area _DUMMY .area OSEG (OVR,DATA) .area _DUMMY .area OSEG (OVR,DATA);--------------------------------------------------------; indirectly addressable internal ram data;-------------------------------------------------------- .area ISEG (DATA);--------------------------------------------------------; bit data;-------------------------------------------------------- .area BSEG (BIT)_ser_txBusy: .ds 1;--------------------------------------------------------; external ram data;-------------------------------------------------------- .area XSEG (XDATA)_ser_txIndexIn:: .ds 1_ser_txIndexOut:: .ds 1_ser_rxIndexIn:: .ds 1_ser_rxIndexOut:: .ds 1_ser_txBuffer:: .ds 256_ser_rxBuffer:: .ds 256;--------------------------------------------------------; 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 'ser_init';------------------------------------------------------------; _ser.c 49; -----------------------------------------; function ser_init; -----------------------------------------_ser_init: ar2 = 0x02 ar3 = 0x03 ar4 = 0x04 ar5 = 0x05 ar6 = 0x06 ar7 = 0x07 ar0 = 0x00 ar1 = 0x01; _ser.c 51 clr _ES; _ser.c 53 clr _ser_txBusy; _ser.c 55 mov dptr,#_ser_txIndexIn; Peephole 180 changed mov to clr; _ser.c 56; Peephole 180 changed mov to clr; Peephole 219 removed redundant clear; _ser.c 57; Peephole 180 changed mov to clr; _ser.c 58; Peephole 180 changed mov to clr; Peephole 219 removed redundant clear; Peephole 219a removed redundant clear clr a movx @dptr,a mov dptr,#_ser_txIndexOut movx @dptr,a mov dptr,#_ser_rxIndexIn movx @dptr,a mov dptr,#_ser_rxIndexOut movx @dptr,a; _ser.c 60 mov _T2CON,#0x30; _ser.c 63 mov _RCAP2H,#0xFF; _ser.c 64 mov _RCAP2L,#0xDD; _ser.c 67 mov _T2CON,#0x34; _ser.c 69 mov _SCON,#0x50; _ser.c 71; Peephole 111 removed ljmp by inverse jump logic jnb _TI,00102$00109$:; _ser.c 72 clr _TI00102$:; _ser.c 74; Peephole 111 removed ljmp by inverse jump logic jnb _RI,00104$00110$:; _ser.c 75 clr _RI00104$:; _ser.c 78 setb _ES00105$: ret;------------------------------------------------------------;Allocation info for local variables in function 'ser_interrupt_handler';------------------------------------------------------------; _ser.c 82; -----------------------------------------; function ser_interrupt_handler; -----------------------------------------_ser_interrupt_handler: ar2 = 0x0a ar3 = 0x0b ar4 = 0x0c ar5 = 0x0d ar6 = 0x0e ar7 = 0x0f ar0 = 0x08 ar1 = 0x09 push acc push b push dpl push dph push psw mov psw,#0x08; _ser.c 84 clr _ES; _ser.c 86; Peephole 111 removed ljmp by inverse jump logic jnb _TI,00105$00113$:; _ser.c 87 clr _TI; _ser.c 88 mov dptr,#_ser_txIndexOut movx a,@dptr mov r2,a mov dptr,#_ser_txIndexIn movx a,@dptr; Peephole 105 removed redundant mov mov r3,a; Peephole 132 changed ljmp to sjmp; Peephole 199 optimized misc jump sequence cjne a,ar2,00102$;00114$:; Peephole 200 removed redundant sjmp00115$:; _ser.c 89 clr _ser_txBusy; Peephole 132 changed ljmp to sjmp sjmp 00105$00102$:; _ser.c 92 mov dptr,#_ser_txIndexOut mov a,#0x01 add a,r2 movx @dptr,a mov a,r2 add a,#_ser_txBuffer mov dpl,a; Peephole 180 changed mov to clr clr a addc a,#(_ser_txBuffer >> 8) mov dph,a movx a,@dptr mov _SBUF,a00105$:; _ser.c 96; Peephole 111 removed ljmp by inverse jump logic jnb _RI,00107$00116$:; _ser.c 97 clr _RI; _ser.c 98 mov dptr,#_ser_rxIndexIn movx a,@dptr mov r2,a mov dptr,#_ser_rxIndexIn mov a,#0x01 add a,r2 movx @dptr,a mov a,r2 add a,#_ser_rxBuffer mov dpl,a; Peephole 180 changed mov to clr clr a addc a,#(_ser_rxBuffer >> 8) mov dph,a mov a,_SBUF movx @dptr,a00107$:; _ser.c 101 setb _ES00108$: pop psw pop dph pop dpl pop b pop acc reti;------------------------------------------------------------;Allocation info for local variables in function 'ser_putc';------------------------------------------------------------; _ser.c 105; -----------------------------------------; function ser_putc; -----------------------------------------_ser_putc: ar2 = 0x02 ar3 = 0x03 ar4 = 0x04 ar5 = 0x05 ar6 = 0x06 ar7 = 0x07 ar0 = 0x00 ar1 = 0x01; _ser.c 117 mov r2,dpl; _ser.c 107 clr _ES; _ser.c 109; Peephole 111 removed ljmp by inverse jump logic jnb _ser_txBusy,00102$00107$:; _ser.c 110 mov dptr,#_ser_txIndexIn movx a,@dptr mov r3,a mov dptr,#_ser_txIndexIn mov a,#0x01 add a,r3 movx @dptr,a mov a,r3 add a,#_ser_txBuffer mov dpl,a; Peephole 180 changed mov to clr clr a addc a,#(_ser_txBuffer >> 8) mov dph,a mov a,r2 movx @dptr,a; Peephole 132 changed ljmp to sjmp sjmp 00103$00102$:; _ser.c 113 setb _ser_txBusy; _ser.c 114 mov _SBUF,r200103$:; _ser.c 117 setb _ES00104$: ret;------------------------------------------------------------;Allocation info for local variables in function 'ser_getc';------------------------------------------------------------; _ser.c 121; -----------------------------------------; function ser_getc; -----------------------------------------_ser_getc:; _ser.c 126 mov dptr,#_ser_rxIndexOut movx a,@dptr mov r2,a mov dptr,#_ser_rxIndexIn movx a,@dptr; Peephole 105 removed redundant mov mov r3,a cjne a,ar2,00107$; Peephole 132 changed ljmp to sjmp sjmp 00102$00107$:; _ser.c 127 mov dptr,#_ser_rxIndexOut mov a,#0x01 add a,r2 movx @dptr,a mov a,r2 add a,#_ser_rxBuffer mov dpl,a; Peephole 180 changed mov to clr clr a addc a,#(_ser_rxBuffer >> 8) mov dph,a movx a,@dptr mov r2,a; Peephole 132 changed ljmp to sjmp sjmp 00103$00102$:; _ser.c 130 mov r2,#0x0000103$:; _ser.c 134 mov dpl,r200104$: ret;------------------------------------------------------------;Allocation info for local variables in function 'ser_printString';------------------------------------------------------------;String Allocated to registers r2 r3 r4 ; _ser.c 138; -----------------------------------------; function ser_printString; -----------------------------------------_ser_printString:; _ser.c 0 mov r2,dpl mov r3,dph mov r4,b; _ser.c 14000101$: mov dpl,r2 mov dph,r3 mov b,r4 lcall __gptrget mov r5,a inc dptr mov r2,dpl mov r3,dph mov a,r5; Peephole 110 removed ljmp by inverse jump logic jz 00104$00108$:; _ser.c 141 mov dpl,r5 push ar2 push ar3 push ar4 lcall _ser_putc pop ar4 pop ar3 pop ar2; Peephole 132 changed ljmp to sjmp sjmp 00101$00104$: ret;------------------------------------------------------------;Allocation info for local variables in function 'ser_charAvail';------------------------------------------------------------; _ser.c 146; -----------------------------------------; function ser_charAvail; -----------------------------------------_ser_charAvail:; _ser.c 148 mov r2,#0x00; _ser.c 150 mov dptr,#_ser_rxIndexOut movx a,@dptr mov r3,a mov dptr,#_ser_rxIndexIn movx a,@dptr; Peephole 105 removed redundant mov mov r4,a cjne a,ar3,00106$; Peephole 132 changed ljmp to sjmp sjmp 00102$00106$:; _ser.c 151 mov r2,#0x0100102$:; _ser.c 154 mov dpl,r200103$: ret .area CSEG (CODE)
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?