Está en la página 1de 23

ETN 801-MICROPROCESADORES semestre 1/2021

PREINFORME
DOCENTE: Ing. Marcelo Ramírez M.
ESTUDIANTES:
Caballero Calle Carlos Benjamin
Flores Macuchapi Jimmy Tomas
Lab N° 11 – Aritmética computacional III
Objetivos
• Realizar la matriz inversa en forma de columna para apuntar a direcciones de
memoria mediante punteros
• Resultados con una precisión de 2−8 usando tres bytes fraccionarios para la
división entre el determinante
• Considerar los signos de los resultados
• Hallar la determinate de una matriz 3x3
• Hallar la inversa de una matriz 3x3
• Usar subrutinas para obtener un codigo de microsex simplificado
Determinante
Hallando el determinante de la matriz

EN EL CODIGO TENEMOS LAS SIGUIENTES EQUIVALENCIAS:

matra1 matra2 matra3 matra4 matra5


matra1+1 matra2+1 matra3+1 matra4+1 matra5+1
matra1+2 matra2+2 matra3+2 matra4+2 matra5+2
matra1+3 matra2+3 matra3+3 matra4+3 matra5+3
matra1+4 matra2+4 matra3+4 matra4+4 matra5+4

mult1 = matra2+1 * matra3+2


mult2 = matra2+2 * matra3+3
mult3 = matra2+3 * matra3+4
mult4 = matra2+2 * matra3+1
mult5 = matra2+3 * matra3+2
mult6 = matra2+4 * matra3+3

prod1 = mult1 - mult4


prod2 = mult2 - mult5
prod3 = mult3 - mult6
prodf1 = matra1 * prod1
prodf2 = matra1+1 * prod2
prodf3 = matra1+2 * prod3

det(A) =prodf1 + prodf2 + prodf3


Adjunta de A
A partir de la matriz de trabajo

Se obtiene el vector de trabajo


