Extensão de assinatura - Sign extension

Extensão de sinal (abreviado como sext ) é a operação, em aritmética de computador , de aumentar o número de bits de um número binário enquanto preserva o sinal do número (positivo / negativo) e o valor. Isso é feito anexando dígitos ao lado mais significativo do número, seguindo um procedimento dependente da representação particular do número com sinal usado.

Por exemplo, se seis bits são usados ​​para representar o número " 00 1010" (decimal positivo 10) e a operação de extensão de sinal aumenta o comprimento da palavra para 16 bits, então a nova representação é simplesmente " 0000 0000 0000 1010". Assim, tanto o valor quanto o fato de o valor ser positivo são mantidos.

Se dez bits são usados ​​para representar o valor " 11 1111 0001" (decimal 15 negativo) usando o complemento de dois , e este é o sinal estendido para 16 bits, a nova representação é " 1111 1111 1111 0001". Assim, ao preencher o lado esquerdo com uns, o sinal negativo e o valor do número original são mantidos.

No conjunto de instruções Intel x86 , por exemplo, existem duas maneiras de fazer extensão de sinal:

  • utilizando as instruções cbw, cwd, cwde, e cdq: converso byte a palavra, palavra a palavra dupla, palavra a palavra dupla prolongada, e de palavras duplas para quadword, respectivamente (no contexto x 86 um byte tem 8 bits, uma palavra de 16 bits, uma palavra dupla e estendido de palavras duplas 32 bits e uma palavra quádrupla de 64 bits);
  • usando um dos movimentos estendidos de sinal, realizados pela movsxfamília de instruções ("mover com extensão de sinal").

Extensão zero

Um conceito semelhante é a extensão zero (abreviada como zext ). Em uma operação de mover ou converter, a extensão zero refere-se a definir os bits altos do destino como zero, em vez de defini-los como uma cópia do bit mais significativo da origem. Se a origem da operação for um número sem sinal, a extensão zero é geralmente a maneira correta de movê-lo para um campo maior, preservando seu valor numérico, enquanto a extensão do sinal é correta para os números com sinal.

Nos conjuntos de instruções x86 e x64, a movzxinstrução ("mover com extensão zero") executa esta função. Por exemplo, movzx ebx, alcopia um byte do alregistrador para o byte de ordem inferior de ebxe, a seguir, preenche os bytes restantes de ebxcom zeros.

No x64, a maioria das instruções que gravam nos 32 bits inferiores de qualquer um dos registradores de uso geral zera a metade superior do registrador de destino. Por exemplo, a instrução mov eax, 1234irá limpar os 32 bits superiores do eaxregistro.

Referências

  • Mano, Morris M .; Kime, Charles R. (2004). Logic and Computer Design Fundamentals (3ª ed.), Pp 453. Pearson Prentice Hall. ISBN  0-13-140539-X .

Veja também