Diferença entre LEA e mover.L?

Existem diferenças entre

LEA $1000,A0

e

MOVE #$1000,A0
Para colocar uma morada no registo de endereços?

Author: Flimzy, 2012-05-24

4 answers

Neste caso, não haverá diferença observável (ao contrário das alegações de resposta aceites-o exemplo de movimento irá montar como MOVEA que não altera o CCR, Ver Manual de referência M68K Pg 4-116 a 4-120).

 8
Author: Durandal, 2012-06-18 17:07:13

A instrução {[[0]} não afecta as bandeiras, onde a instrução move afecta. Especificamente Z e C serão limpos após move #$1000,a0.

 5
Author: Gunther Piez, 2012-05-24 15:52:30

Durandal está correcto, as operações que envolvem um registo de endereços não têm geralmente impacto nas opções do processador, neste caso específico as duas instruções irão comportar-se da mesma forma e ter o mesmo tempo de cpu (8 ciclos usando o modo de endereçamento curto ou 12 usando o modo longo).

Mover xx, an não é uma instrução real, é algo que os Montadores permitem, mas se você olhar para o resultado desmontado você verá que a instrução real é MOVEA.

 3
Author: Mickaël Pointier, 2013-05-02 17:59:38

Quando eu estava aprendendo a programar em linguagem de montagem (68k) havia uma diferença apontada em relação a este exemplo de LEA e MOVE.L quando se trata de lidar com registros de endereços. Em termos de utilização de rótulos, há definitivamente uma grande diferença.

Diz que tens um rótulo Foo para alguns DC.*.

LEA Foo, A0       ;Loads Foo into Address Register A0

MOVE.L #Foo, A0   ;Loads Foo into Address Register A0
A lição foi que, em condições normais, as duas instruções acima de fato realizariam a mesma coisa. No entanto, devido à" deslocalização " em sistemas da vida real, a parte inferior pode causar problemas. É mais seguro usar a abordagem LEA. Se pode ou não haver um problema ao usar $1000 - Não tenho a certeza. No entanto, falar sobre a diferença entre este LEA e MOVE.L ao lidar com registos de Endereços é definitivamente algo que tem de ser considerado.
 0
Author: Derek W, 2013-11-04 22:32:08