Como mencionado, a instruções MOVE é utilizada para empilhar e desempilhar dados da pilha via SP/A7.
Operação
origem -> (SP|A7)
Endereçamento Origem
(Ax), (Ax)+, n(Ax), n(Ax,Dx[.W|.L]|Ax[.W|.L]), absoluto.W, absoluto.L, n(PC), n(PC,Dx[.W|.L]|Ax[.W|.L]) e #imediato
Endereçamento Destino
(SP)+, -(SP)
Tamanho do dado
Byte, Word e Longword
CCR
X: -
N: -
Z: -
V: -
C: -
Sintaxe
MOVE.B Dx,-(SP) ; empilhar
MOVE.B Dx,(SP)+ ; desempilhar
MOVE.L #$imediato,-(SP)
Exemplo:
; D0 = 123456FF SP= FFFFFFFF
MOVE.L D0, -(SP);
; D0 = 123456FF SP = FFFFFFFB
De forma semelhante a MOVE, podemos utilizar a instrução MOVEM para armazenar múltiplos regitradores na pilha.
Operação
Di-Df -> (SP|A7)
Ai-Af -> (SP|A7)
Di-Df/Ai-Af -> (SP|A7)
Dx/Dy/Ax/Ay -> (SP|A7)
Endereçamento Origem
Dx, Ax, (Ax), n(Ax), n(Ax,Dx[.W|.L]|Ax[.W|.L]), absoluto.W, absoluto.L, n(PC), n(PC,Dx[.W|.L]|Ax[.W|.L])
Endereçamento Destino
(SP|A7)+, -(SP|A7)
Tamanho do dado
Byte, Word e Longword
CCR
X: -
N: -
Z: -
V: -
C: -
Sintaxe
MOVEM.L Di-Df,-(SP)
MOVEM.L (SP)+,Di-Df;
Exemplo:
MOVEM.L D0-D1,-(SP)
MOVE (SP)+,D0-D1