PUSH: MACRO(ra) subu r30,r30,4 st ra,r30,0 ENDMACRO POP: MACRO(ra) ld ra,r30,0 addu r30,r30,4 ENDMACRO 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 CHAR_CMP: PUSH (r1) ld r1,r30,4 ;r1 contiene el carácter c1. ld r2,r30,8 ;r2 contiene el carácter c2. clr r1,r1,1<5> ;Se pasa c1 a mayúscula. clr r2,r2,1<5> ;Se pasa c2 a mayúscula. cmp r4,r1,r2 ;Se comparan los dos caracteres. bb1 hi,r4,MAYOR_C1 bb1 lo,r4,MENOR_C1 add r29,r0,r0 ;Si son iguales r29=0. br FIN_CH MAYOR_C1: add r29,r0,1 ;Si c1>c2 se carga r29=1. br FIN_CH MENOR_C1: add r29,r0,-1 ;Si c1Ns se intercambian los st r6,r5,4 ;punteros. add r8,r0,1 ;Se hace Cambio=true. SEGUIR: add r5,r5,4 ;Se incrementa el puntero a la ld r6,r5,0 ;lista y Ns es el nuevo valor de N. br BUCLE_O FIN_ORD: bb0 0,r8,FINAL ;Si Cambio=false la lista está br INICIO ;ordenada, si no se vuelve a FINAL: POP(r1) ;empezar jmp(r1) PPAL: addu r30,r0,60004 LEA (r2,LISTA) PUSH (r2) bsr ORDENAR stop LISTA: data 10000, 10100, 10200, 10300, 0 org 10000 data "LUNA LUNA JOSE LUIS\0" org 10100 data "Luna Luna Jose\0" org 10200 data "GARCIA PEREZ JESUS\0" org 10300 data "GARCIA BLANCO JESUS\0"