Подразумевает ли movsx что-либо о подписи пункта назначения? - PullRequest
0 голосов
/ 01 мая 2018

Из этого вопроса :

movzx ecx, al; переместить байт в двойное слово с нулевым расширением

Существует также MOVSX, если вы хотите, чтобы значение в al обрабатывалось как подписанное.

Выше упомянуто, что 'movsx' подразумевает, что al подписан.

  1. Означает ли movzx, что al не подписан?
  2. Что movsx подразумевает в отношении подписи ecx (если что-нибудь)?
  3. И что movzx подразумевает под подписью ecx (если что-нибудь)?

1 Ответ

0 голосов
/ 01 мая 2018

Нет подписи как таковой прилагается к регистрам. movsx означает «назначить получателю значение, которое (рассматривается как подписанное) будет равно значению источника (рассматривается как подписанное)». То же самое для movzx, с без знака вместо со знаком . Поэтому, если вы используете sx, он действует так, как если бы и источник, и пункт назначения были подписаны, а zx , как если бы оба были без знака. Пример:

let al = 0xFF = (signed) -1 = (unsigned) 255 (the same number, all bits set)

after movsx ecx, al, all bits will be set:
ecx = 0xFFFFFFFF = (signed) -1 = (unsigned) 4294967295

after movzx ecx, al, only lower 8 bits will be set:
ecx = 0x000000FF = (signed) 255 = (unsigned) 255

Обратите внимание, что для меньшего регистра al числа -1 и 255 представлены одним и тем же набором битов, но для большего регистра ecx эти два одинаковых числа имеют различное битовое представление.

Редактировать: Как отметил Шут, использование movzx не подразумевает подпись места назначения, потому что после movzx старший бит места назначения всегда равен 0, поэтому он имеет одинаковое значение как при обработке как со знаком, так и когда рассматривается как без знака.

...