[GnuASM] printf gibt nicht alle datentypen aus



  • Abend an alle,

    printf gibt hier nur "ascii" oder "string" als datentyp aus
    Hier benutzte ich aber "int" und die ausgabe bleibt leer!

    .section .data
    value:	.int 8
    
    .section .text
    .type funk, @function
    funk:
    	pushl %ebp
    	movl %esp, %ebp
    	subl $4, %esp
    
    	movl $value, -4(%ebp)
    	call printf
    
    	addl $8, %esp
            pop %ebp
    	ret
    
    .globl _start
    _start:
    	call funk
    
    	movl $1, %eax
    	movl $0, %ebx
    
    	int $0x80
    

    Ich hab dann gleich ein beispiel gesucht bei dem printf funktioniert:
    - habe einen C code bei dem ein interger über printf ausgegeben wird geschrieben und mir dem vom gcc erzeugten asm code angesehn :

    .file	"casm.c"
    	.section	.rodata
    .LC0:
    	.string	"%d"
    	.text
    .globl main
    	.type	main, @function
    main:
    	leal	4(%esp), %ecx
    	andl	$-16, %esp
    	pushl	-4(%ecx)
    	pushl	%ebp
    	movl	%esp, %ebp
    	pushl	%ecx
    	subl	$36, %esp
    	movl	$3, -8(%ebp)
    	movl	-8(%ebp), %eax
    	movl	%eax, 4(%esp)
    	movl	$.LC0, (%esp)
    	call	printf
    	movl	$0, %eax
    	addl	$36, %esp
    	popl	%ecx
    	popl	%ebp
    	leal	-4(%ecx), %esp
    	ret
    	.size	main, .-main
    	.ident	"GCC: (GNU) 4.1.3 20070929 (prerelease) (Ubuntu 4.1.2-16ubuntu2)"
    	.section	.note.GNU-stack,"",@progbits
    

    Ich habe also noch folgenede zeilen hinzugefügt:

    .section .data
    value:	.int 8
    .section .rodata
    .LC0:
    	.string	"%d"
    	.text
    
    .section .text
    .type funk, @function
    funk:
    	pushl %ebp
    	movl %esp, %ebp
    	subl $8, %esp
    
            movl $.LC0, -8(%ebp)
    	movl $value, -4(%ebp)
    	call printf
    
    	addl $8, %esp
            pop %ebp
    	ret
    
    .globl _start
    _start:
    	call funk
    
    	movl $1, %eax
    	movl $0, %ebx
    
    	int $0x80
    

    ...Die Ausgabe ist immernoch LEER 😕

    Bestimmt kann mich einer von euch aufklären
    Danke schonmal !

    Gruss darrell



  • Keiner ne Idee ???

    ...soll ich die frage anders formulieren, oder ist klar was gemeint ist ?

    PS: freue mich über eine Aufklärung 😉



  • Nope, ist im Grunde schon klar, denke ich. Koenntest vielleicht aber nochmal den Code mit Aenderungen posten.
    Ich fuer meinen Teil bekomme aber leider von AT&T/GAS Augenkrebs. 😉



  • Gut !

    ...hab jetzt die komplette änderung gepostet



  • Was mir ansonsten noch auffaellt ist nur: Versuch mal statt $value einfach $3 (wie der gcc). Ansonsten bleibt dir wohl nur weiter probieren... oder eben warten, bis jemand mit mehr Ahnung vom GAS hier vorbeischaut. 😃



  • hatte ich auch schon versucht -> wieder keine ausgabe



  • ruf mal nach printf fflush(stdout) auf



  • Jetzt endlich, nach vielen Tagen!!!

    Ich habe einen Weg gefunden wie printf integer ausgibt.
    Ehrlich gesagt wundert es mich etwas :

    Es lag an der Deklaration vom Format-string:

    .section .data
               format: .string "%i\n\0"
    

    Warum im vom Compiler erzeugten asm code es auch ohne newline und term byte
    funktioniert ist mir weiterhin ein Rätsel.

    ...Bin für jede Erklärung dankbar

    Gruss darrel


Log in to reply