LEA: MACRO (ra, eti) ;Carga el registro ra con el or ra, r0, low(eti) ;valor de la etiqueta eti. or.u ra,ra,high(eti) ENDMACRO LOAD: MACRO (ra, eti) ;Carga en el registro ra el contenido LEA (ra, eti) ;de la dirección de memoria que indica ld ra, ra, 0 ;la etiqueta eti. ENDMACRO DBNZ: MACRO (ra, eti) ;Decrementa el registro ra sub ra, ra, 1 ;y salta a la etiqueta eti cmp r13, ra, 0 ;si no es cero ra. bb0 2, r13, eti ENDMACRO DISTRIB: LOAD (r2,MEDIDA) ;r2 contador con el número de datos. LEA (r10,MEDIDA) ;r10 es el puntero a los datos. add r10,r10,4 ld r5, r10, 0 ;Se inicia r5 con extremo inferior. ld r6,r10,0 ;Se inicia r6 con extremo superior. OTRO: ld r7,r10,0 ;r7 se carga con el dato ai. cmp r13,r5,r7 ;Si ai es menor que el extremo bb1 9,r13,VER_SUP;inferior, Inf=ai y r5 se carga or r5,r7,r0 ;con ai. VER_SUP: cmp r13,r6,r7 ;Si ai es mayor que el extremo bb1 11,r13,SIGUE ;superior, Inf=ai y r6 se carga or r6,r7,r0 ;con ai. SIGUE: add r10,r10,4 ;Se incrementa el puntero DBNZ (r2,OTRO) ;y se decrementa el contador. LEA (r13,RANGO) ;Se almacenan los extremos inferior st r5,r13,0 ;y superior como resultado del st r6,r13,4 ;rango de los valores. bsr MODA stop MODA: LEA (r11,VAL_MODA) ;r11 puntero a resultado de la moda. xor r3,r3,r3 ;Frecuencia inicial de la moda es cero. BUC_EX: LOAD (r2,MEDIDA) ;r2 es el contador del bucle interno. LEA (r10,MEDIDA);r10 es el puntero a los datos. add r10,r10,4 xor r4,r4,r4 ;r4 es la frecuencia del dato ai. BUC_IN: ld r7,r10,0 ;r7 se carga con el dato ai. cmp r13,r5,r7 ;Si ai=Inf se incrementa la frecuencia bb0 2,r13,NOES ;FR de aparición del valor ai. add r4,r4,1 NOES: add r10,r10,4 ;Se incrementa el puntero y DBNZ (r2,BUC_IN) ;se decrementa el contador. cmp r13,r4,r3 ;Si la frecuencia de ai no es mayor que bb0 8,r13,MENOR ;la frecuencia de la moda nada se hace. st r5,r11,0 ;Caso contrario se actualiza la moda st r4,r11,4 ;y la frecuencia de la moda. or r3,r4,r0 MENOR: add r5,r5,1 ;Se incrementa el extremo inferior y cmp r13,r5,r6 ;si no es mayor que el extremo superior bb0 8,r13,BUC_EX;se inicia el bucle. jmp (r1) MEDIDA: data 12, 107, 103, 106, 106, 107, 111 data 106, 109, 108, 106, 105, 107 RANGO: data 0, 0 VAL_MODA: data 0, 0