Archivo Header Mover Tabla h Inicio Orig Inicio

Archivo Header (Mover. Tabla. h) Inicio. Orig Inicio. Nueva EQU 0 x 23 0 x 25 Largo. Tabla EQU 0 x 20 Contador EQU R 7 Direccion EQU F 0 Cero EQU 0 ; Largo. Tabla <= 255 o 128 ; PSW. 5

Archivo Mover Data Tablas. A 51 $include ( Mover. Tabla. h) DSEG AT Original: Inicio. Orig DS Largo. Tabla DSEG Nueva: Inicio. Nueva DS Largo. Tabla AT CSEG sjmp Inicio

Programa Principal ORG 0 x 30 Inicio: mov clr Loop 0: mov inc djnz lcall nop ; Inicializo la Tabla Original R 0, #Original R 1, #(Largo. Tabla -1) A @R 0, A A R 0 R 1, loop 0 ; Fin de la Inicializacion Mover. Tabla ; Sigue el Prog. Principal

Rutinas ; ****************************************** ; Mover. Tabla : Verifica la posicion relativa de las Tablas y luego copia ; Original en Nueva ; No garantiza la integridad posterior de Original Mover. Tabla: lcall Verificar jz Fin. Mover. Tabla lcall Copiar Fin. Mover. Tabla: ret ; Si estan solapadas Verificar retorna A=0

Rutinas ; ************************************** ; Verificar Segun la posicion relativa de las Tabla, pone el bit ; Nueva < Original A!=0 Direccion = 0 ; Nueva > Original A!=0 Direccion = 1 ; Nueva = Original A =0 Direccion = X ; Recibe ; Retorna: ; Usa: ----A, Direccion A, C Verificar: Desde: mov cjne clr ret mov ret A, #Original A, #Nueva, Desde A ; son iguales Direccion, C ; no son iguales

Rutinas ; *********************************************** ; Copiar Traslada la Tabla Original copiandola en Nueva ; El orden de copia depende del bit Direccion ; Recibe Direccion ; Retorna: -----; Usa: A, Banco 0(R 0, R 1, R 7) ; *********************************************** Copiar: jb mov sjmp Abajo: mov Traslado: mov Loop. Tabla: mov jb inc sjmp Arriba dec Ver: ret END Direccion, Abajo R 0, #Original R 1, #Nueva Traslado R 0, #(Original + Largo. Tabla - 1) R 1, #(Nueva + Largo. Tabla - 1) Contador, #Largo. Tabla mov A, @R 0 @R 1, A Direccion, Arriba R 0 R 1 Ver R 0 R 1 djnz Contador, Loop. Tabla ; apunto al principio de la Tabla ; apunto al final de la Tabla ; barro hacia direcciones altas ; barro hacia direcciones bajas

Mover una Tabla en Memoria Externa Archivo Header (Mover. XTabla. h) ; Se suponen Tablas no solapadas (Hay mucho lugar) ; Organización de memoria Finiano Chico Inicio. Orig EQU 0 x 1 E 50 Inicio. Nueva EQU 0 x 1 FE 0 Largo. Tabla EQU 300 ; Largo. Tabla puede ser > 255 Archivo Mover. XTabla. A 51 $include (Mover. XTabla. h) Dseg at 0 x 30 Save. Org: ds Save. New: ds Low. Contador: ds High. Contador EQU Xseg at Original: Xseg at Nueva: 2 2 2 Low. Contador + 1 Inicio. Orig ds Largo. Tabla Inicio. Nueva ds Largo. Tabla

Programa Principal Cseg sjmp Inicio ORG 0 x 30 Inicio: ; ……………… lcall Init lcall Mueva. XTabla ; ……………………………………… ; Init ; No recibe nada, Retorna R 1 = Low. Contador ; Usa: A, DPTR, Banco 0( R 1) Init: mov DPTR, #Nueva lcall Save. Dptr. New mov DPTR, #Original lcall Save. Dptr. Old mov R 1, #High. Contador mov @R 1, #HIGH (Largo. Tabla – 1) dec R 1 mov @R 1, #LOW (Largo. Tabla – 1) ret

Rutinas ; Mueva. XTabla ; Recibe: Save. Org y Save. New cargados con la Dirección inicial de las tablas ; Low. Contador y High. Contador con el largo de la Tabla ; Usa: A, DPTR, Banco 0(R 0) Mueva. XTabla: lcall movx lcall Load. Dptr. Old A, @DPTR Actualice. Dptr. Old ; cargue dato de tabla vieja lcall movx lcall Load. Dptr. New @DPTR, A Actualice. Dptr. New ; guarde dato en tabla nueva lcall jnz ret Dec. Contador Mueva. XTabla ; veo si termine

Rutinas Auxiliares (posiblemente reusables) ; Usan R 0 y DPTR Load. Dptr. Old: mov sjmp Load. Dptr. New: mov Cargar: mov inc mov ret Acualice. Dptr. Old: inc lcall ret Acualice. Dptr. New: inc lcall ret R 0, #Save. Org Cargar R 0, #Save. New DPL, @R 0 DPH, @R 0 DPTR Save. Dptr. Old DPTR Save. Dptr. New Save. Dptr. Org: mov sjmp Load. Dptr. New: mov Salvar: mov inc mov ret R 0, #Save. Org Salvar R 0, #Save. New @R 0, DPL R 0 @R 0, DPH

Rutinas Auxiliares (reusables) ; Dec. Contador ; Decrementa un contador en doble presición en Finiano Chico ; Recibe en R 1 dirección de Low del Contador, Usa: A, Banco 0(R 1 ) ; Retorna A==0 si el contador queda en 0, R 1 como estaba Cuanto EQU Dec. Contador: clr mov subb mov inc mov subb mov dec orl ret 1 C A, @R 1 A, #Cuanto @R 1, A R 1 A, @R 1 A, # Cero @R 1, A R 1 A, @R 1 Dec. Contador: clr mov subb mov jnc dec salga: orl ret C A, Low. Contador A, #Cuanto Low. Contador, A salga High. Contador A, High. Contador
- Slides: 11