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. ;Comienza el código nuevo insertado para varias modas. cmp r13,r4,r3 ;Si la frecuencia de ai no es mayor que bb1 10,r13,MENOR;la frecuencia de la moda nada se hace. bb0 2,r13,MAYOR ;Se salta si la frecuencia es mayor. ;Si son iguales las frecuencias se incrementa m y se accede ld r13,r11,0 ;a la dirección donde hay que almacenar add r13,r13,1 ;la nueva moda y la frecuencia, st r13,r11,0 ;incrementando el puntero r11 mak r13,r13,0<2>;en m+1 palabras. st r5,r11,r13 ;Se inserta la nueva moda. add r13,r13,4 ;Se inserta la frecuencia de la nueva st r4,r11,r13 ;moda, que es igual a la anterior. br MENOR MAYOR: add r13,r0,1 ;Se hace m=1 y se almacena en memoria. st r13,r11,0 st r5,r11,4 ;Se inserta la nueva moda. st r4,r11,8 ;Se inserta la nueva frecuencia y or r3,r4,r0 ;se actualiza este valor. MENOR: add r5,r5,1 ;Finaliza el código nuevo insertado para varias modas. 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 16 data 25, 26, 22, 29, 25, 27, 25, 27 data 20, 30, 29, 29, 22, 28, 22, 23 RANGO: data 0,0 VAL_MODA: data 0,0