⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vprintf.asm

📁 sdcc的win版本.是small device c compiler的意思.支持8051和z80.是一个遵循GPL的软件,不过他的库函数是LGPL的,允许商业联结,可以用在自己的软件里
💻 ASM
📖 第 1 页 / 共 3 页
字号:
;--------------------------------------------------------
; File Created by SDCC : FreeWare ANSI-C Compiler
; Version 2.3.1-pj3 Sun Jan 20 13:10:03 2002

;--------------------------------------------------------
	.module vprintf
	
;--------------------------------------------------------
; Public variables in this module
;--------------------------------------------------------
	.globl _vprintf_PARM_2
	.globl _vsprintf_PARM_3
	.globl _vsprintf_PARM_2
	.globl _vsprintf
	.globl _vprintf
;--------------------------------------------------------
; special function registers
;--------------------------------------------------------
;--------------------------------------------------------
; special function bits 
;--------------------------------------------------------
;--------------------------------------------------------
; internal ram data
;--------------------------------------------------------
	.area DSEG    (DATA)
_output_ptr:
	.ds 3
_value:
	.ds 5
_radix:
	.ds 1
_charsOutputted:
	.ds 2
_vsprintf_PARM_2::
	.ds 3
_vsprintf_PARM_3::
	.ds 1
_vsprintf_decimals_1_1::
	.ds 1
_vsprintf_c_1_1::
	.ds 1
_vprintf_PARM_2::
	.ds 1
