Pergunta

Parece que o seguinte é um método comum fornecido em muitos tutoriais sobre a troca de um processador de 16 bits para 32 bits:

    mov     eax, cr0            ; set bit 0 in CR0-go to pmode
    or      eax, 1
    mov     cr0, eax

Por que eu não faria o seguinte:

    or      cr0, 1

Tem algo que estou perdendo? Possivelmente, a única coisa que consigo pensar é que não posso executar uma operação como essa no registro CR0.

Foi útil?

Solução

o or O operador não possui um código operacional no qual pode acessar o registro CR0. (Não é possível executar esta operação no registro do CR0.)

É por isso que o mov Existe: existe um código op que pode acessar o registro CR0.

Outras dicas

ou é um operador de comparação, onde realmente leva dois valores e cria uma solução. A solução é armazenada no EAX após a conclusão da operação. Ou não pode ser usado o registro de armazenamento AA, pois é uma operação especializado e é governado pelo escopo e é por isso que é uma boa prática obter seus resultados e armazenar imediatamente o novo valor logo após a conclusão do processo.

Elaborando o que foi dito sobre o uso ou com operandos, ele não tem capacidade para armazenamento apenas executa uma operação nos dados que já estão presentes. Pense ou goste de um botão em uma calculadora onde possui uma operação como Add, Subtrair, Multiplicar ou Divida. O código é a calculadora que gerencia os buffers de memória; etc. e utiliza os serviços de um operador/operação nos dados em seus armazenamentos de memória e, quando concluído, obtém os resultados de retorno para outras operações ou saída acabada para o usuário.

A questão aqui é lógica, bem como o código bem pensado e conciso - coisas legais.

Experimente isso e force 1 a CR0 em 1 comando:

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