Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 程序集printf调用打印错误的值_Assembly_Format_Printf - Fatal编程技术网

Assembly 程序集printf调用打印错误的值

Assembly 程序集printf调用打印错误的值,assembly,format,printf,Assembly,Format,Printf,在我的代码中的这一点上,我知道eax包含12345678,这在我的调试器中是这样说的 push eax push print_r call printf add esp, 8 我的格式字符串是 print_r: db 0Ah, "number: %hd", 10, 0 它不打印12345678,而是打印24910 但是,当eax包含1234时,它会正确打印1234 我感觉它与字符串格式%hd有关,但我不知道如何使它可以无规则地打

在我的代码中的这一点上,我知道eax包含12345678,这在我的调试器中是这样说的

    push    eax
    push    print_r
    call    printf
    add     esp, 8
我的格式字符串是

print_r:    db 0Ah, "number: %hd", 10, 0
它不打印12345678,而是打印24910

但是,当eax包含1234时,它会正确打印1234

我感觉它与字符串格式%hd有关,但我不知道如何使它可以无规则地打印数字的大小/符号。

这是因为您使用%hd进行打印。 %hd获取16b值并打印,但您提供32b值

发生的情况:您的值是12345678,这意味着0xBC614E。现在因为你使用%HD,Primtf只考虑16b形式,这个数字将被截断到16b,并且打印的值将是0x614e,这正是你的打印值:24910。 2可能的固定:

将%d替换为printf格式%hd 用于在-32769和32768之间的16b上打印数字。
我很确定你是说%ld