Pergunta

Eu vejo código como:

mov ax, cs
mov ds, ax
mov es, ax

Por que não posso apenas comprimir isso:

mov ds, cs
mov es, cs

É a primeira maneira mais rápida desde a sua usando o registo acumulador? Mas isso não parece intuitiva desde cs e ds são segmento registros . Ou há alguma restrição que eu sou desconhecem?

Eu estou usando nasm pelo caminho.

Foi útil?

Solução

Você não pode mov registro de segmento para segmento de registo -. Não há nenhuma instrução para ele

Outras dicas

Há apenas tanto espaço em um processador para o microcódigo para todas as suas instruções. Assim, uma instrução geral é muitas vezes preferido por várias redes de propósito específico para raramente uused registradores de segmento operações lago mudança. Além disso, para alguns processadores o número de instruções é absolutamente limitados pela arquitetura -. Por exemplo, o processador original 8080 foi limitada a 256 instruções como todos eles tinham que ter o código op codificado em um único byte

Não é a linguagem assembly realmente, mas a linguagem de máquina subjacente que impede que essas operações.

Enquanto a montagem é feita de fácil de ler palavras ou mnemônicos, eles realmente representam muito directamente os 1s e 0s do código de máquina. Em x 86 CPUs cada instrução é tipicamente constituída por uma sequência de bytes com bytes individuais ou mesmo bits dentro dos bytes que têm significado. Alguns bits representam a instrução, outros representam a modo de endereçamento . No registo modos de endereçamento, tais como seus exemplos alguns bits representam quais registros específicos são para ser usado como a origem eo destino da instrução mov.

Agora, a família x86 de processadores voltar um longo caminho a década de 1970, quando a arquitetura CPU era mais simples. Naqueles dias, o conceito do acumulador foi de importância fundamental - ax é o 16 bit x86 acumulador. Todos os cálculos foram construídos ou "acumulado" neste registo por isso estava disponível para todas as instruções. Outros registos de uso geral tinha um alcance mais restrito de uso.

Como as instruções foram baseadas em bytes que você queria como alguns bytes para representar uma instrução possível para manter a instrução decodificação rápido. Para manter tantas instruções o mais curto possível o uso do acumulador é feita central.

Em CPUs mais modernas, como as Motorola 680x0 registos de uso mais gerais têm mais habilidades que antes eram do domínio do acumulador. Em RISC CPUs todos os registos são tão flexíveis quanto acumuladores. Ouvi dizer que no modo 64-bit x86 atual / amd64 conjunto de instruções é agora muito menos restrito.

Olhe para o manual Intel Volume 2 Instrução Set Referência - 325383-056US setembro 2015 " MOV mover" coluna "Instrução".

A única mov de 16 bits aos registos é codificado em:

mov r/m16, Sreg

E "3.1.1.3 Coluna Instrução no Quadro Resumo Opcode", explica:

  • r / m16 - Uma palavra registrador de uso geral ou de memória operando utilizado para instruções cuja operando-size atributo é de 16 bits. Os registros palavra de uso geral são:. AX, CX, DX, BX, SP, BP, SI, DI
  • Sreg -. Um registro de segmento

Assim mov ds, cs não é encodable, como não existe uma versão mov Sreg, Sreg.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top