Странные результаты с movzwl, %ax и отрицательные значения

StackOverflow https://stackoverflow.com/questions/7315523

Вопрос

Хорошо, поэтому я имею дело со следующим фрагментом кода:

push   %ebp
mov    %esp,%ebp   
push   %ebx
mov    0x8(%ebp),%eax 
movzwl %ax,%edx

Так что это ведет себя так, как и ожидалось при работе с положительными ценностями. Стоимость, скопированное в %EDX, - это 16 бит % %EAX (или %AX).

Однако, если вы вкладываете отрицательное число, все начинает становиться странным, и, похоже, это не ведет себя, как ожидалось.

Например, если значение %EAX составляет -67043552, то значение, скопированное в %EDX, составляет 65312.

Я довольно новичок в собрании, извините, если это очевидное неверное толкование с моей стороны. Любая помощь будет очень оценена.

Это было полезно?

Решение

Помните это movzwl копирует только биты в %ax в %edx заполнение в высоких 16 кусочках %edx с нулями.

Так %edx Всегда заканчивается положительным числом меньше или равным 65535.

В деталях: -67043552 в Гексе есть fc00ff20. Анкет Так если это в %eax, тогда %ax содержит ff20. Анкет Если вы перенесете это в %edx с нулевой растяжкой, затем %edx получает 0000ff20. Анкет Это 65312.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top