ГБД: Печать двоичных значений опускает ведущий ноль? - PullRequest
0 голосов
/ 31 декабря 2018

Я пишу несколько простых программ на ассемблере.Тем не менее, я заметил, что хотя я могу очень хорошо проверять двоичные значения в памяти, при их печати (в регистрах) пропускается начальный ноль.Это продолжает застать меня врасплох, и поэтому мне интересно, есть ли причина для этого.


Программа

    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], я получаю следующее двоичное значение с помощью команды exam:

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

Я проверил это вручную.Однако команда print выдает что-то иное после загрузки в регистр eax:

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

Первая - 32 бита, а последняя - 31. Начальный ноль опускается.Я делаю что-то не так при отображении этих значений?

1 Ответ

0 голосов
/ 31 декабря 2018

Что-то не так в отображении этих значений?

Нет.GDB несовместим с обработкой начального нуля между командами x и p, вот и все.

Если вы хотите, чтобы print печатал начальные нули, используйте документацию p/tz $eax ()).

...