GDB:打印二进制值会忽略前导零吗?

时间:2018-12-31 01:03:11

标签: gdb nasm yasm

我正在用y汇编器编写一些简单的汇编程序。但是,我注意到,尽管我可以很好地检查内存中的二进制值,但是(在寄存器中)打印它们会忽略前导零。这一直使我措手不及,所以我想知道是否有原因。


程序

    segment .data

f   dd  2.25        ; 32-bit floating point.

    segment .text
    global main

main:
    mov eax, [f]
    xor rax, rax
    ret

GDB

在与mov eax, [f]对应的行上设置断点后,我使用检查命令获得了以下二进制值:

(gdb) x/1tw &f
0x601030:   01000000000100000000000000000000

我已经手动验证了这一点。但是,一旦将print命令加载到eax寄存器中,它会产生不同的结果:

(gdb) p/t $eax
$2 = 1000000000100000000000000000000

前者是32位,而后者是31位。前导零被省略。在显示这些值时我做错什么了吗?

1 个答案:

答案 0 :(得分:0)

  

在显示这些值时我做错了吗?

不。 GDB在1+2+3+...+10x命令之间对前导零的处理不一致,仅此而已。

如果您希望p打印前导零,请使用printdocumentation)。