Странные результаты с movzwl, %ax и отрицательными значениями
Хорошо, я имею дело со следующим фрагментом кода:
push %ebp
mov %esp,%ebp
push %ebx
mov 0x8(%ebp),%eax
movzwl %ax,%edx
Так что это ведет себя как ожидалось, когда дело касается положительных ценностей. Значение, скопированное в%edx, является последними 16 битами%eax (или%ax).
Однако, если вы введете отрицательное число, все начинает становиться странным, и, похоже, оно не ведет себя так, как ожидалось.
Например, если значение% eax равно -67043552, то значение, скопированное в%edx, равно 65312.
Я довольно новичок в сборке, извините, если это явное неверное истолкование с моей стороны. Любая помощь будет принята с благодарностью.
1 ответ
Помни что movzwl
копирует только биты в %ax
в %edx
заполняя высокие 16 бит %edx
с нулями.
Так %edx
всегда заканчивается положительным числом, меньшим или равным 65535.
В деталях: -67043552
в шестнадцатеричном виде fc00ff20
, Так что, если это в %eax
, затем %ax
содержит ff20
, Если вы переместите это в %edx
с нулевым расширением, то %edx
получает 0000ff20
, Это 65312.