📄 file3.asm
字号:
;--------------------------------------------------------
; File Created by SDCC : FreeWare ANSI-C Compiler
; Version 2.3.8 Thu Mar 17 16:18:59 2005
;--------------------------------------------------------
.module file3
.optsdcc -mmcs51 --model-small
;--------------------------------------------------------
; Public variables in this module
;--------------------------------------------------------
.globl _display_PARM_2
.globl _disbuf_u
.globl _main
.globl _delay
.globl _display
;--------------------------------------------------------
; 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
;--------------------------------------------------------
; 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
;--------------------------------------------------------
; overlayable register banks
;--------------------------------------------------------
.area REG_BANK_0 (REL,OVR,DATA)
.ds 8
;--------------------------------------------------------
; internal ram data
;--------------------------------------------------------
.area DSEG (DATA)
;--------------------------------------------------------
; overlayable items in internal ram
;--------------------------------------------------------
.area OSEG (OVR,DATA)
.area OSEG (OVR,DATA)
_display_PARM_2::
.ds 1
;--------------------------------------------------------
; Stack segment in internal ram
;--------------------------------------------------------
.area SSEG (DATA)
__start__stack:
.ds 1
;--------------------------------------------------------
; indirectly addressable internal ram data
;--------------------------------------------------------
.area ISEG (DATA)
;--------------------------------------------------------
; bit data
;--------------------------------------------------------
.area BSEG (BIT)
;--------------------------------------------------------
; external ram data
;--------------------------------------------------------
.area XSEG (XDATA)
;--------------------------------------------------------
; external initialized ram data
;--------------------------------------------------------
.area XISEG (XDATA)
;--------------------------------------------------------
; interrupt vector
;--------------------------------------------------------
.area CSEG (CODE)
__interrupt_vect:
ljmp __sdcc_gsinit_startup
reti
.ds 7
reti
.ds 7
reti
.ds 7
reti
.ds 7
reti
.ds 7
reti
;--------------------------------------------------------
; global & static initialisations
;--------------------------------------------------------
.area GSINIT (CODE)
.area GSFINAL (CODE)
.area GSINIT (CODE)
__sdcc_gsinit_startup:
mov sp,#__start__stack - 1
lcall __sdcc_external_startup
mov a,dpl
jz __sdcc_init_data
ljmp __sdcc_program_startup
__sdcc_init_data:
; _mcs51_genXINIT() start
mov r1,#l_XINIT
mov a,r1
orl a,#(l_XINIT >> 8)
jz 00003$
mov r2,#((l_XINIT+255) >> 8)
mov dptr,#s_XINIT
mov r0,#s_XISEG
mov p2,#(s_XISEG >> 8)
00001$: clr a
movc a,@a+dptr
movx @r0,a
inc dptr
inc r0
cjne r0,#0,00002$
inc p2
00002$: djnz r1,00001$
djnz r2,00001$
mov p2,#0xFF
00003$:
; _mcs51_genXINIT() end
; _mcs51_genRAMCLEAR() start
mov r0,#l_XSEG
mov a,r0
orl a,#(l_XSEG >> 8)
jz 00005$
mov r1,#((l_XSEG + 255) >> 8)
mov dptr,#s_XSEG
clr a
00004$: movx @dptr,a
inc dptr
djnz r0,00004$
djnz r1,00004$
00005$: mov @r0,a
djnz r0,00005$
; _mcs51_genRAMCLEAR() end
.area GSFINAL (CODE)
ljmp __sdcc_program_startup
;--------------------------------------------------------
; Home
;--------------------------------------------------------
.area HOME (CODE)
.area CSEG (CODE)
;--------------------------------------------------------
; code
;--------------------------------------------------------
.area CSEG (CODE)
__sdcc_program_startup:
lcall _main
; return from main will lock up
sjmp .
;------------------------------------------------------------
;Allocation info for local variables in function 'main'
;------------------------------------------------------------
;k Allocated to registers
;------------------------------------------------------------
;c:/hj51avr/code/c/file3.c:21: void main()
; -----------------------------------------
; function main
; -----------------------------------------
_main:
ar2 = 0x02
ar3 = 0x03
ar4 = 0x04
ar5 = 0x05
ar6 = 0x06
ar7 = 0x07
ar0 = 0x00
ar1 = 0x01
;c:/hj51avr/code/c/file3.c:24: P1 = 255; //关闭LED显示
; genAssign
mov _P1,#0xFF
;c:/hj51avr/code/c/file3.c:25: P0 = 0; //关闭数码显示
; genAssign
mov _P0,#0x00
;c:/hj51avr/code/c/file3.c:26: P2 = 0; //
; genAssign
mov _P2,#0x00
;c:/hj51avr/code/c/file3.c:27: P3_7 = 0; //关闭蜂鸣器
; genAssign
clr _P3_7
;c:/hj51avr/code/c/file3.c:30: { for(k=0;k<32;k++)
00112$:
; genAssign
mov r2,#0x00
mov r3,#0x00
00104$:
; genCmpLt
; genCmp
clr c
mov a,r2
subb a,#0x20
mov a,r3
xrl a,#0x80
subb a,#0x80
; genIfxJump
; Peephole 108 removed ljmp by inverse jump logic
jnc 00112$
00113$:
;c:/hj51avr/code/c/file3.c:31: { delay(255); //延时
; genCall
mov dpl,#0xFF
push ar2
push ar3
lcall _delay
pop ar3
pop ar2
;c:/hj51avr/code/c/file3.c:32: display(k%8,k);
; genAnd
mov a,#0x07
anl a,r2
mov r4,a
mov r5,#0x00
; genCast
mov dpl,r4
; genCast
mov _display_PARM_2,r2
; genCall
push ar2
push ar3
lcall _display
pop ar3
pop ar2
;c:/hj51avr/code/c/file3.c:30: { for(k=0;k<32;k++)
; genPlus
; genPlusIncr
; tail increment optimized
inc r2
cjne r2,#0x00,00104$
inc r3
; Peephole 112.b changed ljmp to sjmp
sjmp 00104$
00108$:
ret
;------------------------------------------------------------
;Allocation info for local variables in function 'delay'
;------------------------------------------------------------
;times Allocated to registers r2
;t Allocated to registers r3 r4
;i Allocated to registers
;------------------------------------------------------------
;c:/hj51avr/code/c/file3.c:39: void delay(unsigned char times)
; -----------------------------------------
; function delay
; -----------------------------------------
_delay:
; genReceive
mov r2,dpl
;c:/hj51avr/code/c/file3.c:41: int t=25000; //延时倍数
; genAssign
mov r3,#0xA8
mov r4,#0x61
;c:/hj51avr/code/c/file3.c:42: unsigned char i=times;
; genAssign
00105$:
;c:/hj51avr/code/c/file3.c:43: for(;i!=0;i--)
; genCmpEq
cjne r2,#0x00,00114$
; Peephole 112.b changed ljmp to sjmp
sjmp 00109$
00114$:
; genAssign
mov ar5,r3
mov ar6,r4
00101$:
;c:/hj51avr/code/c/file3.c:44: {for(;t!=0;t--){}}
; genCmpEq
; Peephole 241.b optimized compare
clr a
cjne r5,#0x00,00115$
cjne r6,#0x00,00115$
inc a
00115$:
00116$:
mov r7,a
; genAssign
mov ar3,r5
mov ar4,r6
; genIfx
mov a,r7
; genIfxJump
; Peephole 109 removed ljmp by inverse jump logic
jnz 00107$
00117$:
; genMinus
; genMinusDec
; tail decrement optimized
dec r5
cjne r5,#0xff,00101$
dec r6
; Peephole 112.b changed ljmp to sjmp
sjmp 00101$
00107$:
;c:/hj51avr/code/c/file3.c:43: for(;i!=0;i--)
; genMinus
; genMinusDec
dec r2
; Peephole 112.b changed ljmp to sjmp
sjmp 00105$
00109$:
ret
;------------------------------------------------------------
;Allocation info for local variables in function 'display'
;------------------------------------------------------------
;disdata Allocated with name '_display_PARM_2'
;disseg Allocated to registers r2
;dataf Allocated to registers r3
;------------------------------------------------------------
;c:/hj51avr/code/c/file3.c:54: void display(unsigned char disseg,unsigned char disdata)
; -----------------------------------------
; function display
; -----------------------------------------
_display:
; genReceive
mov r2,dpl
;c:/hj51avr/code/c/file3.c:57: dataf = 1;
; genAssign
mov r3,#0x01
;c:/hj51avr/code/c/file3.c:58: while(disseg)
; genAssign
00101$:
; genIfx
mov a,r2
; genIfxJump
; Peephole 110 removed ljmp by inverse jump logic
jz 00103$
00108$:
;c:/hj51avr/code/c/file3.c:60: dataf <<= 1;
; genLeftShift
; genLeftShiftLiteral
; genlshOne
mov a,r3
add a,acc
mov r3,a
;c:/hj51avr/code/c/file3.c:61: disseg--;
; genMinus
; genMinusDec
dec r2
; Peephole 112.b changed ljmp to sjmp
sjmp 00101$
00103$:
;c:/hj51avr/code/c/file3.c:63: sege = 0;
; genAssign
clr _P2_7
;c:/hj51avr/code/c/file3.c:64: segdata = dataf; //这里首先把要显示的数据放到数据总线
; genAssign
mov _P0,r3
;c:/hj51avr/code/c/file3.c:65: segb = 1; //这里给出一个脉冲,数据送往位选端
; genAssign
setb _P2_6
;c:/hj51avr/code/c/file3.c:66: segb = 0;
; genAssign
clr _P2_6
;c:/hj51avr/code/c/file3.c:68: segdata = disbuf_u[disdata];
; genPlus
mov a,_display_PARM_2
; Peephole 181 changed mov to clr
; genPointerGet
; genCodePointerGet
; Peephole 181 changed mov to clr
; Peephole 186.d optimized movc sequence
mov dptr,#_disbuf_u
movc a,@a+dptr
mov _P0,a
;c:/hj51avr/code/c/file3.c:69: segd = 1; //这里给出一个脉冲,数据送往段选端
; genAssign
setb _P2_5
;c:/hj51avr/code/c/file3.c:70: segd = 0;
; genAssign
clr _P2_5
00104$:
ret
.area CSEG (CODE)
_disbuf_u:
.db #0xC0
.db #0xF9
.db #0xA4
.db #0xB0
.db #0x99
.db #0x92
.db #0x82
.db #0xF8
.db #0x80
.db #0x90
.db #0x88
.db #0x83
.db #0xC6
.db #0xA1
.db #0x86
.db #0x8E
.db #0x40
.db #0x79
.db #0x24
.db #0x30
.db #0x19
.db #0x12
.db #0x02
.db #0x78
.db #0x00
.db #0x10
.db #0x08
.db #0x03
.db #0x46
.db #0x21
.db #0x06
.db #0x0E
.area XINIT (CODE)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -