Float Zahlen mit printf ausgeben

mike
Erstie
Erstie
Beiträge: 16
Registriert: 6. Nov 2011 13:59

Float Zahlen mit printf ausgeben

Beitrag von mike »

Hi,

hier ein Tipp wie Ihr float Zahlen mit printf ausgeben könnt:

Code: Alles auswählen

.data
ausgabe: .string "Der Ergebnisvektor enthaelt folgenden Werte: %f %f %f\n"
vek: .float 4.0, 3.0, 2.0, 1.0

.text

.globl main
main:
	leal vek, %esi	#Lade Addresse von vek in %esi
	fld 8(%esi)		#Pushe Wert von %esi an Stelle 8 in das ST(0) Register der FPU
	subl $8, %esp	#Erstelle 8Byte freien Speicher auf Stack
	fstpl (%esp)	#Pope Wert von ST(0) in den Wert, der von (%esp) dargetellt wird. Hierbei wird der Wert auf im Speicher geändert.
				#Zu beachten: %esp ist der Stack, also wird die Zahl als 8Byte Variable auf den Stack gepusht.

	fld 4(%esi)
	subl $8, %esp
	fstpl (%esp)

	fld 0(%esi)
	subl $8, %esp
	fstpl (%esp)

	pushl $ausgabe
	call printf	

.exit:
	movl $1, %eax
	int $0x80
Damit wird die Zahl in ST0 geladen, dann werden 8Byte auf dem Stack bereitgestellt und mit fstpl wird an der aktuellen Addresse des Stacks die float als 8Byte Variante, also als double in den Stack geladen.


Gruß
Mike

majias
Neuling
Neuling
Beiträge: 7
Registriert: 9. Nov 2011 22:34

Re: Float Zahlen mit printf ausgeben

Beitrag von majias »

Ok, hat sich erledigt =)
Danke für die Info.

Thomas Huxhorn
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 172
Registriert: 6. Okt 2011 15:25

Re: Float Zahlen mit printf ausgeben

Beitrag von Thomas Huxhorn »

So macht es auch der Compiler:

Code: Alles auswählen

void func(void) {
extern float a;
printf("%f", a);
}


	.file	"test.c"
	.section	.rodata
.LC0:
	.string	"%f"
	.text
.globl func
	.type	func, @function
func:
	pushl	%ebp
	movl	%esp, %ebp
	subl	$24, %esp         # 24b auf dem Stack bestellen. 8b fuer die Variable a und 16b fuer den String "%f"
	flds	a                       # Variable a nach st0 laden
	fstpl	4(%esp)             # Varibale a auf den Stack legen. Warum 4?
	movl	$.LC0, (%esp)    # String "%f" auf den Stack hauen. 
	call	printf
	leave
	ret
	.size	func, .-func
	.ident	"GCC: (Debian 4.3.2-1.1) 4.3.2"
	.section	.note.GNU-stack,"",@progbits

femu
Mausschubser
Mausschubser
Beiträge: 73
Registriert: 12. Sep 2009 19:21

Re: Float Zahlen mit printf ausgeben

Beitrag von femu »

Vielen Dank!
Das hat mir viel Nerven gespart.

Antworten

Zurück zu „Archiv“