2012-05-24 11 views

Antwort

8

In diesem Fall wird es kein beobachtbaren Unterschied sein (im Gegensatz zu den akzeptierten Antwort Ansprüche - das MOVE Beispiel als Movea versammeln, die die CCR nicht ändern, siehe M68K 4-116 bis 4-120 Handbuch Pg Referenz) .

5

Die Anweisung lea beeinflusst keine Flags, wo die move Anweisung ausgeführt wird. Speziell werden Z und C nach der move #$1000,a0 gelöscht.

+0

@ yes123 Heutzutage schreibe ich selten etwas in Assembly, aber ich schaue immer noch ziemlich oft auf die von gcc generierte Assembly - um zu überprüfen, ob es nicht wieder versaut hat :-) Aber zu der Zeit besaß ich einen 68k basierten Rechner (Atari ST :-)) Das Schreiben von Assemblys war eine ziemlich häufige Aufgabe, um kritische Routinen zu beschleunigen. – hirschhornsalz

+0

ein weiterer kleiner Unterschied, wenn Sie daran interessiert sind :) http://stackoverflow.com/questions/10766855/why-address-register-postincrement-is-a0 – dynamic

3

Durandal ist korrekt, Operationen mit einem Adressregister haben im Allgemeinen keinen Einfluss auf die Prozessorflags, in diesem speziellen Fall verhalten sich die beiden Befehle gleich und nehmen genau die gleiche CPU-Zeit an (8 Zyklen mit kurzer Adressierung oder 12 mit langer Modus).

MOVE xx, ein ist keine echte Anweisung, es ist etwas, Assembler erlauben, aber wenn Sie das zerlegte Ergebnis betrachten, werden Sie sehen, dass die eigentliche Anweisung MOVEA ist.

0

Als ich lernte, wie man in Assembler (68k) programmiert, gab es einen Unterschied in Bezug auf dieses Beispiel von LEA und MOVE.L, wenn es um den Umgang mit Adressregistern geht. In Bezug auf die Verwendung von Etiketten gibt es definitiv einen großen Unterschied.

Angenommen, Sie haben ein Etikett Foo für einige DC.*.

Die Lektion war, dass unter normalen Bedingungen die oben genannten zwei Anweisungen in der Tat dasselbe erreichen würden. Aufgrund der "Verlagerbarkeit" in realen Systemen kann der untere jedoch Probleme verursachen.

Es ist am sichersten, nur den LEA Ansatz zu verwenden. Ob es ein Problem geben kann oder nicht $1000 - ich bin mir nicht sicher. Um jedoch über den Unterschied zwischen diesen LEA und MOVE.L beim Umgang mit Adressregistern zu sprechen, ist dies definitiv etwas, das berücksichtigt werden muss.

+0

Ich glaube nicht, dass diese Aussage vollständig korrekt ist. Es gibt zwar eine andere "Verlagerbarkeit", aber nur, wenn Sie den pc relativen Modus für lea verwendet haben. LEA Foo (pc), A0 ist zwar positionsunabhängig, aber LEA Foo, A0 wie move.l # Foo, A0 lässt den Assembler eine Verschiebungstabelle für die Labelreferenz erzeugen. Natürlich hat die relative Version von pc einige Nachteile, die angegebene Bezeichnung muss bei +/- 32k Bytes der Anweisung liegen. –