2016-05-25 9 views
0

\n(LF - 改行)が文字列の最後にない場合、なぜGASアセンブリのprintfで何も印刷できないのですか?改行文字を\nに置くと、行が印刷されますが、\nを削除すると行が印刷されません。誰かが私に理由を教えてくれますか?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

あなたはエントリポイントとして 'main'を使用し、(printf'はの一部である'という)Cライブラリを使用したいと 'exit'システムコールを使用しない場合。バッファされた行が印刷されないように、Cライブラリを適切にシャットダウンしないでください。 PS:あなたの質問が壊れた書式で出てきたら、次回に自分で修正してください。必要に応じてプレビューを使用します。 – Jester

+0

出力する文字列の定義に '.string'の代わりに' .asciz'を試してください。 – zx485

+0

申し訳ありませんJesterはあなたに高い基準を満たしていないためです。 – morophla

答えて

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

このコードでは質問に答えることができますが、問題の解決方法および/または原因を説明する追加のコンテキストを提供することで回答の長期的価値が向上します。 – Badacadabra