parte 8085 examen Xuño 2009 ETC

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)

Organigrama
Organigrama

;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 fincomp

428F 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