Traducción PSEUDOCÓDIGO a MC68000

Anuncio
Pseudocódigo
Inicialización de variables
A ← cte
Operandos
Ensamblador
A es un registro de datos
A ≡ Dn
MOVE.BWL #cte,Dn
o MOVEQ.BWL #cte,Dn si cte <256
A es una variable de memoria
Opción 1
A: DC.BWL
cte
Opción 2
A: DS.BWL
1
......
MOVE.BWL #cte, A
A es un registro de direcciones
Inicialización
A ≡ An
MOVEA.WL #cte,An
Inicialización del puntero An
tabla: DC.BWL valor1,valor2,...valorN
....
MOVEA.WL #tabla, An
Asignación
A y B son registros de datos
MOVE.BWL Dm,Dn
A ≡ Dn
A ←B
B ≡ Dm
A y B son variables de memoria A: DC.BWL valorA
del mismo tamaño
B: DC.BWL valorB
....
MOVE.BWL B,A
A es un registro de direcciones y B: DC.BWL valorB
B una variable de memoria
....
A ≡ An
MOVEA.WL B,An
Asignación con puntero
A ←(*B)
A ←(*B)+
A ← -(*B)
A es un registro de datos y B un
registro de direcciones
A ≡ Dn
B ≡ Am
MOVE.BWL (Am),Dn
MOVE.BWL (Am)+,Dn
MOVE.BWL -(Am),Dn
A es una variable de memoria y A: DC.BWL valor1
B un registro de direcciones
......
MOVE.BWL (Am),A
MOVE.BWL (Am)+,A
MOVE.BWL -(Am),A
1
Pseudocódigo
Asignación a un elemento de una
tabla
tabla[i] ← cte
tabla[i] ← Dn
tabla[i] ← B
Operandos
Ensamblador
El destino es un elemento de la
memoria y el fuente una
constante, un registro de datos
o una variable de memoria. La
variable i es un índice que
generalmente será un registro
de datos. Sea el índice i el
registro Di. Si i< 64k se usará
Di.W si i>64K se usará Di.L
Tabla: DC.BWL valor1,valor2,.....
B:
DC.BWL valorB
....
MOVE.L #tabla, An ;Establece
;puntero a tabla
.....
MOVE.WL Di,Dc ;copia índice en Dc
Posición de memoria del MULU #K,Dc ; Dc=Dc*K donde
elemento tabla[i] = tabla +
;K=1 para B, 2 para W y 4 para L
i*tam_elem donde tam_elem es
1 para B, 2 para W, y 4 para L. MOVE.BWL #cte, 0(An,Dc.WL)
MOVE.BWL Dn, 0(An,Dc.WL)
i varía entre 0 hasta TAM-1. MOVE.BWL B, 0(An,Dc.WL)
Donde TAM es el número de
elementos de la tabla.
Asignación a un elemento de una
tabla de dimensión NxM
tabla[i][j] ← cte
tabla[i][j] ← Dn
tabla[i][j] ← B
Las variables i,j son índices Tabla: DC.BWL a00,a01,a10,a11,
para los que usamos registros a20,. ....
de datos. Sean Di, Dj dichos
B:
DC.BWL valorB
registros.
....
MOVE.L #tabla, An ;Establece
Posición de memoria del
elemento tabla[i][j] = tabla +
;puntero a tabla
i*tam_elem*M + j*tam_elem;
donde tam_elem es 1 para B, 2 .....
para W, y 4 para L.
MOVE.WL Di,Dc ;copia índice en Dc
MULU #K,Dc ; Dc=Di*K donde
i varía desde 0 hasta N-1
j varía desde 0 hasta M-1
;K=1 para B, 2 para W y 4 para L
MULU #M,Dc ;Dc=Di*K*M
MOVE.WL Dj,Dd; copia índice en Dd
MULU #K,Dd ; Dd=Dj*K donde
ADD.L Dd,Dc
MOVE.BWL #cte, 0(An,Dc.WL)
MOVE.BWL Dn, 0(An,Dc.WL)
MOVE.BWL B, 0(An,Dc.WL)
2
Pseudocódigo
Operaciones aritméticas
A ← A ± cte
Operandos
Ensamblador
A es un registro de datos
A ≡ Dn
Opción 1
ADD.BWL #cte,Dn
SUB.BWL #cte,Dn
Opción 2
ADDI.BWL #cte,Dn
SUBI.BWL #cte,Dn
Opción 3
ADDQ.BWL #cte,Dn
SUBQ.BWL #cte,Dn
Si cte =1..8
A es una variable de memoria
A:
DC.BWL valorA
.....
ADDI.BWL #cte,A
SUBI.BWL #cte,A
Operaciones aritméticas
A←A±B
A y B son variables de memoria A: DC.BWL valorA
y del mismo tamaño
B: DC.BWL valorB
....
MOVE.BWL B,Dn
ADD.BWL
Dn,A
(SUB.BWL Dn,A)
Operaciones aritméticas (MUL)
A y B son variables de memoria A: DC.W valorA
C←A* B
B: DC.W valorB
C: DS.L 1
....
MOVE.W A,Dn
MOVE.W B,Dm
MULU Dm,Dn
(MULS Dm,Dn)
MOVE.L Dn,C
3
Pseudocódigo
Operaciones aritméticas (DIV)
Operandos
Ensamblador
A y B son variables de memoria A: DC.L valorA
Coc ← A / B
B: DC.W valorB
Res ← A % B
Coc: DS.W 1
Res: DS.W 1
....
MOVE.L A,Dn
MOVE.W B,Dm
DIVU Dm,Dn
(DIVUS Dm,Dn)
MOVE.W Dn,Coc
SWAP Dn
MOVE.W Dn,Res
De empaquetamiento
1)
B[15:0] ← A[7:0]
A y B son variables de memoria 1)
sin signo
A: DC.B valorA
2) B[31:0] ← A[15:0]
B: DS.W 1
...
CLR.W Dn
MOVE.B A,Dn
MOVE.W Dn,B
2)
A: DC.W valorA
B: DS.L 1
...
CLR.L Dn
MOVE.W A,Dn
MOVE.L Dn,B
A y B son variables de memoria 1)
con signo
A: DC.B valorA
B: DS.W 1
...
MOVE.B A,Dn
EXT.W Dn,B
2)
A: DC.W valorA
B: DS.L 1
...
MOVE.W A,Dn
EXT.L Dn,B
4
Pseudocódigo
Sentencias de control: Bucle FOR
For i=valor1 to valor2 step inc
Cuerpo del bucle
end for
Operandos
Ensamblador
La variable i está en memoria y i: DC.BWL valor1
su tamaño y consideración (con
...
signo o sin signo) depende de
valor1 y valor2. Tanto valor1 buclefor: CMPI.BWL #valor2,i
como valor2 e inc son
BHI finbuclefor
constantes.
ADDI.BWL #inc,i
cuerpo del bucle
BRA buclefor
finbuclefor:
........
Condiciones
A>B
A >= B
A y B son variables de memoria A: DC.BWL valorA
con o sin signo y del mismo
B: DC.BWL valorB
tamaño.
....
A<B
(para todas)
A <= B
MOVE.BWL A,Dn
A==B
CMP.BWL
A<>B
B,Dn
(para A>B)
BHI
;sin signo
( BGT) ;con signo
(para A>=B)
BCC
;sin signo
( BGE) ;con signo
...(ver tabla en documentación)
A es una variable de memoria y A: DC.BWL valorA
B una constante del mismo
....
tamaño.
(para todas)
CMPI.BWL
#B,A
(para A>B)
BHI
;sin signo
( BGT) ;con signo
...(ver tabla en documentación)
5
Pseudocódigo
Sentencias de control: Bucle
WHILE
Operandos
Ejemplos:
A: DC.BWL valorA
While(A ==B)
B: DC.BWL valorB
While(condicion)
cuerpo de while
Ensamblador
cuerpo
....
end while
while1:
end while
MOVE.BWL A,Dn
While(A >=B)
CMP.BWL
cuerpo
B,Dn
BNE finwhile1
end while
cuerpo
BRA while1
finwhile1 ...
donde A y B son variables de while2:
memoria con signo.
MOVE.BWL A,Dn
CMP.BWL
B,Dn
BLT finwhile2
cuerpo
BRA while2
finwhile2: ...
Sentencias de control: DO ...
WHILE
Ejemplos:
A: DC.BWL valorA
do
B: DC.BWL valorB
do
cuerpo
cuerpo
....
While(A <B)
dowhile1:
while(condicion)
cuerpo
do
MOVE.BWL A,Dn
cuerpo
CMP.BWL
While(A == B)
B,Dn
BCS dowhile1
dowhile2:
donde A y B son variables de
memoria del mismo tamaño y
sin signo
cuerpo
MOVE.BWL A,Dn
CMP.BWL
B,Dn
BEQ dowhile2
6
Pseudocódigo
Operandos
Ensamblador
Sentencias de control: IF..ELSE
Ejemplos
A: DC.BWL valorA
If (condicion)
if (A <=B)
B: DC.BWL valorB
cuerpo1
else
cuerpo2
endif
cuerpo1
....
else
if1:
MOVE.BWL A,Dn
CMP.BWL B,Dn
BHI else1
cuerpo1
BRA finif1
else1:
cuerpo2
finif1: .....
cuerpo2
end if
if (A <>B)
cuerpo1
if2:
MOVE.BWL A,Dn
CMP.BWL B,Dn
cuerpo2
BEQ else2
end if
cuerpo2
BRA finif2
else2:
donde A y B son variables de
cuerpo2
memoria del mismo tamaño y finif2: .....
sin signo
else
Llamada a subrutinas
C← funcion ( A,B)
A,B y C son variables de A: DC.WL valorA
memoria. Los argumentos se
B: DC.WL valorB
pasan por PILA.
C: DS.WL 1
...
Sea tamA = 2 o 4 según A sea W
o L Igualmente se definen tamB MOVE.WL A,-(A7)
y tamC.
MOVE.WL B,-(A7)
MOVE.WL C,-(A7)
BSR funcion
MOVE.WL -(A7),C
ADDA.WL
#K,A7
;donde K= tamA + tamB
Construcción de subrutinas
Codificación
Funcion:
subr funcion ( A,B) dev C
Cuerpo
cuerpo funcion
endfuncion: RTS
end subr funcion
Acceso a variables
La variable C se encuentra en la
dirección 4(A7)
Sea tamA = 2 o 4 según A sea W
o L Igualmente se definen tamB La variable B en la dirección dirB(A7)
y tamC.
donde dirB=tamC+4
La variable A en la dirección dirA(A7)
donde dirA= tamC+tamB+4
....
7
Descargar