Processador de configuração para o modo de 32 bits
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.
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