2012-05-24 20 views

Respuesta

8

En este caso, no habrá diferencia observable (a diferencia de las reivindicaciones respuesta aceptada - el ejemplo de MOVE ensamblará como MOVEA que hace no alterar la CCR, ver M68K Manual de referencia Pg 4-116 a 4-120) .

5

La instrucción lea no afecta a los indicadores, donde la instrucción move sí lo hace. Específicamente, Z y C se borrarán después del move #$1000,a0.

+0

@ yes123 Hoy raramente escribo algo en ensamblaje, pero todavía veo con bastante frecuencia el ensamblado generado por gcc - para comprobar si no se ha vuelto a estropear :-) Pero en ese momento era dueño de una computadora basada en 68k (Atari ST :-)) montaje de escritura era una tarea bastante común para acelerar las rutinas críticas. – hirschhornsalz

+0

otra pequeña diferencia si le interesa :) http://stackoverflow.com/questions/10766855/why-address-register-postincrement-is-a0 – dynamic

3

Durandal es correcto, las operaciones que implican un registro de dirección generalmente no tienen impacto en las banderas del procesador; en este caso las dos instrucciones se comportarán igual y tomarán exactamente el mismo tiempo de CPU (8 ciclos usando el modo de direccionamiento corto o 12 usando modo largo).

MOVE xx, an no es una instrucción real, es algo que los ensambladores permiten, pero si observa el resultado desensamblado, verá que la instrucción real es MOVEA.

0

Cuando estaba aprendiendo a programar en lenguaje ensamblador (68k), se observó una diferencia con respecto a este ejemplo de LEA y MOVE.L cuando se trata de registros de direcciones. En términos de usar etiquetas definitivamente hay una gran diferencia.

Digamos que usted tiene una etiqueta Foo para algunos DC.*.

LEA Foo, A0  ;Loads Foo into Address Register A0 

MOVE.L #Foo, A0 ;Loads Foo into Address Register A0 

La lección fue que, en condiciones normales, las dos instrucciones anteriores lograrían lo mismo. Sin embargo, debido a la "reubicación" en los sistemas de la vida real, la de abajo puede causar problemas.

Es más seguro usar el enfoque LEA. Si o no puede haber un problema al usar $1000 - No estoy seguro. Sin embargo, para hablar sobre la diferencia entre este LEA y MOVE.L cuando se trata de registros de direcciones, esto definitivamente es algo que debe considerarse.

+0

No creo que esta afirmación sea completamente correcta. De hecho, hay una diferente en 'reubicación', pero solo si has usado el modo relativo de pc para lea. LEA Foo (pc), A0 es de hecho independiente de la posición, pero LEA Foo, A0 como move.l # Foo, A0 hará que el ensamblador genere una tabla de reubicación para la referencia de la etiqueta. Por supuesto, la versión relativa de la PC tiene algunos inconvenientes, la etiqueta referida tiene que estar en +/- 32k bytes de la instrucción. –