2016-05-25 31 views
0

Ich weiß nicht, warum ich nichts mit printf in GAS Assembly drucken kann, wenn \n (LF - newline) am Ende der Zeichenfolge fehlt. Wenn ich den Zeilenumbruch char \n die Zeile druckt, aber wenn ich \n entferne die Zeile nicht gedruckt. Kann mir jemand sagen warum?Printf with gas assembly

.extern printf 
.section .data 

hello: 
    .string "Hello!" # doesn't print this way when \n is missing 

.section .text 

.globl _start 

_start: 
    nop 
    movl $hello, %edi 
    movl $0, %eax 
    call printf 

_end:  
    movq $60, %rax #use the _exit syscall 
    movq $0, %rdi #return error code 0 
    syscall   #make syscall 
+5

Wenn Sie die C-Bibliothek verwenden möchten (das 'printf' ein Teil ist), verwenden Sie' main' als Einstiegspunkt und verwenden Sie nicht den 'exit' syscall. Sie lassen die C-Bibliothek nicht ordnungsgemäß herunterfahren, so dass die gepufferte Zeile nicht gedruckt wird. PS: Wenn du das nächste Mal siehst, dass deine Frage mit kaputter Formatierung auftaucht, repariere sie bitte selbst. Verwenden Sie die Vorschau entsprechend. – Jester

+0

Versuchen Sie '.asciz' anstelle von' .string' in der Definition der auszugebenden Zeichenfolge. – zx485

+0

Sorry Jester für Sie nicht hohe Standards erfüllen. – morophla

Antwort

-1
pushl %ebp 
lea hello, %edi 
movl %esp, %ebp /*<----*/ 
call printf 
popl %ebp 
+0

Während dieser Code die Frage beantworten kann, würde ein zusätzlicher Kontext darüber, wie und/oder warum er das Problem löst, den langfristigen Wert der Antwort verbessern. – Badacadabra