[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


Anmelden zum Antworten