Apuntar 𝒂𝟏𝟏 0
P 𝒂𝟏𝟐 1
𝒂𝟏𝟑 2
𝑎11 3
𝑎12 4
𝒂𝟐𝟏 5
𝒂𝟐𝟐 6
𝒂𝟐𝟑 7
𝑎21 8
𝑎22 9
𝒂𝟑𝟏 10
𝒂𝟑𝟐 11
𝒂𝟑𝟑 12
𝑎31 13
𝑎32 14
𝑎11 15
𝑎12 16
𝑎13 17
𝑎11 18
𝑎12 19
𝑎21 20
𝑎22 21
𝑎23 22
𝑎21 23
𝑎22 24
FLUJOGRAMA DETERMINANTE
FLUJOGRAMA MATRIZ ADJUNTA
CODIGO MATRIZ INVERSA
.dseg
.org 0
itermat .equ 9 ;numero de lementos de la matriz
coma .equ 10 ;completar matriz de trabajo
const_mul .equ 8 ;desplazamiento multiplicacion
conta .equ 3 ;iteraciones del programa principal
colum1 .rb 3
.org 0x0010
colum2 .rb 3
.org 0x0020
colum3 .rb 3
.org 0x0030
matra1 .rb 5 ;columna 1 de la matriz de trabajo
.org 0x0040
matra2 .rb 5 ;columna 2 de la matriz de trabajo
.org 0x0050
matra3 .rb 5 ;columna 3 de la matriz de trabajo
.org 0x0060
matra4 .rb 5 ;columna 4 de la matriz de trabajo
.org 0x0070
matra5 .rb 5 ;columna 5 de la matriz de trabajo
.org 0x0080
mult1 .rb 2
mult4 .rb 2
prod1 .rb 2
pivote1 .rb 2
prodf1 .rb 4
det .rb 4
.org 0x0090
mult2 .rb 2
mult5 .rb 2
prod2 .rb 2
pivote2 .rb 2
prodf2 .rb 4
respuesta .rb 4
.org 0x00A0
mult3 .rb 2
mult6 .rb 2
prod3 .rb 2
pivote3 .rb 2
prodf3 .rb 4
contar .equ 8 ;contadores
contar1 .equ 16 ;contadores
.org 0x0600
determ .rb 3
sig_deter .rb 1
;***MATRIZ DE TRABAJO****
.org 0x0100
inver1 .rb 5
inver2 .rb 5
inver3 .rb 5
;**ESPACIOS TRABAJO DIVISION**
.org 0x1000
precision .equ 56
tamano .equ 4
dino .rb tamano
divsor .rb tamano
coci .rb 7
resi .rb tamano
aux .rb tamano
;**ESPACIOS DE TRABAJO****
.org 0x2000
mulando .rb 1
mulador .rb 1
prod .rb 2
dat1 .rb 2 ;guardar multiplicacion
dat2 .rb 2
;variables de la resta signada
orden .equ 2
num1 .rb orden
num2 .rb orden
sig .rb 1
resul .rb orden
;**********************
var6 .equ 6
var12 .equ 12
var7 .equ 7
var11 .equ 11
;************************
.org 0x3000
puntero .rb 14
puntero_inicio .rb 1
.org 0x4000
adja .rb 18 ;matriz adjunta
mat_sign .equ 19 ;matriz de signos
.org 0x5000
cont1 .rb 1
cont2 .rb 1
;***MATRIZ INVERSA***
.org 0x6000
matin .rb 48
sigma .rb 1
.cseg
.org 0x7000
;***************************
;matriz trabajo
;elaboracion matriz de trabajo
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
;determinante
;matriz
lda x,#matra1
lda y,#matra2
;*******************
;armamos la matriz de trabajo
;*******************
;cargamos la primera culumna
lda a,colum2
sta a,ix+4
lda a,colum1
sta a,ix+3
lda a,colum3
sta a,ix+2
lda a,colum2
sta a,ix+1
lda a,colum1
sta a,ix
;cargamos la segunda culumna
lda a,colum2+1
sta a,iy+4
lda a,colum1+1
sta a,iy+3
lda a,colum3+1
sta a,iy+2
lda a,colum2+1
sta a,iy+1
lda a,colum1+1
sta a,iy
;cargamos la tercera culumna
lda x,#matra3
lda y,#matra4
lda a,colum2+2
sta a,ix+4
lda a,colum1+2
sta a,ix+3
lda a,colum3+2
sta a,ix+2
lda a,colum2+2
sta a,ix+1
lda a,colum1+2
sta a,ix
;cargamos la cuarta culumna
lda a,colum2
sta a,iy+4
lda a,colum1
sta a,iy+3
lda a,colum3
sta a,iy+2
lda a,colum2
sta a,iy+1
lda a,colum1
sta a,iy
;cargamos la quinta culumna
lda x,#matra5
lda a,colum2+1
sta a,ix+4
lda a,colum1+1
sta a,ix+3
lda a,colum3+1
sta a,ix+2
lda a,colum2+1
sta a,ix+1
lda a,colum1+1
sta a,ix
;************************************************************
;realizamos la multiplicacion de cofactores
;************************************************************
lda x,#matra2+1 ;multiplicando
lda y,#matra3+2 ;multiplicador
;mult1
clc
lda c,#contar ;contador
clr mult1 ;limpiar producto alto
clr mult1+1 ;limpiar producto bajo
sgte:
rcd iy ;rotacion del multiplicador
bnc operacion ;si c=0 se omite la suma
lda a,mult1
add a,ix
sta a,mult1
operacion:
rcd mult1
rcd mult1+1
;ultimo
dec c
bnz sgte ;saltar a sgte si el contador no es cero
inc x
inc y
;mult2
clc
lda c,#contar ;contador
clr mult2 ;limpiar producto alto
clr mult2+1 ;limpiar producto bajo
sgte1:
rcd iy ;rotacion del multiplicador
bnc operacion1 ;si c=0 se omite la suma
lda a,mult2
add a,ix
sta a,mult2
operacion1:
rcd mult2
rcd mult2+1
;ultimo
dec c
bnz sgte1 ;saltar a sgte si el contador no es cero
inc x
inc y
;mult3
clc
lda c,#contar ;contador
clr mult3 ;limpiar producto alto
clr mult3+1 ;limpiar producto bajo
sgte2:
rcd iy ;rotacion del multiplicador
bnc operacion2 ;si c=0 se omite la suma
lda a,mult3
add a,ix
sta a,mult3
operacion2:
rcd mult3
rcd mult3+1
;ultimo
dec c
bnz sgte2 ;saltar a sgte si el contador no es cero
;************************************************************
;reasignamos valores borrados
;************************************************************
lda a,colum2+2
sta a,matra3+4
lda a,colum1+2
sta a,matra3+3
lda a,colum3+2
sta a,matra3+2
;************************************************************
;continuamos con hallando los cofactores
;************************************************************
lda x,#matra2+2 ;multiplicando
lda y,#matra3+1 ;multiplicador
;mult4
clc
lda c,#contar ;contador
clr mult4 ;limpiar producto alto
clr mult4+1 ;limpiar producto bajo
sgte4:
rcd iy ;rotacion del multiplicador
bnc operacion4 ;si c=0 se omite la suma
lda a,mult4
add a,ix
sta a,mult4
operacion4:
rcd mult4
rcd mult4+1
;ultimo
dec c
bnz sgte4 ;saltar a sgte si el contador no es cero
inc x
inc y
;mult5
clc
lda c,#contar ;contador
clr mult5 ;limpiar producto alto
clr mult5+1 ;limpiar producto bajo
sgte5:
rcd iy ;rotacion del multiplicador
bnc operacion5 ;si c=0 se omite la suma
lda a,mult5
add a,ix
sta a,mult5
operacion5:
rcd mult5
rcd mult5+1
;ultimo
dec c
bnz sgte5 ;saltar a sgte si el contador no es cero
inc x
inc y
;mult6
clc
lda c,#contar ;contador
clr mult6 ;limpiar producto alto
clr mult6+1 ;limpiar producto bajo
sgte6:
rcd iy ;rotacion del multiplicador
bnc operacion6 ;si c=0 se omite la suma
lda a,mult6
add a,ix
sta a,mult6
operacion6:
rcd mult6
rcd mult6+1
;ultimo
dec c
bnz sgte6 ;saltar a sgte si el contador no es cero
;************************************************************
;reasignamos valores borrados
;************************************************************
lda a,colum2+2
sta a,matra3+1
lda a,colum3+2
sta a,matra3+2
lda a,colum1+2
sta a,matra3+3
;************************************************************
;operacion de resta
;************************************************************
;res1
lda a,mult1+1
sec
sub a,mult4+1
sta a,prod1+1
lda a,mult1
sbc a,mult4
sta a,prod1
;res 2
lda a,mult2+1
sec
sub a,mult5+1
sta a,prod2+1
lda a,mult2
sbc a,mult5
sta a,prod2
;res 3
lda a,mult3+1
sec
sub a,mult6+1
sta a,prod3+1
lda a,mult3
sbc a,mult6
sta a,prod3
;************************************************************
;producto final
;************************************************************
clr pivote1
lda a,matra1
sta a,pivote1+1
lda x,#pivote1 ;multiplicando
lda y,#prod1 ;multiplicador
;prodf1
clc
lda c,#contar1 ;contador
clr prodf1 ;limpiar producto alto
clr prodf1+1 ;limpiar producto alto
clr prodf1+2 ;limpiar producto bajo
clr prodf1+3 ;limpiar producto bajo
sgtee:
rcd iy ;rotacion del multiplicador
rcd iy+1 ;rotacion del multiplicador
bnc operacionn ;si c=0 se omite la suma
lda a,prodf1+1
add a,ix+1
sta a,prodf1+1
lda a,prodf1
adc a,ix
sta a,prodf1
operacionn:
rcd prodf1
rcd prodf1+1
rcd prodf1+2
rcd prodf1+3
;ultimo
dec c
bnz sgtee ;saltar a sgte si el contador no es cero
;*******************
clr pivote2
lda a,matra1+1
sta a,pivote2+1
lda x,#pivote2 ;multiplicando
lda y,#prod2 ;multiplicador
;prodf2
clc
lda c,#contar1 ;contador
clr prodf2 ;limpiar producto alto
clr prodf2+1 ;limpiar producto alto
clr prodf2+2 ;limpiar producto bajo
clr prodf2+3 ;limpiar producto bajo
sgtem:
rcd iy ;rotacion del multiplicador
rcd iy+1 ;rotacion del multiplicador
bnc operacionm ;si c=0 se omite la suma
lda a,prodf2+1
add a,ix+1
sta a,prodf2+1
lda a,prodf2
adc a,ix
sta a,prodf2
operacionm:
rcd prodf2
rcd prodf2+1
rcd prodf2+2
rcd prodf2+3
;ultimo
dec c
bnz sgtem ;saltar a sgte si el contador no es cero
;*******************
clr pivote3
lda a,matra1+2
sta a,pivote3+1
lda x,#pivote3 ;multiplicando
lda y,#prod3 ;multiplicador
;prodf2
clc
lda c,#contar1 ;contador
clr prodf3 ;limpiar producto alto
clr prodf3+1 ;limpiar producto alto
clr prodf3+2 ;limpiar producto bajo
clr prodf3+3 ;limpiar producto bajo
sgtep:
rcd iy ;rotacion del multiplicador
rcd iy+1 ;rotacion del multiplicador
bnc operacionp ;si c=0 se omite la suma
lda a,prodf3+1
add a,ix+1
sta a,prodf3+1
lda a,prodf3
adc a,ix
sta a,prodf3
operacionp:
rcd prodf3
rcd prodf3+1
rcd prodf3+2
rcd prodf3+3
;ultimo
dec c
bnz sgtep ;saltar a sgte si el contador no es cero
;************************************************************
;proceso de suma final
;************************************************************
;suma_final
suma_final:
lda a,prodf1+3
add a,prodf2+3
sta a,det+3
lda a,prodf1+2
adc a,prodf2+2
sta a,det+2
lda a,prodf1+1
adc a,prodf2+1
sta a,det+1
lda a,prodf1
adc a,prodf2
sta a,det
;************************************************************
;respuesta de la deteminante en 2 bytes
;************************************************************
lda a,prodf3+3
add a,det+3
sta a,respuesta+3
lda a,prodf3+2
adc a,det+2
sta a,respuesta+2
;*********************
;**detectar signo**
clr sig_deter
lda a,respuesta+2
rci a
bnc escape
not sig_deter
not respuesta+2
not respuesta+3
clr a
inc a
add a,respuesta+3
sta a,determ+2 ;det1
clr a
adc a,respuesta+2
sta a,determ+1 ;det2
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
;matriz inversa
;iniciar variables
escape:
lda x,#inver1 ;apuntar a la matriz de trabajo
lda b,#coma
lda a,#conta
sta a,cont1
sta a,cont2
;************
lda a,colum1
sta a,inver1
sta a,inver1+3
lda a,colum1+1
sta a,inver2
sta a,inver2+3
lda a,colum1+2
sta a,inver3
sta a,inver3+3
;*******************
lda a,colum2
sta a,inver1+1
sta a,inver1+4
lda a,colum2+1
sta a,inver2+1
sta a,inver2+4
lda a,colum2+2
sta a,inver3+1
sta a,inver3+4
;*****************
lda a,colum3
sta a,inver1+2
lda a,colum3+1
sta a,inver2+2
lda a,colum3+2
sta a,inver3+2
;**************
mat_5:
lda a,ix
sta a,ix+15
inc x
dec b
bnz mat_5
;***codigo principal**************
;**MATRIZ ADJUNTA*******
;*******************************
lda p,#puntero_inicio
lda x,#inver1
lda y,#adja
matriz_adj:
;cargar valores para multiplicar
lda a,ix+var6
sta a,mulando
lda a,ix+var12
sta a,mulador
bsr multiplicacion
;guardar valores de la multiplicacion
lda a,prod
sta a,dat1
lda a,prod+1
sta a,dat1+1
;cargar valores para segunda multiplicacion
lda a,ix+var7
sta a,mulando
lda a,ix+var11
sta a,mulador
lda p,#puntero_inicio
bsr multiplicacion
;guardar valores de la multiplicacion
lda a,prod
sta a,dat2
lda a,prod+1
sta a,dat2+1
;******************************
;restar dat1 menos dat2
;*****************************
;cargar valores para la resta
lda a,dat1
sta a,num1
lda a,dat1+1
sta a,num1+1
lda a,dat2
sta a,num2
lda a,dat2+1
sta a,num2+1
lda p,#puntero_inicio
bsr funcion_resta
;guardar los resultados de la resta
lda a,resul
sta a,iy
lda a,resul+1
sta a,iy+1
lda a,sig
sta a,iy+mat_sign
inc y
inc y
inc x
dec cont1
bnz matriz_adj
inc x
inc x
lda a,#conta
sta a,cont1
dec cont2
bnz matriz_adj
;****************************
;dividir entre el determinante
;************************
lda x,#matin
lda y,#adja
lda c,#itermat
;************
sigue:
lda a,iy
sta a,dino+2
lda a,iy+1
sta a,dino+3
lda a,determ
sta a,divsor+1
lda a,determ+1
sta a,divsor+2
lda a,determ+2
sta a,divsor+3
bsr division
;guardar el cociente
lda a,coci+2
sta a,ix
lda a,coci+3
sta a,ix+1
lda a,coci+4
sta a,ix+2
lda a,coci+5
sta a,ix+3
lda a,coci+6
sta a,ix+4
inc y
inc y
inc x
inc x
inc x
inc x
inc x
dec c
bnz sigue
;**actualizar signo
lda x,#adja+mat_sign
lda y,#sigma
lda c,#itermat
lda a,sig_deter
brz gene
parabo:
inc ix
lda a,ix
sta a,iy
inc x
inc x
inc y
dec c
bnz parabo
bri acabar
gene:
lda a,ix
sta a,iy
inc x
inc x
inc y
dec c
bnz gene
acabar:
;*****************************
hlt
;**********************************
;**********************************
;***SUBRUTINAS*******
;iniciar variables
multiplicacion:
clr prod
clr prod+1
lda c,#const_mul
;aislar bit
sgte_car:
rcd mulador
bnc desp_der
lda a,mulando
add a,prod
sta a,prod
desp_der:
rcd prod
rcd prod+1
dec c
bnz sgte_car
ret
;**************************
funcion_resta:
;inciar variables
sec
clr sig
dec sig
;*************
lda a,num1+1
sbc a,num2+1
sta a,resul+1
lda a,num1
sbc a,num2
sta a,resul
clr a
adc a,sig
sta a,sig
;detectar signo
;realizar complemento a 2
brz repri
not resul
not resul+1
clr a
inc a
add a,resul+1
sta a,resul+1
clr a
adc a,resul
sta a,resul
repri:
ret
;***************************
;funcion de division
division:
clr coci
clr coci+1
clr coci+2
clr coci+3
clr coci+4
clr coci+5
clr coci+6
clr resi
clr resi+1
clr resi+2
clr resi+3
;establecer el tamano
clr dino
clr dino+1
clr divsor
lda b,#precision
divi_repi:
clc
;desplazar cociente
dai coci+6
rci coci+5
rci coci+4
rci coci+3
rci coci+2
rci coci+1
rci coci
;aislar el bit
dai dino+3 ;desplazar el dividendo
rci dino+2
rci dino+1
rci dino
rci resi+3 ;desplazar el residuo
rci resi+2
rci resi+1
rci resi
;restamos residuo menos dividendo
sec
lda a,resi+3
sbc a,divsor+3
sta a,aux+3
lda a,resi+2
sbc a,divsor+2
sta a,aux+2
lda a,resi+1
sbc a,divsor+1
sta a,aux+1
lda a,resi
sbc a,divsor
sta a,aux
bnc cuenta ;brinco si residuo menor al divisor
;******************************************
;actualizar residuo
clc
lda a,aux
sta a,resi
lda a,aux+1
sta a,resi+1
lda a,aux+2
sta a,resi+2
lda a,aux+3
sta a,resi+3
;actualizar cociente
clr a
inc a
add a,coci+6
sta a,coci+6
clr a
adc a,coci+5
sta a,coci+5
clr a
adc a,coci+4
sta a,coci+4
clr a
adc a,coci+3
sta a,coci+3
clr a
adc a,coci+2
sta a,coci+2
clr a
adc a,coci+1
sta a,coci+1
clr a
adc a,coci
sta a,coci
;*********************************************************
cuenta:
dec b
bnz divi_repi
ret
;*************************

.fin
CUADDERNO JIMMY FLORES
CUADERNO CARLOS CABALLERO

También podría gustarte