2014-11-06 66 views
0

調用printf向控制檯顯示狀態消息時,會輸出兩次。不知道爲什麼。我期望我的輸出是:從程序集調用printf時輸出字符串兩次

Generating move list file... 
Done 

而是我得到:

Generating move list file... 
Done 
Done 

我得到一個重複的「完成」出於某種原因。

[SECTION .data] 
GenMsg:  db "Generating move list file...",10 
DoneMsg: db "Done",10 

extern printf 

[SECTION .bss] 

[SECTION .text] 
global main 

main: 
push ebp   ; set up stack frame 
mov ebp,esp 
push ebx   ; save regs 
push esi 
push edi 

push GenMsg   ; push addr of gen msg on stack 
call printf   ; display gen msg 
add esp,4   ; clean up stack 1 parm * 4 = 4 bytes 

push DoneMsg  ; push addr of done msg on stack 
call printf   ; display done msg 
add esp,4   ; clean up stack 1 parm * 4 = 4 bytes 

exit: 
pop edi    ; restore regs 
pop esi 
pop ebx 
mov esp,ebp   ; destroy stack frame 
pop ebp 
ret 

回答

6

您的字符串不正確null-terminated。那麼當你打印GenMsg時會發生什麼,就是你的兩個字符串都被打印了。然後您打印DoneMsg並獲得第二個"Done"
您需要在每個字符串後添加值爲0的字節:

GenMsg:  db "Generating move list file...",10,0 
DoneMsg: db "Done",10,0 
相關問題