PUSH: MACRO (ra) subu r30,r30,4 st ra,r30,0 ENDMACRO POP: MACRO (ra) ld ra,r30,0 addu r30,r30,4 ENDMACRO DBNZ: MACRO(ra,eti) sub ra,ra,1 cmp r3,ra,0 bb0 2,r3,eti ENDMACRO GR_NUDOS: PUSH (r1) PUSH (r31) addu r31,r30,r0 ld r2,r31,12 ;r2 con la dirección del digrafo. ld r20,r31,8 ;r20 con la dirección del resultado. ld r5,r2,0 ;r5 es el contador de nodos Cn. mulu r3,r5,4 ;Se reserva espacio para variables sub r30,r31,r3 ;locales en el marco de pila. add r8,r0,1 ;r8 es el nodo a calcular su grado. S_NODO: add r10,r2,8 ;r10 puntero P a arcos. ;Inicializar a cero las variables locales en marco de pila ld r4,r2,0 ;r4 es el contador de nudos. add r29,r30,0 PONCERO: st r0,r29,0 ;Se ponen a cero las variables add r29,r29,4 ;locales. DBNZ (r4,PONCERO) ld r6,r2,4 ;r6 es el contador de arcos Ca. S_ARCO: ld r9,r10,0 ;r9 contiene M(P). cmp r3,r8,r9 bb1 ne,r3,VER_VD ld r3,r10,4 ;Si está el nodo i en el arco se pone mulu r3,r3,4 ;a 1 la variable local que add r4,r0,1 ;corresponde al nodo de conexión. sub r3,r31,r3 st r4,r3,0 VER_VD: ld r9,r10,4 ;r9 contiene M(P+4). cmp r3,r8,r9 bb1 ne,r3,VER_SIG ld r3,r10,0 ;Si está el nodo i en el arco se pone mulu r3,r3,4 ;a 1 la variable local que add r4,r0,1 ;corresponde al nodo de conexión. sub r3,r31,r3 st r4,r3,0 VER_SIG: add r10,r10,8 ;Se incrementa el puntero P DBNZ (r6,S_ARCO);y se pasa al siguiente arco. ;Contar el número de unos que hay en las variables locales ld r4,r2,0 ;r4 es el contador de nudos. add r29,r30,0 xor r7,r7,r7 ;Se pone a cero el acumulador g(i). SUMA: ld r3,r29,0 ;Se accede a M(r30) y se realiza la add r7,r7,r3 ;operación g(i)=g(i)+M(r30++). add r29,r29,4 DBNZ (r4,SUMA) st r7,r20,0 ;Se inserta el grado del nodo add r20,r20,4 ;en el Resultado. add r8,r8,1 ;Se pasa al nodo siguiente. DBNZ (r5,S_NODO) addu r30,r31,r0 POP (r31) POP (r1) jmp (r1) ;Programa llamante a GR_NUDOS para el ejemplo del enunciado llamante: addu r30,r0,60000 or r3,r0,low(DIGRAFO) or.u r3,r3,high(DIGRAFO) PUSH (r3) or r3,r0,low(GRADO) or.u r3,r3,high(GRADO) PUSH (r3) bsr GR_NUDOS stop org 5000 DIGRAFO: data 4, 6, 1, 2, 1, 4, 2, 3, 2, 4, 4, 2, 4, 3 org 6000 GRADO: res 400