;--------------------------------------------------------
; 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)
;--------------------------------------------------------
; external initialized ram data
;--------------------------------------------------------
	.area XISEG   (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 'output_char'
;------------------------------------------------------------
;c                         Allocated to registers r2 
;	vprintf.c 86
;	-----------------------------------------
;	 function output_char
;	-----------------------------------------
_output_char:
	ar2 = 0x02
	ar3 = 0x03
	ar4 = 0x04
	ar5 = 0x05
	ar6 = 0x06
	ar7 = 0x07
	ar0 = 0x00
	ar1 = 0x01
	push	_bp
	mov	_bp,sp
;	vprintf.c 96
;	genReceive
	mov	r2,dpl
;	vprintf.c 88
;	genIfx
;	genIfxJump
; Peephole 111   removed ljmp by inverse jump logic
	jnb  _output_to_string,00102$
00107$:
;	vprintf.c 90
;	genAssign
	mov	r3,_output_ptr
	mov	r4,(_output_ptr + 1)
	mov	r5,(_output_ptr + 2)
;	genPointerSet
;	genGenPointerSet
	mov	dpl,r3
	mov	dph,r4
	mov	b,r5
	mov	a,r2
	lcall	__gptrput
;	genPlus
;	genPlusIncr
	inc	_output_ptr
	clr	a
	cjne	a,_output_ptr,00108$
	inc	(_output_ptr + 1)
00108$:
; Peephole 132   changed ljmp to sjmp
	sjmp 00103$
00102$:
;	vprintf.c 94
;	genCall
	mov	dpl,r2
	lcall	_putchar
00103$:
;	vprintf.c 96
;	genPlus
;	genPlusIncr
	inc	_charsOutputted
	clr	a
	cjne	a,_charsOutputted,00109$
	inc	(_charsOutputted + 1)
00109$:
00104$:
	mov	sp,_bp
	pop	_bp
	ret
;------------------------------------------------------------
;Allocation info for local variables in function 'output_digit'
;------------------------------------------------------------
;n                         Allocated to registers r2 
;	vprintf.c 101
;	-----------------------------------------
;	 function output_digit
;	-----------------------------------------
_output_digit:
	push	_bp
	mov	_bp,sp
;	vprintf.c 104
;	genReceive
	mov	r2,dpl
;	vprintf.c 103
;	genCmpGt
;	genCmp
	clr	c
	mov	a,#0x09
	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
; Peephole 132   changed ljmp to sjmp
	sjmp 00104$
00103$:
;	vprintf.c 104
;	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
; Peephole 132   changed ljmp to sjmp
	sjmp 00106$
00105$:
;	genPlus
	mov	a,#0x37
	add	a,r2
	mov	r4,a
00106$:
;	genAssign
	mov	ar3,r4
00104$:
;	genCall
	mov	dpl,r3
	lcall	_output_char
00101$:
	mov	sp,_bp
	pop	_bp
	ret
;------------------------------------------------------------
;Allocation info for local variables in function 'output_2digits'
;------------------------------------------------------------
;b                         Allocated to registers r2 
;	vprintf.c 109
;	-----------------------------------------
;	 function output_2digits
;	-----------------------------------------
_output_2digits:
	push	_bp
	mov	_bp,sp
;	vprintf.c 112
;	genReceive
	mov	r2,dpl
;	vprintf.c 111
;	genRightShift
;	genRightShiftLiteral
;	genrshOne
	mov	a,r2
	swap	a
	anl	a,#0x0f
	mov	dpl,a
;	genCall
	push	ar2
	lcall	_output_digit
	pop	ar2
;	vprintf.c 112
;	genAnd
	mov	a,#0x0F
	anl	a,r2
	mov	dpl,a
;	genCall
	lcall	_output_digit
00101$:
	mov	sp,_bp
	pop	_bp
	ret
;------------------------------------------------------------
;Allocation info for local variables in function 'calculate_digit'
;------------------------------------------------------------
;	vprintf.c 117
;	-----------------------------------------
;	 function calculate_digit
;	-----------------------------------------
_calculate_digit:
;	vprintf.c 121
;	genAssign
	mov	r2,#0x20
00103$:
;	genCmpEq
	cjne	r2,#0x00,00112$
; Peephole 132   changed ljmp to sjmp
	sjmp 00107$
00112$:
;	vprintf.c 140
;	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 142
;	genAssign
;	genCmpGt
;	genCmp
	clr	c
	mov	a,0x0004 + _value
	subb	a,_radix
;	genIfxJump
; Peephole 132   changed ljmp to sjmp
; Peephole 160   removed sjmp by inverse jump logic
	jc   00105$
00113$:
;	vprintf.c 144
;	genAssign
;	genMinus
	clr	c
	mov	a,0x0004 + _value
	subb	a,_radix
;	genPointerSet
;	genNearPointerSet
;	genDataPointerSet
	mov	(_value + 0x0004),a
;	vprintf.c 145
;	genPointerGet
;	genNearPointerGet
;	genDataPointerGet
	mov	r3,_value
;	genPlus
;	genPlusIncr
	mov	a,#0x01
	add	a,r3
;	genPointerSet
;	genNearPointerSet
;	genDataPointerSet
	mov	_value,a
00105$:
;	vprintf.c 121
;	genMinus
;	genMinusDec
	dec	r2
; Peephole 132   changed ljmp to sjmp
	sjmp 00103$
00107$:
	ret
;------------------------------------------------------------
;Allocation info for local variables in function 'vsprintf'
;------------------------------------------------------------
;format                    Allocated to in memory with name '_vsprintf_PARM_2'
;ap                        Allocated to in memory with name '_vsprintf_PARM_3'
;buf                       Allocated to registers r2 r3 r4 
;width                     Allocated to registers r5 
;decimals                  Allocated to in memory with name '_vsprintf_decimals_1_1'
;length                    Allocated to registers r2 
;c                         Allocated to in memory with name '_vsprintf_c_1_1'
;	vprintf.c 282
;	-----------------------------------------
;	 function vsprintf
;	-----------------------------------------
_vsprintf:
;	vprintf.c 0
;	genReceive
	mov	r2,dpl
	mov	r3,dph
	mov	r4,b
;	vprintf.c 299
;	genAssign
	clr	a
	mov	(_charsOutputted + 1),a
	mov	_charsOutputted,a
;	vprintf.c 301
;	genAssign
	mov	_output_ptr,r2
	mov	(_output_ptr + 1),r3
	mov	(_output_ptr + 2),r4
;	vprintf.c 302
;	genIfx
	mov	a,r2
	orl	a,r3
	orl	a,r4
;	genIfxJump
; Peephole 109   removed ljmp by inverse jump logic
	jnz  00102$
00287$:
;	vprintf.c 304
;	genAssign
	clr	_output_to_string
; Peephole 132   changed ljmp to sjmp
	sjmp 00225$
00102$:
;	vprintf.c 308
;	genAssign
	setb	_output_to_string
;	vprintf.c 317
00225$:
00209$:
;	genAssign
	mov	r2,_vsprintf_PARM_2
	mov	r3,(_vsprintf_PARM_2 + 1)
	mov	r4,(_vsprintf_PARM_2 + 2)
;	genPointerGet
;	genGenPointerGet
	mov	dpl,r2
	mov	dph,r3
	mov	b,r4
	lcall	__gptrget
	mov	r5,a
;	genPlus
;	genPlusIncr
	inc	r2
	cjne	r2,#0x00,00288$
	inc	r3
00288$:
;	genAssign
	mov	_vsprintf_PARM_2,r2
	mov	(_vsprintf_PARM_2 + 1),r3
	mov	(_vsprintf_PARM_2 + 2),r4
;	genAssign
	mov	_vsprintf_c_1_1,r5
;	genIfx
	mov	a,r5
;	genIfxJump
	jnz	00289$
	ljmp	00211$
00289$:
;	vprintf.c 319
;	genCmpEq
	mov	a,_vsprintf_c_1_1
	cjne	a,#0x25,00290$
	sjmp	00291$
00290$:
	ljmp	00207$
00291$:
;	vprintf.c 321
;	genAssign
	clr	_vsprintf_left_justify_1_1
;	vprintf.c 322
;	genAssign
	clr	_vsprintf_zero_padding_1_1
;	vprintf.c 323
;	genAssign
	clr	_vsprintf_prefix_sign_1_1
;	vprintf.c 324
;	genAssign
	clr	_vsprintf_prefix_space_1_1
;	vprintf.c 325
;	genAssign
	clr	_vsprintf_signed_argument_1_1
;	vprintf.c 326
;	genAssign
	mov	_radix,#0x00
;	vprintf.c 327
;	genAssign
	clr	_vsprintf_char_argument_1_1
;	vprintf.c 328
;	genAssign
	clr	_vsprintf_long_argument_1_1
;	vprintf.c 329
;	genAssign
	clr	_vsprintf_float_argument_1_1
;	vprintf.c 330
;	genAssign
	mov	r5,#0x00
;	vprintf.c 331
;	genAssign
	mov	_vsprintf_decimals_1_1,#0xFF
;	vprintf.c 333
;	genAssign
	mov	_vsprintf_PARM_2,r2
	mov	(_vsprintf_PARM_2 + 1),r3
	mov	(_vsprintf_PARM_2 + 2),r4
00104$:
;	vprintf.c 335
;	genPointerGet
;	genGenPointerGet
	mov	dpl,_vsprintf_PARM_2
	mov	dph,(_vsprintf_PARM_2 + 1)
	mov	b,(_vsprintf_PARM_2 + 2)
	lcall	__gptrget
	mov	_vsprintf_c_1_1,a
;	genPlus
;	genPlusIncr
	inc	_vsprintf_PARM_2
	clr	a
	cjne	a,_vsprintf_PARM_2,00292$
	inc	(_vsprintf_PARM_2 + 1)
00292$:
;	genAssign
;	vprintf.c 337
;	genCmpEq
	mov	a,_vsprintf_c_1_1
; Peephole 132   changed ljmp to sjmp
; Peephole 199   optimized misc jump sequence
	cjne a,#0x25,00106$
;00293$:
; Peephole 200   removed redundant sjmp
00294$:
;	vprintf.c 338
;	genCall
	mov	dpl,_vsprintf_c_1_1
	push	ar5
	lcall	_output_char
	pop	ar5
;	vprintf.c 339
	ljmp	00209$
00106$:
;	vprintf.c 342
;	genCall
	mov	dpl,_vsprintf_c_1_1
	push	ar5
	lcall	_isdigit
	mov	a,dpl
	pop	ar5
;	genIfx
;	genIfxJump
	jnz	00295$
	ljmp	00113$
00295$:
;	vprintf.c 343
;	genCmpEq
	mov	a,_vsprintf_decimals_1_1
; Peephole 132   changed ljmp to sjmp
; Peephole 199   optimized misc jump sequence
	cjne a,#0xFF,00110$
;00296$:
; Peephole 200   removed redundant sjmp
00297$:
;	vprintf.c 344
;	genMult
;	genMultOneByte
	mov	b,#0x0A
	mov	a,r5
	mul	ab
	mov	r0,a
	mov	r1,b
;	genMinus
	mov	a,_vsprintf_c_1_1
	add	a,#0xd0
;	genCast
; Peephole 105   removed redundant mov
	mov  r7,a
	rlc	a
	subb	a,acc
	mov	r2,a
;	genPlus
	mov	a,r7
	add	a,r0
	mov	r0,a
	mov	a,r2
	addc	a,r1
	mov	r1,a
;	genCast
	mov	ar5,r0
;	vprintf.c 345
;	genCmpEq
	cjne	r5,#0x00,00298$
	sjmp	00299$
00298$:
	ljmp	00104$
00299$:
;	vprintf.c 347
;	genAssign
	setb	_vsprintf_zero_padding_1_1
	ljmp	00104$
00110$:
;	vprintf.c 350
;	genMult
;	genMultOneByte
	clr	F0
	mov	a,_vsprintf_decimals_1_1
	jnb	acc.7,00300$
	setb	F0
	cpl	a
	inc	a
00300$:
	mov	b,#0x0a
	mul	ab
	jnb	F0,00301$
	cpl	a
	add	a,#1
	xch	a,b
	cpl	a
	addc	a,#0
	xch	a,b
00301$:
	mov	r2,a
	mov	r3,b
;	genMinus
	mov	a,_vsprintf_c_1_1
	add	a,#0xd0
;	genCast

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -