Dados 3 números N1,N2,N3, situados en tres direccións consecutivas de memoria.
PIDESE:
a) Ordinograma, orientado para o 8085, e codificación co ensamblador da mesma, do
algoritmo que conte cantos de eses tres números son iguais. O resultado gardarase
nunha posición de memoria denominada RESTDO. (3 puntos)
b) ¿Cántas instrucións ocupa o programa?. (0,5 puntos)
c) ¿Cántos bytes ocupa o programa?. (0,5 puntos)
d) No caso de que os tres números fosen iguais, que a maquina teña unha fecuencia de
10 MHz, e que inverte na execución do programa 4 microsegundos, ¿Cál e o CPI medio
para este programa?. Márquense, con *, no ordinograma e no programa codificado
as instrucións que se executan. (1 punto)
a)
;Assembler generated listing. Do not hand edit and assemble
;<Compara 3 numeros>
4200 C3 0F 042 jmp carga;data
4203 03 (1 bytes) Tamano: db 3h ;tamaño do array que conten os numeros
4204 00 (1 bytes) PasoTam: db 0h ;valor do tamaño +1
4205 00 (1 bytes) Comparador: db 0h ;posicion do array do numero que se esta comparando
4206 00 (1 bytes) Comparados: db 0h ;posicion do array do numero co que comparamos
4207 00 (1 bytes) RESTDO: db 0h ;contador de numeros iguais
4208 02 (1 bytes) N1: db 2 ;numero 1
4209 02 (1 bytes) N2: db 2 ;numero 2
420A 02 (1 bytes) N3: db 2 ;numero 3
420B 00 (1 bytes) Hcmpdor: db 0h; rexistro h do comparador
420C 00 (1 bytes) Lcmpdor: db 0h; rexistro l do comparador
420D 00 (1 bytes) Hcmpdo: db 0h; rexistro h do comparado
420E 00 (1 bytes) Lcmpdo: db 0h; rexistro l do comparado;code.
420F 3A 03 042 carga: lda Tamano;cargamos a variable tamanho
4212 4F mov c,a ;cargamos a variable tamaño no rexistro C
4213 3C inr a ;incrementamola en 1
4214 32 04 042 sta PasoTam ; gardamos a marca de paso de tamaño
4217 21 08 042 lxi h,N1;cargamos a direccion de N1 en HL
421A 7C mov a,h
421B 32 0B 042 sta Hcmpdor
421E 32 0D 042 sta Hcmpdo
4221 7D mov a,l
4222 32 0C 042 sta Lcmpdor
4225 32 0E 042 sta Lcmpdo
4228 54 mov d,h
4229 5D mov e,l ;copiamos a direccion en HL
422A 3E 01 mvi a, 1h;
422C 32 05 042 sta Comparador
422F 32 06 042 sta Comparados
4232 C3 50 42 jmp AuCmpdos
4235 3A 05 042 AuCmpdor: lda Comparador
4238 3C inr a
4239 32 05 042 sta Comparador
423C 32 06 042 sta Comparados
423F B9 cmp c;Verificamos si Comparador es el ultimo numero
4240 CA B5 42 jz fin ; saltamos si hemos llegado al final
4243 3A 0C 042 lda Lcmpdor
4246 3C inr a
4247 CA 92 42 jz aumentaHdor ; si L se pasa temos que aumentar H
424A 32 0C 042 sta Lcmpdor
424D 32 0E 042 sta Lcmpdo
4250 3A 06 042 AuCmpdos: lda Comparados
4253 3C inr a
4254 32 06 042 sta Comparados
4257 FE 04 cpi PasoTam;Verificamos se pasamos o array para adiante
4259 CA 35 42 jz AuCmpdor
425C 3A 0E 042 lda Lcmpdo;Si non aumentamos a lo do comparador
425F 3C inr a
4260 CA A8 42 jz aumentaHdo
4263 32 0E 042 sta Lcmpdo
4266 3A 0D 042 compara: lda Hcmpdo
4269 67 mov h,a
426A 3A 0E 042 lda Lcmpdo
426D 6F mov l,a
426E E5 push h
426F 46 mov b,M ;cargamos en o numero comparado
4270 3A 0B 042 lda Hcmpdor
4273 67 mov h,a
4274 3A 0C 042 lda Lcmpdor
4277 6F mov l,a
4278 E5 push h
4279 7E mov a,M
427A B8 cmp b
427B CA 84 42 jz aumentaRESTDO
427E C3 50 42 fincomp: jmp AuCmpdos
4281 D2 35 42 jnc AuCmpdor; aumentamos o comparador en caso de que pasaramos o array
4284 00 aumentaRESTDO: nop
4285 3A 07 042 lda RESTDO
4288 3C inr a
4289 32 07 042 sta RESTDO
428C C3 7E 42 jmp fincomp428F C3 B5 42 jmp fin
4292 00 aumentaHdor: nop
4293 3A 0B 042 lda Hcmpdor
4296 3C inr a
4297 32 0B 042 sta Hcmpdor
429A 32 0D 042 sta Hcmpdo
429D 3E 00 mvi a, 0h
429F 32 0C 042 sta Lcmpdor
42A2 32 0E 042 sta Lcmpdo
42A5 C3 66 42 jmp compara
42A8 00 aumentaHdo: nop
42A9 3A 0D 042 lda Hcmpdo
42AC 3C inr a
42AD 32 0D 042 sta Hcmpdo
42B0 3E 00 mvi a, 0h
42B2 32 0E 042 sta Lcmpdo
42B5 76 fin: hlt
En el simulador no me daba ningun problema gnusim8085el dia que tenga paciencia lo acabo de hacer o sino podeis corregirme en los comentarios