C 从程序集调用printf时字符串输出两次
调用printf向控制台显示状态消息时,它会输出两次。不知道为什么。我希望我的输出是:C 从程序集调用printf时字符串输出两次,c,assembly,x86,nasm,C,Assembly,X86,Nasm,调用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 pri
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
你的字符串不正确。因此,当您打印
GenMsg
时,两个字符串都会被打印出来。然后打印DoneMsg
,并获得第二个“完成”
您需要在每个字符串后添加一个值为0的字节:
GenMsg: db "Generating move list file...",10,0
DoneMsg: db "Done",10,0
你的字符串不正确。因此,当您打印
GenMsg
时,两个字符串都会被打印出来。然后打印DoneMsg
,并获得第二个“完成”
您需要在每个字符串后添加一个值为0的字节:
GenMsg: db "Generating move list file...",10,0
DoneMsg: db "Done",10,0