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