summaryrefslogtreecommitdiffstats
path: root/mdk-stage1/dietlibc/i386/write12.S
blob: a40f63a862ff0dbbb56dc9d33acf889050f41edd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include "PIC.h"

.text

.global __write1
.type	__write1,@function

.global __write2
.type	__write2,@function

					# regparm=1, daher Stringadresse in %eax
__write2:
	clc				# CY = 0
	.byte	0xB2			# zusammen mit nächstem Byte: mov dl,0xF9
__write1:
	stc				# CY = 1
	sbbl	%ecx,%ecx		# __write2: ecx=0, __write1: ecx=-1
	incl	%ecx
	incl	%ecx			# __write2: ecx=2, __write1: ecx=1
	xorl	%edx,%edx
	decl	%edx
.Lnext:	incl	%edx
	cmpb	%ch,(%edx,%eax)		# ch=0, da bei beiden Filedescriptoren Bits 15:8 0 sind
	jnz	.Lnext			# Stringlänge in edx, ohne eax zerstört zu haben
	PIC_SAVE		# non-PIC: empty line
	PIC_INIT		# non-PIC: empty line
	pushl	%edx
	pushl	%eax
	pushl	%ecx
#ifdef __DYN_LIB
	call	write@PLT
#else
	call	write			# alles ruf uf dn Stack und ab damit
#endif
	addl	$12,%esp		# und das leidvolle Putzen
	PIC_RESTORE		# non-PIC: empty line
	ret