Я пишу несколько простых программ на ассемблере.Тем не менее, я заметил, что хотя я могу очень хорошо проверять двоичные значения в памяти, при их печати (в регистрах) пропускается начальный ноль.Это продолжает застать меня врасплох, и поэтому мне интересно, есть ли причина для этого.
Программа
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. Начальный ноль опускается.Я делаю что-то не так при отображении этих значений?