【问题标题】:String output twice when calling printf from assembly从程序集调用 printf 时字符串输出两次
【发布时间】:2014-11-06 21:32:44
【问题描述】:

当调用 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

【问题讨论】:

    标签: c assembly x86 nasm


    【解决方案1】:

    您的字符串不正确null-terminated。所以当你打印GenMsg 时会发生什么,你的两个字符串都被打印了。然后打印DoneMsg 并获得第二个"Done"
    您需要在每个字符串之后添加一个值为 0 的字节:

    GenMsg:     db "Generating move list file...",10,0
    DoneMsg:    db "Done",10,0
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-26
      • 2020-11-15
      • 2012-01-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多